将本地调试gdb移植到arm板

开发环境

  • PC系统:VMware虚拟机 Ubuntu16.04
  • arm板:海思HI3536开发板
  • 交叉编译器:arm-hisiv400-linux-gcc

目标

把本地调试版的gdb移植到arm板上增加板子的调试功能

gdb的移植分为两种:

1. 远程调试
这一种模式是需要交叉编译gdb和gdbserver,将交叉编译好的gdbserver移植到arm板上,再通过串口或者网线将PC与arm板连接起来,实现远程调试。

2. 本地调试
这种模式把整个gdb移植成一个arm的本地版,直接在开发板上用gdb来调试。本博客介绍的是这种本地调试模式。

参考链接

http://blog.chinaunix.net/uid-23381466-id-309369.html
https://blog.csdn.net/ZefinNg/article/details/96479993

1.安装交叉编译器

这里不同环境交叉编译器也不相同,不做详细介绍,可参考其他博客。
但是一定要注意,安装好交叉编译器是后续步骤的基础。移植的思路是:下载gdb源码——使用交叉编译器编译gdb生成可执行程序——将可执行程序移植到arm板上。因此,如果交叉编译器没有安装成功,是无法生成可以在arm板上可运行的可执行程序的。

本贴中使用的是海思交叉编译器 arm-hisiv400-linux-gcc ,请先检查交叉编译器是否安装成功。在Ubuntu中打开终端,输入

arm-hisiv400-linux-gcc -v

若正常显示交叉编译器的版本,说明已安装成功,如下图所示:

![在这里插入图片描述](https://img-blog.csdnimg.cn/20201113220412271.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RlbmdfYWxvbmU=,size_16,color_FFFFFF,t_70#pic_center
另外,还要检查交叉编译器是否已经添加至环境变量

vi /etc/profile

如下图所示。

在这里插入图片描述
总而言之,第一步的主要任务是确保交叉编译器已安装成功,详细信息请参阅对应交叉编译器的其他博客。海思交叉编译器的安装可以参考下面这篇博客:
https://blog.csdn.net/qq_29350001/article/details/52440188

2.移植ncurses库

本地gdb运行需要ncurses库的支持,因此先做ncurses库的移植。
下载地址:http://ftp.gnu.org/gnu/ncurses/
本贴下载的是 ncurses-5.9.tar.gz

进入下载目录,输入命令进行解压

 tar -zxvf ncurses-5.9.tar.gz 

进入解压后的目录

cd ./ncurses-5.9

配置Makfile

./configure --host=arm-hisiv400-linux --prefix=$PWD/output/arm --enable-termcap --with-shared

其中,--host表示交叉编译器的前缀,根据交叉编译器的不同需要进行更改--prefix表示的是目标目录,即编译完成后生成的文件的位置。后两个参数具体意义暂不清楚,记得也要加上。

make,仍然是在解压的目录里

make

make install

make install

这两步有时会出错,请注意观察命令行反馈的错误信息,善用搜索。博主本人在这一步遇到的主要问题是明明交叉编译器已经安装好了,make也成功了,但make install一直出错,最终的解决方案是换了一个版本的ncurses库,也就是换到5.9版本后编译成功了。

以上操作成功后,会在 ./ncurses-5.9/output/arm/lib目录下看到libncurses.so.5可执行文件,libncurses.so.5就是我们要移植到arm板上的文件。

3.移植gdb

下载gdb源代码:http://ftp.gnu.org/gnu/gdb/
本贴下载版本的是 gdb-7.6.1.tar.gz
请注意,博主之前下载过6.8a和7.0a的版本,但编译时都会出错,查询很多博客说是gdb源码的问题,所以建议大家直接选择7.6.1版本的。

进入下载目录解压

tar -xvf gdb-7.6.1.tar.gz 

进入解压目录

cd gdb-7.6.1

配置Makefile文件

./configure --host=arm-hisiv400-linux CC=/opt/hisi-linux/x86-arm/arm-hisiv400-linux/target/bin/arm-hisiv400-linux-gcc --enable-shared --prefix=$PWD/output/arm --disable-werror --without-x --disable-gdbtk --disable-tui --without-included-regex --without-included-gettext LDFLAGS="-L/home/xin/Downloads/ncurses-5.9/output/arm/lib" CPPFLAGS="-I/home/xin/Downloads/ncurses-5.9/output/arm/include"

这里解释下部分参数
--host 依然是交叉编译器前缀
CC 是交叉编译器的绝对路径,为了避免部分博客所说的找不到交叉编译器的错误
--prefix 依然是编译生成的目标文件的位置
LDFLAGS 是第2步中的ncurses库编译后生成的lib文件夹的绝对路径
CPPFLASS 是是第2步中的ncurses库编译后生成的include文件夹的绝对路径

其余参数也请不要忘记

make

make

make install

make install

与安装ncurses库类似,这两部编译也经常容易出错,请详细检查之前的操作是否正确,观察命令行的错误信息,善用搜索引擎,多次尝试。

以上步骤成功后会在/gdb-7.6.1/output/arm/bin文件夹中看到gdb可执行文件,gdb就是我们要移植到arm板上的可执行文件。但是这里的gdb文件提及有些大,博主这里有19MB,使用一下命令对gdb进行压缩

arm-hisiv400-linux-strip gdb

其中前面的命令是对应的交叉编译器,执行该命令后,gdb的体积变为了3MB,效果十分明显。

4.移植到arm板

将第2步、第3步中生成的可执行文件libncurses.so.5gdb拷贝到arm板上,给予可执行权限。

chmod +x libncurses.so.5 gdb

并将libncurses.so.5放在arm板的/usr/lib目录下

cp libncurses.so.5 /usr/lib

并将gdb放在arm板的bin目录下

cp gdb /bin

5.调试测试

在Ubuntu环境下编写一个简单的C程序,命名为gdb_test.c,在Ubuntu环境下打开命令行进行交叉编译

arm-hisiv400-linux-gcc -g gdb_test.c -o gdb_test

其中 -g就是gdb调试的意思
将生成的可执行文件gdb_test拷贝到arm板上,给予可执行权限。

chmod +x gdb_test

进行gdb调试

gdb gdb_test

即可进入gdb调试环境,进行调试了。
成功图如下所示:

在这里插入图片描述

总结

最关键的步骤就是利用交叉编译器编译ncurses库和gdb源码生成可执行文件,后续将可执行文件拷贝到arm板上即可。其中交叉编译最容易出问题,博主在尝试的时候绝大部分时间也是花在交叉编译ncurses库和gdb源代码上面了。如果交叉编译出从,我的建议是

  • 观察命令行返回的错误,利用搜索引擎搜索该错误,查找经验贴
  • 检查之前步骤是否有错误,如交叉编译器是否安装成功、Makefile是否配置正确
  • 换一个版本的ncurses库和gdb源代码
  • 多次尝试,不要怕出错,太乱了就删除掉安装目录重新再来。

第一次写博客,以上也是我参考了许多博客、自己不断尝试才取得的成功,想把自己的经验记录下来以便日后查看,也希望对相关人员有所帮助。如有错误,欢迎指正,如有问题,欢迎交流~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值