Подтвердить что ты не робот

Android: Как получить журналы ядра после паники ядра?

Я использую пользовательский ПЗУ 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 на работающей системе. Может быть, используя систему отладки ядра? На данный момент я довольно новичок в этом.

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

4b9b3361

Ответ 1

Что касается меня,

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.

Ответ 2

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

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

apanic_console

apanic_threads

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

Ответ 3

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

cat /proc/last_kmsg

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

Ответ 4

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

Где хранятся журналы закрытия Android-магазина?

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

Ответ 5

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

cat /sys/fs/pstore/console-ramoops

он работает хорошо для меня на nexus-5x

Ответ 6

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