移植gdb到arm板

环境

PC系统:Ubuntu16.04
arm板交叉编译器:arm-linux-gnueabihf-xxx

参考链接

https://blog.csdn.net/yhg20090519/article/details/53079499
http://blog.chinaunix.net/uid-23381466-id-309369.html
https://blog.csdn.net/capture_bbom/article/details/64437791

目的

PC端是带有许多调试工具的,但在arm板上相对来说比较局限,所以采用移植gdb到arm板上的方法来增加板上的调试功能。

gdb

GDB最初由Richard Stallman于1986年编写,作为他的GNU系统的一部分,之后他的GNU Emacs “相当稳定”。GDB是GNU通用公共许可证(GPL)下发布的免费软件。它是在DBX调试器之后建模的,该调试器随Berkeley Unix发行版一起提供。

  • GDB提供了在调试嵌入式系统时经常使用的“远程”模式。远程操作是指GDB在一台机器上运行,而正在调试的程序在另一台机器上运行。
  • 除了远程调试的功能,gdb也有本地调试功能(本博客移植的即是此功能)。
  • 调试器不包含自己的图形用户界面,默认为命令行界面。

移植准备

步骤

移植ncurse库:

  1. 下载tar包后,解压;
  2. 进入文件目录;
  3. ./configure --host=arm-linux-gnueabihf --prefix=`pwd`/_install --without-ada --enable-termcap --with-shared//配置、生成Makefile,注意–prefix指定的是目标目录,即编译完成后生成的文件的位置;
  4. make
  5. make install

移植gdb7.6:

  1. 下载tar包后,解压;
  2. 进入文件目录;
  3. ./configure --host=arm-linux-gnueabihf CC=/home/feng/Downloads/rk3288/rk3288_linux_SDK2.0/prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc --enable-shared --prefix=$PWD/_output --disable-werror --without-x --disable-gdbtk --disable-tui --without-included-regex --without-included-gettext LDFLAGS="-L/home/feng/Downloads/rk3288/ncurses-5.6/_install/lib" CPPFLAGS="-I/home/feng/Downloads/rk3288/ncurses-5.6/_install/include"(具体解释请看下面tips)
  4. make
  5. make install
  • tips:
    • 先看上面第3步中的参数:"CC=XXX"指定交叉编译器(这里使用了绝对路径,之前移植其他库的时候没有使用绝对路径导致无法查找到使用的编译器);
    • "–enable-shared…“这里指定的一系列开关项,可以在参考链接中查看具体含义,这里不再赘述;值得注意的是一项:”–disable-werror"这一项可以屏蔽werror报警,这一项也是本人遇到的错误的根源所在;
    • "LDFLAGS=XXX"指定的是前面交叉编译完成的ncurse的lib目录的路径;"CPPFLAGS=XXX"指定的是前面交叉编译完成的ncurse的include目录的路径;

移植中遇到的问题及错误

  1. 移植gdb的时候,其实会发现在第3步中有许多开关项,但是这些开关项在敲命令的时候通过Tab键却无法出现相应的补全,而是出现其他奇怪的选项,这里不知道原因何在;
  2. 本人遇到的错误:
bfd.h:529:65: error: right-hand operand of comma expression has no effect [-Werror=unused-value]
 #define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = bool), TRUE)
                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
opncls.c:263:5: note: in expansion of macro ‘bfd_set_cacheable’
     bfd_set_cacheable (nbfd, TRUE);
     ^~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
Makefile:1607: recipe for target 'opncls.lo' failed
make[4]: *** [opncls.lo] Error 1
make[4]: Leaving directory '/home/feng/Downloads/rk3288/gdb-7.6/bfd'
Makefile:1649: recipe for target 'all-recursive' failed
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory '/home/feng/Downloads/rk3288/gdb-7.6/bfd'
Makefile:1135: recipe for target 'all' failed
make[2]: *** [all] Error 2
make[2]: Leaving directory '/home/feng/Downloads/rk3288/gdb-7.6/bfd'
Makefile:2579: recipe for target 'all-bfd' failed
make[1]: *** [all-bfd] Error 2
make[1]: Leaving directory '/home/feng/Downloads/rk3288/gdb-7.6'
Makefile:828: recipe for target 'all' failed
make: *** [all] Error 2

通过查询得知:上述错误的原因是源码中有些函数定义不规范,用对函数格式非常严格的GCC 4.5编译就会出错,而GCC 4.1 不会报错。(可查看参考链接)
解决办法即如上所提:在./configure中加入"–disable-werror"一项。

最后

移植成功后将生成的libncurses.so和gdb可执行文件拷贝到板子上即可。如我将gdb放在板上的/bin目录下,libncurses.so放到/usr/lib下。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值