内核oops分析(使用gdb)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/litao31415/article/details/79801346
1,在相应的子目录里的Makefile里增加一句。
EXTRA_CFLAGS +=-g

此这个目录里的.o文件会带有调试信息,以便定位到C代码。

2,假设出来编译出来usb_test.ko则

arm-linux-gnueabihf-gdb usb_test.o进行调试。

3,若在opps中出现xxxx_fun+0x120等字样,可在gdb下运行 “l”指令,如:

(gdb)  l *xxxx_fun+0x120

.....

可定位到源码的第几行出问题。

当然,如果汇编语言比较好的:

1,可直接使用objdump工具反汇编:

arm-linux-gnueabihf-objdump -CSgd usb_test.o > my.dump,根据oops信息定位代码。

2,或将oops内容保存成txt文件,设置好环境变量,运行linux kernel源码目录下的./script/decodecode < oops.txt即可直接定位到哪一句汇编语句出错!很实用

假设使用ARM和arm-linux-gnueabihf-,则在运行decodecode脚本前需设置好环境变量,如:

export ARCH=arm

export CROSS_COMPILE=arm-linux-gnueabihf-

猜你喜欢

转载自blog.csdn.net/litao31415/article/details/79801346