繁体   English   中英

linux内核模块生成的核心文件

[英]Core files generated by linux kernel modules

我正在尝试加载内核模块(树外),并且dmesg出现了紧急情况。 虽然内核仍然启动。 我猜模块恐慌了。

在哪里可以找到核心文件? 我想使用gdb看看有什么问题。

在哪里可以找到核心文件?

核心文件严格来说是用户空间的概念。

我想使用gdb看看有什么问题。

您可能正在寻找KGDB和/或Kdump / Kexec

不会有核心文件。 您应该遵循内核消息中的堆栈跟踪。 输入dmesg以查看它。

通常,无论何时生成coredump,它都会声明“ core dumped”。 这可能是确认是否生成了coredump的一种高级简便方法,但是,仅此语句不能保证coredump文件的可用性。 生成coredump的位置通过sysctl通过core_pattern指定给内核。 您需要检查系统的core_pattern中存在的信息。 另外,请注意,对于Ubuntu,默认情况下,coredump文件大小似乎保持为零,这将避免生成coredump。 因此,您可能需要检查核心文件大小ulimit并将其更改为'ulimit -c unlimited'(如果为零)。 联机帮助页http://man7.org/linux/man-pages/man5/core.5.html解释了由于各种原因而导致无法生成coredump的各种原因。

但是,从您的解释来看,您似乎正面临“内核崩溃”,因为即使特定的模块出现了紧急情况/已被杀死,内核仍处于启动状态(不稳定状态)。 在这种情况下,内核将输出oops消息。 请参阅链接https://www.kernel.org/doc/Documentation/oops-tracing.txt ,其中包含有关内核oops消息的信息。

链接的摘要:通常,通过klogd从内核缓冲区读取Oops文本,并将其交给syslogd,然后将其写入syslog文件,该文件通常为/ var / log / messages(取决于/etc/syslog.conf)。 有时klogd死亡,在这种情况下,您可以运行dmesg> file从内核缓冲区读取数据并保存。 或者,您可以使用cat / proc / kmsg>文件,但是您必须闯入才能停止传输,kmsg是“永无止境的文件”。

printk用于生成oops消息。 printk通过不同的日志级别/优先级来标记严重性,并允许根据消息的严重性对消息进行分类。 (以KERN_EMERG,KERN_ALERT,KERN_CRIT等宏的形式在文件linux / kernel.h或linux / kern_levels.h中定义了不同的优先级。)因此,您可能需要使用cat /检查系统中的默认日志记录级别。 proc / sys / kernel / printk并根据您的要求进行更改。 另外,检查日志记录守护程序是否已启动,以及是否要调试内核,请确保使用CONFIG_DEBUG_INFO编译内核。

使用GDB查找在ubuntu中惊慌或被举动的内核的位置的方法位于链接https://wiki.ubuntu.com/Kernel/KernelDebuggingTricks ,这可能是您调试内核时可以使用的方法之一哎呀。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM