Zweck: Dies ist ein kurzer Beitrag, in dem wir sehen, wie Look-up einen symbolischen Namen (Funktion oder eine Variable) von der Adresse, dass es in den Kernel dmesg Protokolle und umgekehrt ausgegeben wird.

Hinweis: Bitte beachten Sie, dass dies nicht eine HOWTO, wie man Linux Kernel debuggen, wenn es sich um eine Kernel Panic OOPS oder tut. Kann sein, dass ich diese Themen zu einem späteren Zeitpunkt.

Angenommen, Sie Ihren Kernel und Sie bemerken die folgende Anomalie in Ihrem dmesg logs obwohl Ihr System scheint zu booten feinen zumindest mit bloßem Auge:

[ 24.155180] irq 17: nobody cared (try booting with the "irqpoll" option)
[ 24.155284] Pid: 0, comm: swapper Not tainted 2.6.32-bpo.5-686 #1
[ 24.155373] Call Trace:
[ 24.155463] [<c106cf75>] ? __report_bad_irq+0x24/0x69
[ 24.155554] [<c106cf7c>] ? __report_bad_irq+0x2b/0x69
[ 24.155644] [<c106d0a1>] ? note_interrupt+0xe7/0x13e
[ 24.155734] [<c106d5cf>] ? handle_fasteoi_irq+0x7a/0x97
[ 24.155827] [<c1004dd7>] ? handle_irq+0x17/0x1b
[ 24.155915] [<c1004659>] ? do_IRQ+0x38/0x89
[ 24.156002] [<c10037f0>] ? common_interrupt+0x30/0x38
[ 24.156096] [<c10400d8>] ? ftrace_raw_output_workqueue_insertion+0x80/0x8c
[ 24.156192] [<c104f06e>] ? tick_nohz_stop_sched_tick+0x34a/0x36e
[ 24.156285] [<c1002367>] ? cpu_idle+0x67/0xa4
[ 24.156375] [<c13bf7fc>] ? start_kernel+0x318/0x31d
[ 24.156461] handlers:
[ 24.156539] [<f7cc3855>] (usb_hcd_irq+0x0/0x71 [usbcore])
[ 24.156755] Disabling IRQ #17

Nun lassen Sie uns sagen, Sie wollen verstehen, was tut die oben hochtechnischen Ausgabemittel. Lassen Sie uns Pickup eine Zeile aus dem obigen heraus sagen, das eine in der roten Farbe und wir davon ausgehen, dass diese Zeile könnte uns nützliche Informationen über die oben Anomalie, obwohl das vielleicht nicht der Fall sein, weil in einer tatsächlichen oops, es in der Regel ist die erste oder die letzte Zeile in der Rückverfolgung, die die nützlichsten Debugging-Informationen zur Verfügung gestellt. Lasst uns verstehen, one-by-one, was jeder dieser Spalten in der folgenden Zeile bedeutet:

? handle_irq + 0×17 / 0x1b [24.155827] [<c1004dd7>]? Handle_irq + 0 × 17 / 0x1b

[24.155827] ist der Zeitstempel Informationen vom Linux Kernel gedruckt. Dies bedeutet einfach, dass dieses Line-Ausgang war etwa 24 Sekunden später, nachdem der Linux Kernel gestartet Booten.

, in the System Map table. [<c1004dd7>] Ist die Adresse (sagen wir einfach, bis jetzt) ​​der Funktion, handle_irq, in der System-Karte Tisch.

handle_irq ist der Name des "beleidigenden"-Funktion in den Linux-Kernel-Code.

0 × 17 ist der Offset (und nicht die Line Number), die im Grunde darauf hin, das Stück des Codes in der Funktion, die in der obigen Aktion beteiligt war.

. 0x1b ist die Größe der Funktion, handle_irq. ). Der Offset (0 × 17) sollte immer kleiner als die Größe der Funktion (0x1b).

Nun wollen wir sehen, wie diese Informationen auf die System-Karte Tisch-Datei, die erzeugt werden, wenn Sie Ihre Linux-Kernel installieren verwandt ist.

Geben Sie den folgenden Befehl ein:

# cat /boot/System.map-2.6.32-bpo.5-686 | grep handle_irq

Sie müssen den Namen des Kernel-System Map Tabelle Datei entsprechend ersetzen.

Output:

c1004dc0 T handle_irq
c100cffc t intel_pmu_handle_irq
c100d2a4 t p6_pmu_handle_irq
c100d3bd t amd_pmu_handle_irq

Wir sind in der ersten Zeile interessiert, da das ist, was wir denken, unsere beleidigen Funktion ist. that we found in the output above. Allerdings ist die Adresse nicht übereinstimmt c1004dc0 mit der Adresse (c1004dd7), dass wir in der Ausgabe oben gefunden. Wie bringen wir diese Zahlen?

ie Lassen Sie uns versuchen, die Hex-Zahl c1004dc0 von c1004dd7 dh subtrahieren

c1004dd7 - c1004dc0 = 17

Bingo! Die Zahl 17 Spielen mit dem Ausgang, 0 × 17, die wir in der Anomalie einsehen. Um es zusammenzufassen:

. c1004dc0 ist der Ausgangspunkt Adresse der Funktion handle_irq.

c1004dd7 die Adresse (nach Zugabe von 17 der oben Startadresse) des Teils des Codes in der Funktion.

Ebenso können Sie diese Übung für andere Funktionen wie cpu_idle und start_kernel aus der obigen Ausgabe von dmesg tun.

Das ist es!

Kontaktfreudig sein, Share!