Android: Как получить логи ядра после паники ядра? - PullRequest
23 голосов
/ 13 марта 2012

Я использую пользовательское ПЗУ Android на своем устройстве, также с пользовательским boot.img (пользовательское ядро ​​+ cmdline + ramdisk).Теперь я хочу иметь возможность просматривать журналы ядра сразу после паники ядра, но, к сожалению, я не могу использовать последовательную консоль.

Хорошая новость: в ядре Linux, похоже, есть некоторые источники / модулиAndroid, которые написаны именно для этой цели.Например, в моем файле .config для ядра активированы следующие строки:

CONFIG_ANDROID_RAM_CONSOLE=y
CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE=y
CONFIG_APANIC=y
CONFIG_APANIC_PLABEL="oem_log"

Моя проблема заключается в следующем: после того, как я вызвал панику ядра, чтобы проверить это, то есть, загрузив простой модуль ядра паникис insmod panic.ko кажется, что в MTD не было записано ни одного журнала с именем oem_log (который существует на моем устройстве).Во-вторых, оперативная память также не содержит журналов после перезагрузки, потому что она, кажется, очищена - или журналы также не записываются.

Так как я могу получить журналы ядра после паники?Также было бы полезно, если бы я мог протестировать APANIC на работающей системе.Может быть, с помощью системы отладки ядра?На данный момент я довольно новичок в этом.

Заранее благодарен за любую помощь!

Ответы [ 6 ]

26 голосов
/ 12 ноября 2012

Как по мне,

cat /proc/last_kmsg 

после перезагрузки (вызванной паникой ядра во время insmod) выводит список сообщений, относящихся к сбою, например

[  424.909515] Kernel panic - not syncing: Fatal exception
[  424.909606] Backtrace: 
[  424.909790] [<c005a5ec>] (dump_backtrace+0x0/0x10c) from [<c05f38dc>] (dump_stack+0x18/0x1c)
[  424.909973]  r6:c5cccf00 r5:00000000 r4:c08505a0 r3:00000000

Так что вы можете хотя бы попробовать. Я работаю с Linux 3.0.31-g4f6d371 на Galaxy Nexus.

8 голосов
/ 10 мая 2012

Как насчет /data/dontpanic папки?После возникновения паники ядра вы можете подключить USB-кабель к вашему устройству Android и проверить файлы в этой папке с помощью ADB.

Я обнаружил, что эта папка содержит некоторые файлы apanic после паники ядра.Например, если только что произошла паника ядра и вы пошли проверить папку, вы можете найти эти два файла:

apanic_console

apanic_threads

Вы можете найтив apanic_threads какой поток / процесс выполняется, когда происходит паника ядра.В apanic_console вы можете найти дополнительную информацию, такую ​​как трассировка стека и значения некоторых критических регистров: PC, LR и т. Д.
Они помогут вам начать отладку.

7 голосов
/ 02 ноября 2017

Кажется, на Android-7.0 или выше, журнал last_kmesg перемещается в: / sys / fs / pstore / console-ramoops, поэтому попробуйте:

cat /sys/fs/pstore/console-ramoops

у меня на nexus-5x

хорошо работает
3 голосов
/ 13 мая 2013

Android создает консоль RAM и пытается сохранить для вас последний буфер сообщений ядра в RAM (при условии, что питание не отключается). Вы можете получить доступ к этому файлу через интерфейс proc, и в моей системе он доступен для чтения:

cat /proc/last_kmsg

Для получения дополнительной информации см. Код ядра @ drivers / staging / android / ram_console.c

1 голос
/ 14 марта 2012

Я столкнулся с похожей проблемой сбора журналов выключения в Android.Я задал этот вопрос давно, и у него есть 2 подхода.Я использую второй, так как первый не работает для меня.Вот вопрос

Где журналы выключения магазина Android?

Надеюсь, это поможет.

0 голосов
/ 13 марта 2012

Доступ к журналу ядра Linux можно получить с помощью команды dmesg.Вы можете прочитать об Android Logging System здесь .

...