HOWTO: Поиск названия инструмента и адрес во время отладки ядра Linux
Цель: Это короткое сообщение, в котором мы увидим, как просмотровые имя символа (функция или переменная) с адреса, что оно выводится в ядре dmesg журналы и наоборот.
Примечание: Обратите внимание, что это не о том, как HOWTO для отладки ядра Linux, когда он выполняет OOPS или Kernel Panic. Может быть, я расскажу эти темы на более позднем этапе.
Допустим, вы обновить ядро и вы заметите следующее аномалии в логах dmesg даже если ваша система, как представляется нормально загрузится по крайней мере, невооруженным глазом:
[ 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
Теперь предположим, что вы хотите понять, что же указанные выше сугубо технических средств производства. Пикап Давайте линию от выше из сказать одно в красном цвете, и мы предполагаем, что эта линия может дать нам полезную информацию относительно выше аномалии, хотя это может быть не так, потому что в реальной сожалению, как правило, первого или последняя строка в обратной трассировки при условии самых полезных отладочную информацию. Давайте понимать друг за другом, что каждый из этих столбцов в следующей строке означает:
? handle_irq + 0×17 / 0x1b [24.155827] [<c1004dd7>]? Handle_irq + 0 × 17 / 0x1b
[24.155827] является временными метками информацию, напечатанную на ядре Linux. Это просто означает, что эта линия была выходом примерно 24 секунд спустя после ядра Linux начал загрузку.
, in the System Map table. [<c1004dd7>] Является адресом (давайте просто скажем, на данный момент) функции, handle_irq, в карте Система таблице.
handle_irq является название "оскорбление" функции в коде ядра Linux.
0 × 17 это смещение (а не номер строки), которые в основном указывает на кусок кода в функции, которая принимала участие в вышеуказанных действий.
. 0x1b является размер функции, handle_irq. ). Смещение (0 × 17) всегда должна быть меньше, чем размер функции (0x1b).
Теперь давайте посмотрим, как эта информация связана с системной таблице Карта-файл, созданный при установке Linux Kernel.
Дайте следующую команду:
# cat /boot/System.map-2.6.32-bpo.5-686 | grep handle_irq
Вам нужно будет заменить имя вашего ядра системы таблица файлов карт соответственно.
Выход:
c1004dc0 T handle_irq
c100cffc t intel_pmu_handle_irq
c100d2a4 t p6_pmu_handle_irq
c100d3bd t amd_pmu_handle_irq
Мы заинтересованы в первую линию, так как это то, что мы думаем, что наши оскорбления функция. that we found in the output above. Однако, адрес c1004dc0 не соответствует с адресом (c1004dd7), который мы нашли в выходной выше. Так как же нам примирить эти цифры?
ie Попробуем вычесть HEX числа c1004dc0 от c1004dd7 т.е.
c1004dd7 - c1004dc0 = 17
Бинго! Номер 17 матчей с выходными, 0 × 17, который мы получили в аномалии. Итак, подведем итог:
. c1004dc0 является отправной адрес функции handle_irq.
c1004dd7 является адресом (после добавления 17 до вышеуказанных исходных адрес) кусок кода в функции.
Кроме того, вы можете сделать это упражнение для другой функции, как и cpu_idle start_kernel из приведенных выше выходных dmesg.
Вот и все!













1 января 2011 в 5:15 вечера
[...] Подробнее: Linux Kernel OOPS и Kernel Panic системе отладки Карта | Debian ... Опубликовано в: Ядра ADD [...]
27 апреля 2011 в 11:38 вечера
Привет,
Как отладить ядро паники. Может у объяснить мне подробно на примере.
Я хотел бы обеспечить решение следующих 4 панику ядра.
VFS: монтируемой корневой (NFS файловой системе) на устройстве 0:11.
Освобождение инициализации памяти: 92K
Kernel Panic - не синхронизируются: попытался убить инициализации!
Backtrace:
[] (Dump_backtrace +0 × 0/0 × 114) с [] (dump_stack +0 × 18/0x1c)
R6: c7020000 r5: 00000004 r4: c02a4b88
[] (Dump_stack +0 × 0/0x1c) из [] (+0 паники X4C / 0 × 114)
[] (Паники +0 × 0/0 × 114) с [] (do_exit +0 × 74/0x5c0)
R3: R2 c029321c: c7023e34 R1: 00002710 r0: c026bca8
[] (Do_exit +0 × 0/0x5c0) из [] (do_group_exit +0 × 94/0xc8)
[] (Do_group_exit +0 × 0/0xc8) из [] (get_signal_to_deliver x2f0/0x32c +0)
R4: 0830009f
[] (Get_signal_to_deliver +0 × 0/0x32c) из [] (do_signal +0 × 58/0x65c)
[] (Do_signal +0 × 0/0x65c) из [] (do_notify_resume +0 × 20/0 × 54)
[] (Do_notify_resume +0 × 0/0 × 54) из [] (work_pending x1c +0 / 0 × 20)
R4: 000214e0
Ответить на этот комментарий
27 апреля 2011 в 11:40 вечера
Привет,
Как отладить ядро паники. Может у объяснить мне подробно на примере.
Я хотел бы просить, чтобы обеспечить решение для следующих панику ядра.
VFS: монтируемой корневой (NFS файловой системе) на устройстве 0:11.
Освобождение инициализации памяти: 92K
Kernel Panic - не синхронизируются: попытался убить инициализации!
Backtrace:
[] (Dump_backtrace +0 × 0/0 × 114) с [] (dump_stack +0 × 18/0x1c)
R6: c7020000 r5: 00000004 r4: c02a4b88
[] (Dump_stack +0 × 0/0x1c) из [] (+0 паники X4C / 0 × 114)
[] (Паники +0 × 0/0 × 114) с [] (do_exit +0 × 74/0x5c0)
R3: R2 c029321c: c7023e34 R1: 00002710 r0: c026bca8
[] (Do_exit +0 × 0/0x5c0) из [] (do_group_exit +0 × 94/0xc8)
[] (Do_group_exit +0 × 0/0xc8) из [] (get_signal_to_deliver x2f0/0x32c +0)
R4: 0830009f
[] (Get_signal_to_deliver +0 × 0/0x32c) из [] (do_signal +0 × 58/0x65c)
[] (Do_signal +0 × 0/0x65c) из [] (do_notify_resume +0 × 20/0 × 54)
[] (Do_notify_resume +0 × 0/0 × 54) из [] (work_pending x1c +0 / 0 × 20)
R4: 000214e0
Ответить на этот комментарий
10 октября 2012 в 8:01
Хорошие сообщения. Я ищу его.
Ответить на этот комментарий