说明:
本文第一部分内容说明如何使用gdbserver,第二部分内容说明如何编译gdb和gdbserver。阅读本文前提是会使用gdb的基本命令,知道开发板如何挂载nfs。对嵌入式gdb远程调试感兴趣的可以加入QQ群 ,338400719,一起讨论。文章后面有编译好的海思(hisi)以及安霸(amba)平台的gdb工具提供给大家。
相关环境:
1.主机Ubuntu12.04 32bit
2.
交叉编译器:arm-hisiv100nptl-linux-
3.gdb版本:
gdb-7.5.1
约定:
1.# 开头的代表shell命令
2.(gdb)开头的代表gdb中的命令
利用gdbserver调试开发板
假设目标调试程序名为demo,开发板ip 192.168.1.28 ,主机ip 192.168.1.26
1.利用交叉编译器编译出demo,编译时需要带-g选项加上调试信息。(不能strip,strip会删除程序中的调试信息)
2.将gdb、gdbserver、demo放到主机nfs共享目录,开发板挂载nfs
3.在开发板上运行
#./gdbserver 192.168.1.26:2345 demo
(命令格式 #./gdbserver 主机IP:端口号 程序)
情况正常一般出现下面的提示:
Process borad created; pid = 776
Listening on port 2345
Remote debugging from host 192.168.1.26
4.在主机上运行gdb,注意这个gdb要和gdbserver是同一个gdb版本编译出来的(这里gdb-7.5.1)
#./gdb demo-tui
(这里要指明需要调试的程序demo,否则主机上运行的gdb无法加载调试信息 会出现list等命令不能用等情况,-tui表示图像化界面gdb)
(gdb)target remote 192.168.1.28:2345
(命令格式target remote 开发板IP:端口号 端口号必须和板子上运行gdbserver时端口号一致)
接下来就和gdb本地调试一样。需要注意的是调试开发板上的程序,要让程序在gdb中运行起来必须使用continue或c,
不能用run或r。
注意事项:
1.程序运行如果需要加载动态库,在gdb调试时需要手动加载这些动态库。gbd使用用info share命令查看动态库加载情况
(gdb)info share
手动加载动态库指令:
(gdb) set solib-search-path + 需要加载的动态库路径。
如果每次都要加载相关库可以在~目录下新建一个.gdbinit文件,并将“set solib-search-path + 需要加载的动态库路径”写入其中,gdb每次启动会加载这个配置文件。
=================================================================================
下面介绍如何编译gdb和gdbserver,以海思
arm-hisiv100nptl-linux交叉编译器为例
编译gdb
1.下载gdb源码
编译gdb
下载源码包gdb-7.5.1.tar.bz2,解压到~/gdb/目录下
在
/usr/local/下创建arm-hisi100nptl目录
#./configure --target=arm-hisiv100nptl-linux --prefix=/usr/local/arm-hisi100nptl
./configure --target=arm-linux-gnueabihf --prefix=/usr/local/arm-linux-gnueabihf
(--target 配置gdb 的目标平台(注意target的arm-hisiv100nptl-linux 没有最后的”-“), --prefix 配置安装路径)
#make
编译成功后得到了gdb。
编译gdbserver
进入解压后的gdb源码包中
cd ~/gdb/gdb-7.5.1/gdb/gdbserver/
#./configure --target=arm-hisiv100nptl-linux --host=arm-hisiv100nptl-linux
( --target=arm-hisiv100nptl-linux 表示目标平台, --host 表示主机端运行的是arm-hisiv100nptl-linux )
#make CC=/opt/hisi-linux-nptl/arm-hisiv100-linux/target/bin/arm-hisiv100nptl-linux-gcc
(这里指定交叉编译器时要用绝对路径)
修改编译出的gdbserver权限
编译注意事项
1.gdb跑在主机上所以用主机的gcc编译器编译,而gdbserver跑在开发板上所以要用交叉编译器编译
2.不要用strip处理编译得到的gdb和gdbserver
(我遇到的情况是strip处理后的gdbserver运行不了,并提示-sh: ./gdbserver: not found)
3.编译gdbserver时出现了linux-x86-low.c error: sys/reg.h: No such file or directory情况,解决方法如下:
a.找到config.h里的HAVE_SYS_REG_H这个宏定义,把它注释掉.
b.把linux-x86-low.c的头文件#include注释掉.
c.交叉编译器要指明具体路径
d.make之前先make clean一下.
参考资料:
gdb+gdbserver 方式进行ARM 板上程序调试
http://blog.csdn.net/hejianhua/article/details/7312979
我们很快将会在github和gitosc上开源一套音视频采集和编解码方案,支持的平台有Linux,Windows,海思(hisi),安霸(Amba)。敬请期待。
关于我们
http://www.graceport.cn/
gitosc:
http://git.oschina.net/GracePort
资源下载:
安霸(amba)
linaro-multilib-2014.06-gcc4.9
http://download.csdn.net/detail/graceporttek/9541868
./arm-linux-gnueabihf-gcc -v
Using built-in specs.
COLLECT_GCC=./arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/usr/local/linaro-multilib-2014.06-gcc4.9/bin/../libexec/gcc/arm-linux-gnueabihf/4.9.1/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: /development/crosstools-ng/cortexA9/.build/src/gcc-linaro-4.9-2014.06-1/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-linux-gnueabihf --prefix=/development/crosstools-ng/cortexA9/linaro-multilib-2014.06-gcc4.9 --with-sysroot=/development/crosstools-ng/cortexA9/linaro-multilib-2014.06-gcc4.9/arm-linux-gnueabihf/libc --enable-languages=c,c++ --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3 --with-float=hard --with-pkgversion='crosstool-NG - Ambarella Linaro Multilib GCC [CortexA9 & ARMv6k] 2014.06' --with-bugurl=https://bugs.launchpad.net/gcc-linaro --enable-__cxa_atexit --enable-libmudflap --enable-libgomp --enable-libssp --disable-libquadmath --disable-libquadmath-support --with-gmp=/development/crosstools-ng/cortexA9/.build/arm-linux-gnueabihf/buildtools --with-mpfr=/development/crosstools-ng/cortexA9/.build/arm-linux-gnueabihf/buildtools --with-mpc=/development/crosstools-ng/cortexA9/.build/arm-linux-gnueabihf/buildtools --with-isl=/development/crosstools-ng/cortexA9/.build/arm-linux-gnueabihf/buildtools --with-cloog=/development/crosstools-ng/cortexA9/.build/arm-linux-gnueabihf/buildtools --with-libelf=/development/crosstools-ng/cortexA9/.build/arm-linux-gnueabihf/buildtools --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++ -lm' --enable-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --enable-gold --enable-multilib --with-local-prefix=/development/crosstools-ng/cortexA9/linaro-multilib-2014.06-gcc4.9/arm-linux-gnueabihf/libc --enable-c99 --enable-long-long --with-mode=thumb
Thread model: posix
gcc version 4.9.1 20140625 (prerelease) (crosstool-NG - Ambarella Linaro Multilib GCC [CortexA9 & ARMv6k] 2014.06)
海思
hisiv100nptl
http://download.csdn.net/detail/graceporttek/9541871
./arm-hisiv100nptl-linux-gcc -v
Using built-in specs.
Target: arm-hisiv100-linux-uclibcgnueabi
Configured with: ../gcc-4.4-2010q1/configure --host=i486-linux-gnu --build=i486-linux-gnu --target=arm-hisiv100-linux-uclibcgnueabi --prefix=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/arm-hisiv100-linux --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-arch=armv5te --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --disable-nls --enable-extra-hisi-multilibs --with-sysroot=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/arm-hisiv100-linux/target --with-build-sysroot=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/arm-hisiv100-linux/target --with-gmp=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/host_lib --with-mpfr=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/host_lib --with-ppl=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/host_lib --with-cloog=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/host_lib --with-libelf=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/host_lib --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bstatic -lm' --enable-libgomp --enable-poison-system-directories --with-libelf=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/host_lib --with-pkgversion='Hisilicon_v100(gcc4.4-290+uclibc_0.9.32.1+eabi+linuxpthread)' --with-bugurl=http://www.hisilicon.com/cn/service/claim.html
Thread model: posix
gcc version 4.4.1 (Hisilicon_v100(gcc4.4-290+uclibc_0.9.32.1+eabi+linuxpthread))