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