Während der Fehlersuche bei einer Panic, die innerhalb eines Moduls oder unter Benutzung von GDB auf einem entfernten System gegen ein System, das dynamische Module benutzt, ausgelöst wurde, müssen Sie GDB mitteilen, wie es an die Informationen zu den Symbolen dieser Module kommt.
Zuerst müssen Sie die Module mit Informationen zur Fehlersuche bauen:
# cd /sys/modules/linux # make clean; make COPTS=-g
Falls Sie GDB auf einem entfernten System benutzen, können Sie kldstat auf dem Zielsystem starten, um herauszufinden, wohin die Module geladen wurden:
# kldstat Id Refs Address Size Name 1 4 0xc0100000 1c1678 kernel 2 1 0xc0a9e000 6000 linprocfs.ko 3 1 0xc0ad7000 2000 warp_saver.ko 4 1 0xc0adc000 11000 linux.ko
Falls Sie einen Speicherauszug nach einem Absturz auf Fehler untersuchen, müssen Sie die linker_files-Liste abgehen, beginnend mit linker_files->tqh_first und den link.tqe_next-Zeigern folgend, bis Sie den Eintrag mit dem Dateinamen, nach dem Sie suchen, gefunden haben. Der Adress-Teil des Eintrags ist die Adresse, wohin das Modul geladen wurde.
Als Nächstes müssen Sie den Adressabstand des Textabschnitts innerhalb des Moduls herausfinden:
# objdump --section-headers /sys/modules/linux/linux.ko | grep text 3 .rel.text 000016e0 000038e0 000038e0 000038e0 2**2 10 .text 00007f34 000062d0 000062d0 000062d0 2**2
Das, wonach Sie suchen, ist die .text-Zeile, Zeile 10 im Beispiel oben. Die vierte hexadezimale Spalte (insgesamt die sechste) zeigt den Adressabstand des Textabschnitts innerhalb der Datei. Addieren Sie diesen Adressabstand zu der Ladeadresse des Moduls, um die Verschiebungsadresse für den Code des Moduls zu erhalten. In unserem Beispiel erhalten wir 0xc0adc000 + 0x62d0 = 0x0ae22d0. Benutzen Sie den add-symbol-file-Befehl in GDB, um dem Debugger das Modul mitzuteilen:
(kgdb) add-symbol-file /sys/modules/linux/linux.ko 0xc0ae22d0 add symbol table from file "/sys/modules/linux/linux.ko" at text_addr = 0xc0ae22d0? (y or n) y Reading symbols from /sys/modules/linux/linux.ko...done. (kgdb)
Sie sollten nun auf alle Symbole im Modul zugreifen können.
Zurück | Zum Anfang | Weiter |
Online-Kernel-Fehlersuche mit GDB auf einem entfernten System | Nach oben | Fehlersuche bei einem Konsolen-Treiber |
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.