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

mre*_*elt 24 logging android root linux-kernel panic

我在我的设备上使用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"
Run Code Online (Sandbox Code Playgroud)

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

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

在此先感谢您的帮助!

h22*_*h22 27

至于我,

cat /proc/last_kmsg 
Run Code Online (Sandbox Code Playgroud)

重启后(由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
Run Code Online (Sandbox Code Playgroud)

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

  • 此文件是否存在是设备没有惊慌失措 (2认同)

小智 10

在Android-7.0或更高版本上,last_kmesg日志似乎已移至:/ sys / fs / pstore / console-ramoops,因此请尝试:

cat /sys/fs/pstore/console-ramoops
Run Code Online (Sandbox Code Playgroud)

在nexus-5x上对我来说效果很好

  • 对我来说,它是`cat /sys/fs/pstore/console-ramoops-0`。 (4认同)

小智 8

/data/dontpanic文件夹怎么样?发生内核恐慌后,您可以将USB线连接到Android设备并检查该文件夹中的文件ADB.

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

apanic_console

apanic_threads

apanic_threads当内核发生混乱时,您可以找到正在运行的线程/进程.在apanic_console你可能会发现更多的信息,比如一些关键寄存器堆栈跟踪和值:PC,LR,等
他们将帮助您调试开始.