将本地调试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
若正常显示交叉编译器的版本,说明已安装成功,如下图所示:
另外,还要检查交叉编译器是否已经添加至环境变量
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.5
、gdb
拷贝到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板相关推荐
- Opencv3.2移植到arm板
注:博客中有些图片部分为了省事,借用了别人博客的图片,相关部分注意事项相同.若有侵权,请联系删除! 一,Opencv3.2移植到arm Opencv3.2 ubuntu16.04 目标板:飞凌嵌入式i ...
- wxX11移植到arm板上
[原]移植wxX11到开发板上 2012-5-18阅读467 评论0 最近几天由于工作安排,要将wxX11程序移植到arm开发板上.一连工作了好几天,终于可以在板子上显示出一个"X" ...
- 最新版ser2net移植到ARM板上,交叉编译
这个是ser2net源码http://sourceforge.net/projects/ser2net/files/latest/download ser2net是我在玩openwrt时接触的,当时用 ...
- wxX11移植到arm板上(序)
在将wxX11里在程序在arm板子上运行之后,我们发现那上面的程序运行的时候没有边框和标题栏.于是我们就找这方面的解决方法.首先在tinyx里找到了一个窗口管理器twm,当把twm交叉编译完以后,拷到 ...
- QT程序到arm板(s5pv210)的移植之旅
前记: 由于毕设的原因,将来需要移植QT程序到arm板子运行,故有此文. 看博客寻资料,看到一位作者写道:知识来源于互联网,必将回报互联网.赞. 介于从陌生到熟悉的折腾,故将移植过程记录,发文,以己省 ...
- python交叉编译_交叉编译Python3.6.2,使用海思arm-hisiv200-linux-gcc,移植到arm开发板上...
最近在学习Python,感觉使用Python可以快速的写出程序,比之前使用的C语言快多了,能省出很多时间.多学一点知识有更多的选择.本职工作是嵌入式开发,学习了Python后想移植到开发板上,尝试嵌入 ...
- 移植ethtool至ARM板
移植前需要理解的概念 『交叉编译器』:想要使程序能够在ARM板上运行,需要使用交叉编译器编译程序,如 arm-hisiv400-linux-gcc 『动态链接与静态链接的区别』:ARM板上相关库文件不 ...
- Openssl移植到ARM开发板
Openssl移植到ARM开发板 openssl源码下载 源码编译配置 使用生成的库文件 openssl源码下载 openssl源码可以在官网下载:https://www.openssl.org/so ...
- apache arm 交叉编译_Apache 2移植到Arm开发板的过程整理——如何交叉编译Apache 2
话说要在arm开发板的linux系统中运行apache服务器,需要在pc linux系统中交叉编译Apache源码,在网上参考了很多资料都是1.3版本的,最后终于找到apache 2移植到arm开发板 ...
- RV1109开发板ssh服务器移植到arm开发板
RV1109开发板ssh服务器移植到arm开发板 ssh功能移植到RV1109开发板的,由于RV1109的SDK中,没有telnet功能,有时候adb功能在量产中需要关闭,避免造成设备留有漏洞,造成安 ...
最新文章
- python中的数据包处理模块scapy调研笔记
- gamma函数及相关其分布
- 优化Hadoop Balancer运行速度
- 机器学习研究今年谁最火?几何深度学习成最大赢家,Reddit为提名选手吵成一团...
- linux安装mysql字符_Linux下MySQL的彻底卸载和安装配置字符集
- windows 10家庭版关闭Defender
- 数据结构---二叉线索树
- 《MySQL 8.0.22执行器源码分析(3.1)关于RowIterator》
- MDaemon邮件服务器解决方案之应急恢复解决方案
- erp系统服务器电脑配置,erp软件服务器电脑配置
- 为什么电梯安装企业项目接得更多,利润更少?
- win7 matlab 7.0,win7环境下使用matlab7.0的方法
- UIkit之滚动监听+动画特效
- python列表的长度可变吗_Python: 浅析列表的变长变短
- 模拟IC设计——反相器
- 厦门大学2022年计算机考研复试流程
- 【朝花夕拾】Android性能篇之(四)Apk打包
- Docker 安装 Nginx 容器 (完整详细版)
- 零基础学习大数据分析难吗?
- Android开发免费短信验证码SDK。