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

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

基本思路

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

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

iTOP4412搭建环境

搭建步骤

第一步:下载gdb压缩包

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

第二步:编译并安装gdb

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

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

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

如下图所示:

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

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

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

生成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
编译过程中会出现以下错误:

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

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

注释掉116行#include<sys/reg.h>头文件,如下图所示:

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

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

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

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

拷贝完成如下图所示:

测试

测试代码:

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

gdbserver 192.168.2.230:5000 ./test

启动成功如下图所示:

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

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

启动成功后如下图所示:

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

target remote 192.168.2.23:5000

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

接下来,我们就可以在ubuntu上使用命令来设置断点,单步调试开发板上的程序了

学习4412开发板gdb和gdbserver的调试的更多相关文章

  1. 【转帖】嵌入式4412开发板QT5.7编译安装到arm

    QT5.7.0+UBUNTU16.04+ARM-NONE-LINUX-GNUEABI4.8+busybox最小LINUX系统 Orandragon记录 本文转自迅为4412开发板群:http://to ...

  2. 4412开发板升级4.2之后改了logo开机后屏幕闪解决办法

    荣品4412开发板升级到4.2请注意增加虚拟机内存. 问:荣品4412开发板升级到Android4.2之后,改了logo.4412板子开机后,过一会屏幕就一闪一闪,是什么原因? Android4.2编 ...

  3. 基于讯为4412开发板的Android开发流程

    讯为4412开发板  使用三星2410芯片,基于arm9架构,由于自己电脑硬件的局限,只能跑Android4.0.3系统. 1.Uboot这个直接使用官方镜像烧写就可以了,一般情况不用去重复烧写. 略 ...

  4. 【开学季】自学嵌入式开发|四核开发板|4412开发板|ARM+Android+linux技术

    淘宝店铺:迅为开发板http://arm-board.taobao.com 网站:http://www.topeetboard.com QQ咨询:2551456065 电话咨询:010-5895758 ...

  5. 迅为三星Exynos 4412开发板四核Cortex-A9ARM安卓linux开发板

    开发板光盘资料包含:原理图(PDF格式).底板PCB(Allegro格式).驱动程序源码.芯片和LCD数据手册.开发环境.产品使用手册. 4412开发板简介: iTOP-Exynos4412开发板采用 ...

  6. 迅为4412开发板QtE系统源码-屏幕横竖屏切换修改方法

    迅为4412开发板QtE系统源码-屏幕横竖屏切换修改方法 详情了解:http://topeetboard.com 更多了解:https://arm-board.taobao.com/ 用户在开发板上运 ...

  7. [转帖]4412开发板/4418开发板Android4.4.4实现ble功能

    本文转自迅为论坛:http://bbs.topeetboard.com ①.4418开发板实现ble功能方法: 在4418/android/device/nexell/drone2/device.mk ...

  8. 学习嵌入式开发板的Android平台体系结构和源码结构

    本文转自迅为论坛资料:http://www.topeetboard.com 推荐学习嵌入式开发板平台:iTOP-4412开发板 下面这张图出自Google官方,展示了Android系统的主要组成部分. ...

  9. 学汇编的时候可以拿IDA之类的反汇编工具辅助学习,再用gdb或者IDA动态调试,跟踪每条指令的 执行结果。都不难

    作者:潘安仁链接:https://www.zhihu.com/question/40720890/answer/87926792来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

随机推荐

  1. MVC通用仓储类

    原文链接:http://www.codeproject.com/Articles/1095323/Generic-Repository-Pattern-MVC 良好的架构师任何项目的核心,开发人员一直 ...

  2. idea 2019.3 最新破解补丁和激活码,可破解至2089年!

    链接:https://blog.csdn.net/qq_42914528/article/details/85617901 上面方法失效了,请尝试以下方式激活(2020.1.6更新) idea激活码( ...

  3. no.9亿级用户下的新浪微博平台架构读后感

    微博平台的第三代技术体系,使用正交分解法建立模型:在水平方向,采用典型的三级分层模型,即接口层.服务层与资源层:在垂直方向,进一步细分为业务架构.技术架构.监控平台与服务治理平台. 水平分层 (1)接 ...

  4. 阿里云云服务器测试uwgis的基本流程

    基本背景 uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换. 要注意 WSGI / uwsg ...

  5. windows 10下的python开发环境

    linux子系统 按照文档 https://www.jianshu.com/p/2bcf5eca5fbc 的前五步,完成 ubuntu子系统安装. 不需安装图形桌面,无使用价值. 在https://w ...

  6. PAT Advanced 1086 Tree Traversals Again (25) [树的遍历]

    题目 An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For exam ...

  7. VMware DRS部分知识点

    主机添加到集群中,不需要维护模式(有虚拟机开机状态时也可以添加进去). 主机从集群中移除,需要主机进入维护模式. HA和DRS 全自动 当设置虚拟机必须在主机上时 DRS优先级大于HA 就算主机挂了H ...

  8. Springmvc接收数组参数

    Springmvc接收数组参数,必须添加@RequestParam注解 注解格式@RequestParam(value="前端参数名[]") 示例: controller端的代码 ...

  9. GaussDB数据dump实现完全同步

    问题背景:搭建服务后端容灾集群,服务正常时容灾DB需要从业务DB完全同步数据,服务异常时,容灾DB停止抽取数据,自动从探针采集业务数据. 解决方案:常用的有两种思路,一是从服务后端定时每天拉取业务DB ...

  10. [转载]matlab视频读取函数VideoReader

    看到以前matlab中读取视频多 使用mmreader等(参考<matlab读取/播放视频的函数>),而现在matlab有一个专门的视频读取类VideoReader完成视频读取的功能. 相 ...