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

时间:2015-10-26 02:13:05

标签: linux linux-kernel gdb linux-device-driver device-driver

我正在尝试加载内核模块(out-of-tree),dmesg显示出恐慌。内核仍在运行。我猜这个模块很恐慌。

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

3 个答案:

答案 0 :(得分:2)

  

在何处找到核心文件?

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

  

我想使用gdb,看看问题是什么。

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

答案 1 :(得分:0)

不会成为核心档案。 您应该遵循内核消息中的堆栈跟踪。输入dmesg来查看它。

答案 2 :(得分:0)

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

但是,根据您的解释,您似乎面临着'内核oops' ,因为内核仍然处于启动状态(不稳定状态),即使某个特定模块遇到了恐慌&#39 ; d /杀死。在这种情况下,内核应打印oops消息。请参阅链接https://www.kernel.org/doc/Documentation/oops-tracing.txt,其中包含有关内核oops消息的信息。

  

摘要来自链接:通常,kopsd从内核缓冲区读取Oops文本   交给syslogd,通常将其写入syslog文件   / var / log / messages(取决于/etc/syslog.conf)。有时是klogd   死了,在这种情况下你可以运行dmesg>文件从中读取数据   内核缓冲并保存。或者你可以cat / proc / kmsg>但是,文件   你必须闯进来阻止转移,kmsg永远不会结束   文件"

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

使用GDB在ubuntu中查找内核恐慌或删除的位置的方法位于链接https://wiki.ubuntu.com/Kernel/KernelDebuggingTricks中,这可以是您可以使用的方法之一调试内核oops。