Kernel Debugging

xxbsd
Neugieriger
Neugieriger
Beiträge: 17
Registriert: Dienstag 8. Juli 2003, 12:42

Kernel Debugging

Beitrag von xxbsd »

Hallo,

hat schon jemand Erfahrung mit Kernel Debuggern auf der Box gemacht?
Also zum Beispiel kdb oder kgdb (Source Level Debugger). Bei letzterem habe ich mal auf der Homepage gestoebert.
Der MPC8xx soll zumindest experimentell unterstuetzt sein, so dass ich die Chance fuer die Lauffaehigkeit des kgdb auf der Box als gar nicht schlecht einschaetze.
Bevor ich aber damit experimentiere, waere ich fuer Hinweise pro und contra dankbar.

mfg, xxbsd
woglinde
Einsteiger
Einsteiger
Beiträge: 261
Registriert: Donnerstag 15. November 2001, 00:00

Beitrag von woglinde »

Noe geht nicht,

Probleme mit dem watchdog. Da wird zu schnell resetet als das du was debuggen kannst.

Gruss Woglinde
xxbsd
Neugieriger
Neugieriger
Beiträge: 17
Registriert: Dienstag 8. Juli 2003, 12:42

Beitrag von xxbsd »

So, ich hab jetzt mal ein bisschen mit dem kgdb rumgespielt.
Es sieht immer noch sehr gut aus: Mein neuer Kernel laesst sich anhalten
und dann vom Server aus auf Source-Level-Ebene debuggen. Genauso wie man das
bei Userland-Programmen von der Kombination gdbserver/gdb kennt.

Was den Wachhund angeht: Es ist klar, dass der nicht anfangen darf zu bellen.
Aber der geschickte Einbrecher wirft ihm oefters mal einen Knochen hin und
dann ist der friedlich.
Im konkreten Fall heisst das, das ein kleiner Patch für den Watchdog-Reset
im seriellen Treiber beim Polling des Uart das Problem behebt.

Trotzdem gibt es noch an anderer Stelle Probleme: Momentan nutze ich nur
den recht alten kgdb-stub, der bereits im 2.4.27er Kernel vorhanden ist.
Die aktuelle Version von der im ersten Posting erwaehnten Homepage benutzt
leider nur den seriellen Treiber fuer den 8250-Uart. Daher muessen diese
Patches erst auf den mpc8xx-Uart portiert werden, bevor sie auf der Box
lauffaehig sind.
Die neue kgdb-Version bietet Support fuer Kernel-Threads und wuerde stark
vereinfachtes Debuggen von Modulen ermoeglichen. Ausserdem ist die Schnittstelle
zum Aufruf des kgdb deutlich flexibler.

Und zum Schluss gibt es noch ein Problem mit dem Verlassen des kgdb per detach.
Danach haengt der Kernel und die Box laesst sich nur durch Reset wieder aktivieren.

Es ist also noch ein wenig Arbeit noetig, aber wie am Anfang bereits geschrieben,
ist die grundsaetzliche Funktionalitaet schon mal gegeben.

mfg, xxbsd
woglinde
Einsteiger
Einsteiger
Beiträge: 261
Registriert: Donnerstag 15. November 2001, 00:00

Beitrag von woglinde »

Hi,

danke das hoert sich nicht schlecht an. Muss sich nur noch einer finden
der portiert.

Gruss woglinde
xxbsd
Neugieriger
Neugieriger
Beiträge: 17
Registriert: Dienstag 8. Juli 2003, 12:42

Beitrag von xxbsd »

Ich habe mich inzwischen an die Portierung gemacht. Das meiste ist auch bereits umgesetzt.
Es fehlt jetzt "nur" noch der kgdb-eigene Interrupt-Handler fuer die serielle Leitung. Der will noch nicht so, wie er sollte.
Ich fuerchte, das sind jetzt die beruehmten letzten 10%, die dann 90% der Zeit benoetigen.

mfg, xxbsd
xxbsd
Neugieriger
Neugieriger
Beiträge: 17
Registriert: Dienstag 8. Juli 2003, 12:42

Beitrag von xxbsd »

So, nach langer Zeit melde ich mich wieder zu dem Thema:

Ich habe die Portierung des KGDB inzwischen abgeschlossen. Damit ist er dann einsetzbar und kann vielleicht einige printk-Orgien beim Fehlersuchen und Analysieren ersparen.

Das ganze ist ein groesseres Paket geworden und besteht aus folgenden Komponenten:
  • ~/cdk/Patches/linux-2.4.27-dbox2-kgdb.diff:
    Diff-Datei mit allen notwendigen Kernel-Patches.
  • ~/cdk/Patches/linux-2.4.27-dbox2.config-kgdb:
    Config-Datei fuer den Kernel erweitert um die KGDB-Konfiguration.
  • ~/cdk/Patches/gdbmod.diff:
    Patches fuer ein neues Programm gdbmod.
    Entspricht gdb-remote, hat aber zusaetzlich Support fur das Debuggen von Modulen.
  • ~/apps/misc/tools/gdbstart:
    Directory mit neuem Programm gdbstart.
    Dient zum Starten des Kernel-Debuggers aus dem User-Mode auf der Box.
  • ~/boot/u-boot-config/u-boot.cdk.kgdb.dbox2.h:
    optionale Config-Datei fuer den u-boot.
    Damit kann man direkt beim Kernel-Start in den Debugger sprigen. Das erlaubt das Debuggen von Kernel- und Modul-Initialisierung.
  • ~/cvs/cdk/Makefile.am:
    neues make-target devel_kgdb.
    Beinhaltet den gdbmod (s.o.) und den ddd. Letzteres ist ein grafisches Frontend fuer den gdb auf dem Server-Rechner.
    Diese beiden Programme sind auch in die rules-Dateien eingebunden.
  • ~/cdk/doc/README.kgdb.de:
    Readme-File mit kurzen Hinweisen zur Installation und Betrieb des Debuggers. Ausserdem ein paar hilfreiche gdb-Macros.
Der KGDB ist nur mit einem uebersetztem CDK als Yadd gebootet einsetzbar. Das Einbinden der Kernel-Patches und Configs muss manuell gemacht werden. Dadurch wird der "Normalbetrieb" ohne Kernel-Debugger nicht beeinflusst.
Falls Interesse am KGDB besteht, kann obiges von mir aus gerne ins CVS einfliessen. Eventuell portiere ich es auch noch mal auf den 2.6er Kernel.

mfg, xxbsd
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

Hallo xxbsd,

ich bin auf jeden Fall interessiert.

Gruß Houdini