在内核崩溃后获取Linux内核调试信息

6
有什么方法可以在内核崩溃后获取先前的调试信息吗?
我正在尝试开发一个内核模块,基本上在内核网络堆栈中捕获IP层的IP数据包,并在进行一些修改后将相同的数据包发送回NIC进行传输。
在所有这些过程中,我使用 printk() 编写调试信息。但是如果出现任何问题并且内核失败,我们不得不重新启动系统。有没有办法获取我的先前的调试信息,因为通过 dmesg 命令获取时,在重新启动后调试信息不再存在?
6个回答

8

实际上,/var/log/dmesg文件包含了当前启动的打印信息日志。在Ubuntu中,/var/log/kern.log文件包含了上一次启动内核打印信息日志。在其他Linux版本中,例如Fedora,则会包含在/var/log/messages文件中。


4

即使系统重启后,内核日志消息仍然可以在/var/log/dmesg文件中查看。

有许多带有dmesg.X的文件,这些文件是先前的内核日志。 dmesg是最新的文件。

请参阅dmesg和/var/log/kern.log之间的区别


2
您可以尝试通过键盘或串行控制台输入魔术 SysRq 键序列来与挂起的系统进行交互。 (参考文档)

实际上,当我运行我的模块时,系统会挂起,所以我无法做任何事情,不得不强制重启。我正在尝试使用 SysRq 魔术键序列,但我没有得到结果。 - akp
在内核的配置和构建过程中,您可能需要启用魔术sysrq - Basile Starynkevitch

2

最近的Linux版本支持崩溃转储。成功时,将包括完整的内存转储,包括内核日志消息和堆栈跟踪。


1
实际上,崩溃信息(dmesg)位于/var/crash/位置。在这里,我们有每个系统崩溃的文件夹。文件夹名称类似127.0.0.1日期时间.vmcore-dmesg.txt。这些文件中包含了在崩溃之前执行的dmesg。

适用于RHEL 9.3 - undefined

0
GNOME Logs 是一款非常实用的软件。你可以将日志消息限制在最后一个会话,并轻松阅读在崩溃之前的最后几条消息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接