Android:内核恐慌后如何获取内核日志?

我在我的设备上使用Android Custom ROM,也使用自定义boot.img(自定义内核+ cmdline + ramdisk)。 我现在希望能够在内核崩溃后立即查看内核日志,但遗憾的是我无法使用串行控制台。

好消息:Android的Linux内核中似乎有一些源/模块正是为此目的编写的。 例如,在我的内核的.config文件中激活了以下行:

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

我的问题是:在我强制内核恐慌以便测试它之后,即通过使用insmod panic.ko加载一个简单的恐慌内核模块,似乎没有日志写入名为oem_log的MTD(存在于我的设备上)。 其次,RAM在重启后也不包含日志,因为它似乎被清除 – 或者也没有写入日志。

那么如何在恐慌之后获取内核日志呢? 如果有一种方法可以测试正在运行的系统上的APANIC,那将会很有帮助。 也许通过使用内核调试系统? 截至目前,我对此很陌生。

在此先感谢您的帮助!

至于我,

 cat /proc/last_kmsg 

重启后(由insmod中的内核恐慌引起)确实列出了与崩溃相关的消息,比如

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

所以你至少可以试试。 我在Galaxy Nexus上使用Linux 3.0.31-g4f6d371。

/data/dontpanic文件夹怎么样? 发生内核严重错误后,您可以将USB电缆连接到Android设备,并通过ADB检查该文件夹中的文件。

在发生内核恐慌后,我发现此文件夹包含一些apanic文件。 例如,如果发生了内核恐慌并且你去检查文件夹,你可能会发现这两个文件:

apanic_console

apanic_threads

您可以在apanic_threads中find内核崩溃发生时正在运行的线程/进程。 在apanic_console您可能会发现更多信息,例如堆栈跟踪和一些关键寄存器的值: PCLR等。
它们将帮助您开始调试。

Android创建一个RAM控制台并尝试在RAM中保存最后一个内核消息缓冲区(假设电源没有熄灭)。 您可以通过proc界面访问此文件,在我的系统上它是世界可读的:

 cat /proc/last_kmsg 

有关更多信息,请参阅内核代码@ drivers / staging / android / ram_console.c

我遇到了在Android中收集关机日志的类似问题。 我早就发布了这个问题,它有两种方法。 我使用第二个,因为第一个不适合我。 这是个问题

Android存储关闭日志在哪里?

希望这可以帮助。

似乎在Android-7.0或更高版本,last_kmesg日志被移动到:/ sys / fs / pstore / console-ramoops,所以尝试:

 cat /sys/fs/pstore/console-ramoops 

在nexus-5x上它对我很有用

可以使用dmesg命令访问Linux内核日志。 您可以在此处阅读有关Android Logging System的信息 。