ubuntu c c++ gdb make_番外篇 | gdb+gdbserver调试

      因为有很多的小伙伴是从单片机转过来的,用惯了单片机上的JLINK调试程序,换到Linux上非常的不习惯。确实,如果能设置断点,单步调试,查看变量,那确实是太爽了,那么在我们的Linux可以做到吗,答案当然是可以的。      

      在之前的文章中,对gdb调试做过一期简单的介绍番外篇|使用gdb对程序进行调试,但是之前的文章我们是在ubuntu上对应用程序进行的调试,不是在ARM板上进行的调试,相对于其他的软件开发,嵌入式软件的调试手段比较有限,我相信一定有很多人的调试手段依然是使用原始的打印的办法。这一期我们就介绍一种可以在ARM板上调试应用代码的办法。

基本思路

      采用这种的方式进行远程调试,目标系统必须包括gdbserver程序,宿主机也必须安装gdb程序。一般linux发行版中都有一个可以运行的gdb,但我们不能直接使用该发行版中的gdb来做远程调试,而要获取gdb的源代码包,针对arm平台作一个简单配置,重新编译得到相应gdb,如armv4。

     接下来,大家跟着法师的思路,一起来搭建这个调试环境。在任意ARM板,都可以搭建。

搭建环境

863d53097bd5efb30eda44a358eab0a6.png

搭建步骤

第一步:下载gdb压缩包

   下载地址:http://ftp.gnu.org/gnu/gdb/  这里我们下载的是gdb-7.8.1.tar.gz这个版本。

第二步:编译并安装gdb

     把gdb压缩包放到ubuntu之后,我们进入到解压生成的文件,如下图示:

8a667869c0c658df833c839f0a0a6022.png

     生成Makefile,输入以下命令:target为目标平台,prefix为安装路径。

/configure -target=arm-none-linux-gnueabi --prefix=/home/arm-linux-gdb/arm-linux-gdb

如下图所示:

cb6f5904a60619fd5d4c3ac9a3d9ff18.png

    编译gdb,输入make,编译成功如下图所示:

bce4dd61aa738dde7b6ef615d97beaa4.png

     安装gdb,输入命令make install,一会我们在ubuntu上启动的就是这个gdb,安装成功如下图所示:

b8a3fc03a10fb8d24c2dca2993f7bccb.png

     进入gdb源码下的gdb/gdbserver目录,如下图所示:

b358b539c56b0186c950b95f194a056b.png

    生成Makefile,输入以下命令:target为目标平台,prefix为安装路径。

./configure -target=arm-none-linux-gnueabi --prefix=/home/arm-linux-gdb/arm-linux-gdbserver

    然后执行make命令,注意,这里交叉编译器一定要写绝对路径。如下图所示:

make CC=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc

     编译过程中会出现以下错误:

bbdd86444bfd19296b9de8c742a6bb8f.png

     我们打开当前路径下的config.h文件,如下图所示:

a7bb7b7bc07104998598bdac4d8f4713.png

     注释掉196行左右的HAVE_SYS_REG_H这个宏定义,如下图所示:

ab9433ef48c4841a14cee3c63d8a7ba8.png

    保存退出后,打开当前路径下的linux-x86-low.c的C文件,如下图所示:

7573358c4ac558360c104e150d6a316f.png

    注释掉116行#include头文件,如下图所示:

3c3f4eb8b5bdd11f3503086056f5d428.png

    保存退出,然后再次编译。编译成功如下图所示:

a4da33c4125fd01c8acc1988de80f5e1.png

     编译完成后,使用make install 命令安装,安装完成后会在安装路径生成一个文件夹,如下图所示:

6bf5257eba3815a0e2622c71c643831e.png

第三步,在ARM板上搭建远程调试环境

     把gdb/gdbserver下的gdbserver 拷贝到开发板的bin文件夹下。

13b552d5aa9b96f28d3c12df4ee372af.png

拷贝完成如下图所示:

d4c3b365565a1436cef4dc5ae9fd7e3e.png

测试

测试代码:

3775a9668af15447919ad4d3e4fc58e3.png

      编译测试程序,编译的时候要加-g参数,编译完成之后,我们把测试代码通过NFS放在开发板上,然后在测试代码所在的路径下输入以下命令启动服务器,其中192.168.2.230为ubuntu的IP,5000为端口号。

gdbserver 192.168.2.230:5000 ./test

启动成功如下图所示:

f25b7a1d9731312d92829e6217b2a447.png

    在测试程序test所在目录启动ubuntu上的gdb,这里启动的gdb为我们刚刚安装的gdb,我们输入以下命令:

/home/arm-linux-gdb/arm-linux-gdb/bin/arm-none-linux-gnueabi-gdb test

启动成功后如下图所示:

0dc404fce65f7727d15138329f25c28a.png

    连接开发板,输入以下命令,192.168.2.23为开发板的IP,5000为端口号。

target remote 192.168.2.23:5000

     连接成功后开发板会打印以下信息,如下图所示:

514566d7f2574345d2193825e3166edb.png

     接下来,我们就可以在ubuntu上使用命令来设置断点,单步调试开发板上的程序了,具体的调试命令大家可以看一下这篇文章番外篇|使用gdb对程序进行调试

74ace42305d6f038b2292c1eef1a4267.png

说明:  

      目标机上的被调试程序test, 与主机上的程序test, 是相同的程序, 但位置不一样,并非是用网络共享的同一个位置的同一个文件, 一个在目标机上 ,一个在主机上, 没有关系。

PS:

双十一过后,4412学习板优惠依旧,欢迎新老用户垂询~淘宝售前可都是帅气漂亮的小哥哥小姐姐哦~


■ 关注“迅为电子”微信公众号,不定期分享教程、资料和行业干货及产品一线资料。

■ 想要了解迅为更多信息,欢迎与我们联系:

销售工程师:0312-6796610转接8001

技术支持类:0312-6796610转接8003,8004

方案定制类:0312-6796610转接8003


■ 实时技术支持:

AM 9:00—12:00,PM 13:30—17:30(周一至周六)

 END 

 长按识别二维码加关注 

a01b5c9902eefeddf64e9fcc76fd8f9e.png

迅为电子

让学习更容易,让开发更简单

15c51ae5d08983c2d3da3a0f453f8035.png http://www.topeet.com/ ▼往期好文推荐阅读▼ 迅为电子‘iTOP4412开发平台’得到世界开源软件Linux的官方支持 迅为10.1寸触控一体机 关于通信协议那点事~
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值