ubuntu kernel panic查看源文件

本文介绍如何在Linux内核开发中快速定位Kernel Panic错误。通过安装debug symbol和使用gdb工具,开发者能准确找到出错的源文件及行号,无论是内核还是设备驱动中的问题都能有效解决。

在驱动开发中,经常会碰到kernel panic的问题,如果快速和高效的定位出问题的位置至关重要。kernel panic出现的位置有两个,一种是在kernel里面,一种是在device driver里面,根据kernel panic的call stack可以看出来,定位源文件的方法也是一样的。

首先要有对应的debug symbol,如果是在linux kernel里,就需要安装对应版本的symbol,方法可以查看这篇文章。如果是device driver,就需要developer自己build debug版的driver出来。

其次,需要安装gdb,没错,我们可以使用gdb,根据call stack来定位出错的位置。以linux kernel自身的kernel panic为例:

$gdb /usr/lib/debug/boot/vmlinux-4.10.0-28-generic
(gdb) list *(some_function+0x12c)

这种方法直接可以看到出错的源文件和行号,如果有source code,可以看到源码。

如果stack在device driver里:

$gdb "$(modinfo -n /home/user/my.ko)"
(gdb) list *(some_function+0x12c)
 

使用gdb的方式非常简单。

参考提供的引用内容,未提及在Ubuntu系统中主动触发kernel panic的方法。不过,一般在Linux系统(包含Ubuntu)中可以使用以下常见方式来主动触发kernel panic: #### 使用`sysrq-trigger` 在系统允许`Magic SysRq`功能的情况下,可以通过组合键触发。`Magic SysRq`是Linux内核提供的一组特殊功能键组合,允许在系统出现严重问题时执行一些底层操作。要触发kernel panic,可以按下`Alt + SysRq + c` (`SysRq`键通常和`Print Screen`键是同一个键)。不过,需要确保`Magic SysRq`功能已启用,可通过以下命令检查和启用: ```bash # 检查Magic SysRq是否启用 cat /proc/sys/kernel/sysrq # 如果值为0表示禁用,可通过以下命令启用 echo 1 > /proc/sys/kernel/sysrq ``` #### 编写内核模块 可以编写一个简单的内核模块,在模块加载时触发kernel panic。以下是一个简单的示例代码: ```c #include <linux/module.h> #include <linux/kernel.h> static int __init panic_init(void) { panic("Triggering kernel panic on purpose"); return 0; } static void __exit panic_exit(void) { // 这里不会执行,因为已经panic了 } module_init(panic_init); module_exit(panic_exit); MODULE_LICENSE("GPL"); ``` 将上述代码保存为`panic_module.c`,然后编写一个`Makefile`来编译这个模块: ```makefile obj-m += panic_module.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean ``` 在终端中执行`make`命令编译模块,然后使用`insmod`命令加载模块: ```bash sudo insmod panic_module.ko ``` 加载模块时,内核会触发panic
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值