2015-10-26 80 views
1

我想加载一个内核模块(out-of-tree)和dmesg显示一个恐慌。内核仍然在起作用。我猜这个模块恐慌了。linux内核模块生成的核心文件

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

回答

2

哪里可以找到核心文件?

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

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

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

0

不会有核心文件。 你应该在内核消息中跟踪堆栈跟踪。键入dmesg以查看它。

0

正常情况下,无论何时生成芯核,它都会声明“核心转储”。这可能是确认是否生成了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不能生成而导致的各种原因。

但是,根据你的解释,看起来你正面临着'kernel oops',因为即使特定模块被恐慌/死亡,内核仍然处于不稳定状态。在这种情况下,内核将打印一个oops消息。请参阅链接https://www.kernel.org/doc/Documentation/oops-tracing.txt,其中包含有关内核oops消息的信息。

从链路摘要:通常情况下,哎呀文本由klogd的和 移交到syslogd其写入系统日志文件,通常 的/ var/log/messages中(内核缓冲区读取取决于/等/ syslog.conf内容)。有时klogd 死亡,在这种情况下,您可以运行dmesg> file从 内核缓冲区读取数据并保存。或者你可以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 oopsed的位置是在连接https://wiki.ubuntu.com/Kernel/KernelDebuggingTricks可以是可以由你来调试内核oops中所使用的方法之一。