linux驱动调试--oops信息
2017-06-10 16:27
543 查看
在移植dm9000 时被一个错误困扰了很久,当时手里只有printk调试手段,觉得自己应该升级下了,先学习了根据oops信息来调试。
先构造一个错误,insmod后抛出如下信息
我们着重看这几句
PC is at memcpy+0x8c/0x29c c0148080
pc : [] lr : [<74736574>] psr: 00000013
回溯信息
Backtrace:
[] (hello_init+0x0/0x38 [dbug]) from []
看到这些信息大概可以知道问题所在了,我们接着把文件objdump一下
执行 arm-linux-objdump -D dbug.ko > dbug.inf
根据oops信息,PC is at memcpy+0x8c/0x29c c0148080 是在memcpy函数出错,在回溯信息里[] (hello_init+0x0/0x38 [dbug]) from [] 在hello_init 的0x38偏移处调用的发生错误的函数。
问题到这里就差不多了,后面会陆续跟几种调试手段。随便附上这次的测试代码
先构造一个错误,insmod后抛出如下信息
我们着重看这几句
PC is at memcpy+0x8c/0x29c c0148080
pc : [] lr : [<74736574>] psr: 00000013
回溯信息
Backtrace:
[] (hello_init+0x0/0x38 [dbug]) from []
看到这些信息大概可以知道问题所在了,我们接着把文件objdump一下
执行 arm-linux-objdump -D dbug.ko > dbug.inf
根据oops信息,PC is at memcpy+0x8c/0x29c c0148080 是在memcpy函数出错,在回溯信息里[] (hello_init+0x0/0x38 [dbug]) from [] 在hello_init 的0x38偏移处调用的发生错误的函数。
问题到这里就差不多了,后面会陆续跟几种调试手段。随便附上这次的测试代码
#include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { char *p = NULL; memcpy(p, "test", 4); printk(KERN_ALERT "Hello, world\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "Goodbye, cruel world\n"); }
相关文章推荐
- linux驱动调试之Oops信息---针对arm处理器
- linux驱动调试--段错误之oops信息分析
- linux驱动调试--段错误之oops信息分析
- linux驱动调试--段错误之oops信息分析
- linux驱动调试--段错误之oops信息分析
- linux驱动调试--段错误之oops信息分析
- linux设备驱动第四篇:以oops信息定位代码行为例谈驱动调试方法
- Linux内核调试之Oops信息
- linux中Oops信息的调试及栈回溯
- linux中Oops信息的调试及栈回溯
- linux中oops信息的调试及栈回溯【转】
- linux设备驱动第四篇:以oops信息定位代码行为例谈驱动调试方法
- Linux的oops内核调试信息 && Linux Kernel Panic报错解决思路
- linux中Oops信息的调试及栈回溯—Linux人都知道,这是好东西!
- Linux驱动调试手段:打印信息日志
- linux中Oops信息的调试及栈回溯
- 学习笔记 --- LINUX 驱动调试之根据栈信息来分析
- linux中Oops信息的调试及栈回溯
- Linux的oops内核调试信息 && Linux Kernel Panic报错解决思路
- linux中Oops信息的调试及栈回溯—Linux人都知道,这是好东西!