Android:内核崩溃后如何获取内核日志?

Android:内核崩溃后如何获取内核日志?,android,linux-kernel,root,logging,panic,Android,Linux Kernel,Root,Logging,Panic,我在我的设备上使用了一个Android自定义ROM,还有一个自定义boot.img(自定义内核+cmdline+ramdisk)。我现在希望能够在内核死机后立即查看内核日志,但不幸的是,我不能使用串行控制台 好消息是:Android的Linux内核中似乎有一些源代码/模块正是为此目的编写的。例如,在内核的my.config文件中激活了以下行: CONFIG_ANDROID_RAM_CONSOLE=y CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE=y CONF

我在我的设备上使用了一个Android自定义ROM,还有一个自定义boot.img(自定义内核+cmdline+ramdisk)。我现在希望能够在内核死机后立即查看内核日志,但不幸的是,我不能使用串行控制台

好消息是:Android的Linux内核中似乎有一些源代码/模块正是为此目的编写的。例如,在内核的my.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,这也会很有帮助。也许通过使用内核调试系统?到目前为止,我对这方面还很陌生


提前感谢您的帮助

可以使用
dmesg
命令访问Linux内核日志。您可以阅读有关Android日志系统的信息。

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


希望这有帮助。

关于
/data/dontpanic
文件夹如何?内核死机发生后,您可以将USB电缆连接到Android设备,并通过
ADB
检查该文件夹中的文件

在内核死机发生后,我发现这个文件夹包含一些
apanic
文件。例如,如果内核死机刚刚发生,您去检查文件夹,您可能会发现以下两个文件:

apanic_控制台

apanic\u线程

您可以在
apanic\u threads
中找到内核死机时正在运行的线程/进程。在
apanic\u控制台
中,您可能会找到更多信息,如堆栈跟踪和一些关键寄存器的值:
PC
LR
等。
他们将帮助您开始调试。

至于我

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
[424.909515]内核死机-不同步:致命异常
[424.909606]回溯:
[424.909790][](转储堆栈+0x18/0x1c)中的[](转储回溯+0x0/0x10c)
[424.909973]r6:c5cccf00 r5:00000000 r4:c08505a0 r3:00000000

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

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

cat /proc/last_kmsg

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

在android-7.0或更高版本中,最后一个_kmesg日志被移动到:/sys/fs/pstore/console ramoops,因此请尝试:

cat /sys/fs/pstore/console-ramoops

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

不,你不能。当内核死机时,所有用户空间程序都会立即停止,因此无法检测死机的原因。dmesg、/proc/kmsg和logcat也是如此。不幸的是,这里描述的所有文件只有在APANIC模块正常工作的情况下才可用-这就是我试图实现的…@mreichelt连接到
adb
并尝试拉取
kmsg
?kmsg是当前日志。我想在内核死机发生后,即系统崩溃和设备重新启动时,获取内核日志。这就是APANIC的作用。如果您想找出导致内核恐慌的原因,那么我认为导致恐慌的内核日志应该是您感兴趣的。不管是之前还是之后,AFAIR内核日志始终在kmsgI中,我将此标记为正确答案-但只有在为特定设备正确实现此功能时,它才似乎起作用。对我来说(当时我问了这个问题,我的特定设备)不是这样的。这个文件存在吗?是设备没有恐慌吗?不存在,内核版本3.0.8+。我有这个文件夹,但里面没有文件(恐慌之后)。执行“find/-name“panic”,发现了一些有趣的东西:“/sys/module/kernel/parameters/panic”和“/proc/sys/kernel/panic”,在我的设备上都包含“2”。非常好的提示。谢谢!对我来说,它是
cat/sys/fs/pstore/console-ramoops-0
。是的,它可以添加id作为后缀。