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

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

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


person mreichelt    schedule 13.03.2012    source источник


Ответы (5)


Как по мне,

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.

person Audrius Meskauskas    schedule 12.11.2012
comment
Я отмечаю это как правильный ответ, но кажется, что он работает только в том случае, если эта функция была правильно реализована для конкретного устройства. Что, для меня (на момент, когда я задавал вопрос и для моего конкретного устройства) было не так. - person mreichelt; 24.10.2014
comment
Существует ли этот файл, если устройство не запаниковало - person Suici Doga; 21.02.2016
comment
Не существует, версия ядра 3.0.8+. - person ogurets; 12.02.2017

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

cat /sys/fs/pstore/console-ramoops

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

person zhiqiu    schedule 02.11.2017
comment
Для меня это было cat /sys/fs/pstore/console-ramoops-0. - person nyanpasu64; 13.10.2018
comment
Да, он может добавить идентификатор в качестве суффикса. - person zhiqiu; 26.09.2019

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

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

apanic_console

apanic_threads

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

person Weilin Luo    schedule 09.05.2012
comment
У меня есть эта папка, но файлов внутри нет (после паники). Выполнил 'find / -name panic' и нашел кое-что интересное: /sys/module/kernel/parameters/panic и /proc/sys/kernel/panic, оба содержащие 2 на моем устройстве. - person ogurets; 12.02.2017
comment
Отличный совет. Спасибо! - person eusoubrasileiro; 28.02.2021

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

cat /proc/last_kmsg

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

person Kyle    schedule 13.05.2013

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

Где Android хранит журналы завершения работы?

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

person Pavan Manjunath    schedule 14.03.2012
comment
К сожалению, все описанные там файлы доступны только при корректной работе модуля APANIC - чего я и пытаюсь добиться... - person mreichelt; 20.03.2012
comment
@mreichelt Не удалось подключиться к adb и попытаться вытащить kmsg? - person Pavan Manjunath; 20.03.2012
comment
kmsg — это текущий журнал. Я хочу получить журналы ядра после возникновения паники ядра, т. е. когда произошел сбой системы и перезагрузка устройства. Для этого и существует APANIC. - person mreichelt; 21.03.2012
comment
Если вы хотите выяснить, что вызвало панику ядра, то я думаю, что журналы ядра, приведшие к панике, должны вас заинтересовать. Независимо от того, до или после, журналы ядра AFAIR всегда находятся в kmsg. - person Pavan Manjunath; 21.03.2012