日期:2014-05-16 浏览次数:20541 次
移植gdb到嵌入式的ipnc中,大多数人习惯使用printf调试,但是遇到像”segment fault“这的错误也是后就很难定位,这时候gdb的作用就体现出来了
在pc使用gdb调试应用程序前,应用程序编译是需带上 gcc -g参数,就是编译带有调试信息的程序,不然使用gdb是找不到程序的symbol的
在arm中使用gdb也不例外,也要加上arm_v5t_le-gcc -g参数,只不过,arm上linux不同于pc,嵌入式的gdb采用这样的调试方式:
在arm中运行gdbserver
在pc上运行gdbserver对应的arm-linux-gdb,这样的方式来调试程序。
所以的调试操作均在pc上完成,但是程序的输出还是在arm上。
现在来移植gdb到dm368上
1、下载gdb源码,目前的最高版本的gdb-7.5,下载地址:http://www.gnu.org/software/gdb/download/
2、解压到合适的文件夹下,注意不要放到window与linux共享的目录下即可:tar -xvzf gdb-7.5.tar.gz
3、进入gdb-7.5源码目录,然后配置编译arm-linux-gdb
我的配置是这样的:./configure --target=arm-linux --prefix=/opt/dm36x/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/gdb-7.5 -v
target是指编译的目标平台
prefix是指安装编译好的程序目录,我将它安装到arm_v5t_le工具链的目录。
这里注意了,现在配置编译的不是gdbserver,而是gdbserver对应的需要运行在主机pc上的arm-linux-gdb,虽然linux上已经有gdb命令,但是这个gdb命令式没法跟gdbserver交互的。
编译成功后会在prifix设定的目录下产生arm-linux-gdb可执行程序,如图
target_board 和readme是我自己创建的。
4、进入gdb-7.5/gdb/gdbserver目录,配置,然后交叉编译运行在arm上的gdbserver
4.1在交叉编译gdbserver之前,先进行一些设置:
添加刚才编译好的arm-linux-gdb到PC linux的PATH中
PATH="/opt/dm36x/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/gdb-7.5/bin:$PATH"
4.2配置
./configure --target=arm-linux --host=arm-linux
4.3修改config.h
编译是会产生一个错误,说找不到sys/reg.h
所以这里修改一下config.h,不要去使用reg
#vim config.h
//#define HAVA_SYS_REG_H //注释此句
4.4交叉编译
make CC=arm_v5t_le-gcc
5、将交叉编译好的gdbserver复制到目标文件系统的/usr/locaol/bin目录下,其他地方也可以,只要能在shell中找到gdbserver即可
测试:
1、随便写一个c文件,然后编译
arm_v5t_le-gcc -g test.c
得到a.out,复制到目标文件系统中
2、在目标板上执行
gdbserver 192.168.1.227:1234 a.out
192.168.1.227为目标板ip地址,1234是没有被占用的tcp端口
意思就是创建一个调试服务器,一边主机pc上的arm-linux-gdb能够连接这个服务器来调试a.out
3、在主机pc上执行
arm-linux-gdb a.out
然后在gdb的shell中输入
target remote 192.168.1.227:1234
连接成功后目标板上会打印连接信息,如图
至此,就可以按照通常gdb的命令调试程序啦
附录1:调试时出现的警告
warning: `/lib/libc.so.6': Shared library architecture unknown is not compatible with target architecture arm.
warning: Could not load shared library symbols for /lib/ld-linux.so.3.
Do you need "set solib-search-path" or "set sysroot"?
忽略,目前没有发现影响什么。
附录2:gdb调试手册和gdb调试命令的pdf下载,这两篇是我在网上找的,觉得比较好
gdb调试手册:http://www.kuaipan.cn/file/id_48923272389085122.html
gdb调试命令:http://www.kuaipan.cn/file/id_48923272389085121.html