开发环境

  • 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

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


另外,还要检查交叉编译器是否已经添加至环境变量

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源代码
  • 多次尝试,不要怕出错,太乱了就删除掉安装目录重新再来。

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

将本地调试gdb移植到arm板相关推荐

  1. Opencv3.2移植到arm板

    注:博客中有些图片部分为了省事,借用了别人博客的图片,相关部分注意事项相同.若有侵权,请联系删除! 一,Opencv3.2移植到arm Opencv3.2 ubuntu16.04 目标板:飞凌嵌入式i ...

  2. wxX11移植到arm板上

    [原]移植wxX11到开发板上 2012-5-18阅读467 评论0 最近几天由于工作安排,要将wxX11程序移植到arm开发板上.一连工作了好几天,终于可以在板子上显示出一个"X" ...

  3. 最新版ser2net移植到ARM板上,交叉编译

    这个是ser2net源码http://sourceforge.net/projects/ser2net/files/latest/download ser2net是我在玩openwrt时接触的,当时用 ...

  4. wxX11移植到arm板上(序)

    在将wxX11里在程序在arm板子上运行之后,我们发现那上面的程序运行的时候没有边框和标题栏.于是我们就找这方面的解决方法.首先在tinyx里找到了一个窗口管理器twm,当把twm交叉编译完以后,拷到 ...

  5. QT程序到arm板(s5pv210)的移植之旅

    前记: 由于毕设的原因,将来需要移植QT程序到arm板子运行,故有此文. 看博客寻资料,看到一位作者写道:知识来源于互联网,必将回报互联网.赞. 介于从陌生到熟悉的折腾,故将移植过程记录,发文,以己省 ...

  6. python交叉编译_交叉编译Python3.6.2,使用海思arm-hisiv200-linux-gcc,移植到arm开发板上...

    最近在学习Python,感觉使用Python可以快速的写出程序,比之前使用的C语言快多了,能省出很多时间.多学一点知识有更多的选择.本职工作是嵌入式开发,学习了Python后想移植到开发板上,尝试嵌入 ...

  7. 移植ethtool至ARM板

    移植前需要理解的概念 『交叉编译器』:想要使程序能够在ARM板上运行,需要使用交叉编译器编译程序,如 arm-hisiv400-linux-gcc 『动态链接与静态链接的区别』:ARM板上相关库文件不 ...

  8. Openssl移植到ARM开发板

    Openssl移植到ARM开发板 openssl源码下载 源码编译配置 使用生成的库文件 openssl源码下载 openssl源码可以在官网下载:https://www.openssl.org/so ...

  9. apache arm 交叉编译_Apache 2移植到Arm开发板的过程整理——如何交叉编译Apache 2

    话说要在arm开发板的linux系统中运行apache服务器,需要在pc linux系统中交叉编译Apache源码,在网上参考了很多资料都是1.3版本的,最后终于找到apache 2移植到arm开发板 ...

  10. RV1109开发板ssh服务器移植到arm开发板

    RV1109开发板ssh服务器移植到arm开发板 ssh功能移植到RV1109开发板的,由于RV1109的SDK中,没有telnet功能,有时候adb功能在量产中需要关闭,避免造成设备留有漏洞,造成安 ...

最新文章

  1. python中的数据包处理模块scapy调研笔记
  2. gamma函数及相关其分布
  3. 优化Hadoop Balancer运行速度
  4. 机器学习研究今年谁最火?几何深度学习成最大赢家,Reddit为提名选手吵成一团...
  5. linux安装mysql字符_Linux下MySQL的彻底卸载和安装配置字符集
  6. windows 10家庭版关闭Defender
  7. 数据结构---二叉线索树
  8. 《MySQL 8.0.22执行器源码分析(3.1)关于RowIterator》
  9. MDaemon邮件服务器解决方案之应急恢复解决方案
  10. erp系统服务器电脑配置,erp软件服务器电脑配置
  11. 为什么电梯安装企业项目接得更多,利润更少?
  12. win7 matlab 7.0,win7环境下使用matlab7.0的方法
  13. UIkit之滚动监听+动画特效
  14. python列表的长度可变吗_Python: 浅析列表的变长变短
  15. 模拟IC设计——反相器
  16. 厦门大学2022年计算机考研复试流程
  17. 【朝花夕拾】Android性能篇之(四)Apk打包
  18. Docker 安装 Nginx 容器 (完整详细版)
  19. 零基础学习大数据分析难吗?
  20. Android开发免费短信验证码SDK。

热门文章

  1. OA办公——SwebUI开源应用解决方案
  2. 计算机视觉项目实战-基于特征点匹配的图像拼接
  3. 虚拟汽车加油问题 (贪心算法)
  4. Excel复制的数据到文本文件里面有 双引号
  5. 没有财务系统如何对账?
  6. 去痘痘、痘坑的五大误区
  7. python代码敲写英雄联盟排列
  8. STM32制作FLASH字库
  9. 《神奇的数学》读后感_奇妙的数学读后感
  10. 简易个人所得税计算器