GDB调试之跨平台驱动调试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GDB调试之跨平台代码调试
一个问题引发的思考:
问题描述:使用交叉编译工具(mips64-nlm-linux-gcc) 将某一段程序编译为目标开发板上所可以使用的可执行程序后,在目标开发板上报了如下的错误:
乍一看很明显的是oops(kernel panic)了
那么我们应该如何去定位这种问题并解决呢?那就当然要用到我们的GDB了!不过是需要支持mips架构的gdb而已
一、gdb跨平台环境搭建
首先我们可以使用如下命令来查看Debian中对于体系架构的一张描述表
cat /usr/share/dpkg/archtable
#
i486-linux-gnu i386
ia64-linux-gnu ia64
alpha-linux-gnu alpha
x86_64-linux-gnu amd64
arm-linux-gnu arm
arm-linux-gnueabi armel
hppa-linux-gnu hppa
mips-linux-gnu mips
mipsel-linux-gnu mipsel
powerpc-linux-gnu powerpc
s390-linux-gnu s390
sparc-linux-gnu sparc
i486-gnu hurd-i386
i486-kfreebsd-gnu kfreebsd-i386
x86_64-kfreebsd-gnu kfreebsd-amd64
对于我们当前来说:我们仅仅需要
x86_64-linux-gnu amd64
mips-linux-gnu mips
明确了我们的需求,就开始生成我们自己的编译器了!
1、创建一个目录并且下载gdb源码到此目录
目录自己选择(此处为opt) //注意需要切换root
mkdir /opt/build-gdb
apt-get source gdb
2、根据需求配置我们的configure
./configure --enable-targets=x86_64-linux-gnu,mips-linux-gnu
3、编译
make
4、将生成的gdb复制到/usr/sbin下
cp gdb/gdb /usr/sbin/gdb-all
以上操作就可以完成跨平台gdb调试的基本安装!
二、如何使用
我们回到我们的问题的最开始:
如何定位?
1、gdb-all vmlinux (这个为开发板上所使用的vmlinx)
2、设置目标架构
set architecture mips:isa64r2
3、定位错误
info line *0x我们上述oops的epc地址
info line *0xffffffff804c120c
定位结果:第293行
Line 293 of "drivers/tl_modules/xlp_module/command_kernel/command_kernel.c"
starts at address 0xffffffff804c1204
and ends at 0xffffffff804c1238
注意:使用info line 应首先确定DEBUG_INFO 开启(附1)
也可以查看反汇编
x/i 0xffffffff804c120c (此为查看一行,多行格式为x$numberi/address)
附1:开启DEBUG_INFO
在内核根目录执行make menucofig
Symbol: DEBUG_INFO_REDUCED [=y]
│Type : boolean
│Prompt: Reduce debugging information
│Defined at lib/Kconfig.debug:779
│Depends on: DEBUG_INFO [=y]
│Location:
│-> Kernel hacking
│(1) -> Compile the kernel with debug info (DEBUG_INFO [=y])
将上述DEBUG_INFO 开启即可!
keven