嵌入式Linux的GDB远程调试的实现_tastesweet的博客-程序员宅基地

技术标签: linux  

远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接。使用GDB标准远程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。
就目前而言,嵌入式Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROM Monitor调试目标机程序、用KGDB调试系统内核和用gdbserver调试用户空间程序。这三种调试方法的区别主要在于,目标机远程调试stub的存在形式的不同,而其设计思路和实现方法则是大致相同的。
而我们最常用的是调试应用程序。就是采用gdb+gdbserver的方式进行调试。在很多情况下,用户需要对一个应用程序进行反复调试,特别是复杂的程序。采用GDB方法调试,由于嵌入式系统资源有限性,一般不能直接在目标系统上进行调试,通常采用gdb+gdbserver的方式进行调试。Gdbserver在目标系统中运行,gdb则在宿主机上运行。
要进行GDB调试,目标系统必须包括gdbserver程序,宿主机也必须安装gdb程序。一般linux发行版中都有一个可以运行的gdb,但开发人员不能直接使用该发行版中的gdb来做远程调试,而要获取gdb的源代码包,针对arm平台作一个简单配置,重新编译得到相应gdb。gdb的源代码包可以从
http://ftp.cs.pu.edu.tw/Linux/sourceware/gdb/releases/ 下载,最新版本为gdb-6.4。下载到某个目录,笔者下载到自己的用户目录:/home/vicky。
下载完后,进入/home/vicky目录,配置编译步骤如下:
#tar jxvf gdb-6.8-tar-bz2
#cd gdb-6.8
#./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v
#make
#make install
#export PATH=$PATH:/usr/local/arm-gdb
进入gdbserver目录:
#./configure --target=arm-linux –host=arm-linux
#make CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc
(这一步要指定arm-linux-gcc的位置,可能跟你的不一样,用2.95.3可能有问题)

没有错误的话就在gdbserver目录下生成gdbserver可执行文件,把它烧写到开发板flash的根文件系统分区,或通过nfs mount的方式都可以。只要保证gdbserver能在开发板上运行就行。
下面就可以用gdb+gdbserver调试我们开发板上的程序了。在目标板上运行gdbserver,其实就是在宿主机的SecureCRT下,我的red hat linux装在vmware下的。我是在minicom下# mount -o nolock 172.20.223.38:/home /tmp后做的,hello和gdbserver都是位于linux根目录下,把主机根目录挂在到开发板的/tmp目录下。
要进行gdb调试,首先要在目标系统上启动gdbserver服务。在gdbserver所在目录下输入命令:
(minicom下)
#cd /tmp
#./gdbserver 172.20.223.38:2345 hello
172.20.223.38为主机IP,在目标系统的2345端口开启了一个调试进程,hello为要调试的程序。
出现提示:
Process /tmp/hello created: pid=80
Listening on port 2345
(另一个终端下)
#cd /
#export PATH=$PATH:/usr/local/arm-gdb/bin
#arm-linux-gdb hello
(gdb) target remote 172.20.223.111:2345
(172.20.223.111为开发板IP)
出现提示:
Remote debugging using 172.20.223.38:2345
[New thread 80]
[Switching to thread 80]
0x40002a90 in ??()
同时在minicom下提示:
Remote debugging from host 172.20.223.38
(gdb)
连接成功,这时候就可以输入各种gdb命令如list、run、next、step、break等进行程序调试了。
以上针对通过nfs mount和tftp的方式,只能在主机上调试好后下载到开发板上运行,如果有错误要反复这个过程,繁琐不说,有些程序只能在开发板上调试。所以笔者采用了gdbserver的远程调试方式。

<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(416) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011202336/article/details/9171727

智能推荐

搭建Pxe服务器无人听应答全自动网络安装Ubuntu 14.04.4 server系统-程序员宅基地

前面我们已经使用CentOS6.7的平台搭建了pxe服务器,现在我们利用此服务器继续安装Ubuntu 14.04.4 server系统的客户机。参见http://1130739.blog.51cto.com/1120739/1740925部署方法:在pxe安装菜单文件/var/lib/tftpboot/msgs/boot.msg添加Ubuntu系统的选项在default文件...

苹果电脑需要每晚都关机吗?Mac需不需要关机_苹果秒控键盘二代下班需要关机吗-程序员宅基地

尽管Windows 10用户通常会在一天结束时关闭他们的PC,但使用Mac的用户往往会无限期地打开它们。但这真的是个好用法吗?我们来看看您是否应该每晚关闭Mac?##我应该在晚上关闭Mac吗?苹果设计的macOS和Mac在能源使用和性能方面非常高效。考虑到这一点,每个用户一天使用完计算机后,可以使用三个选项:将其打开,使其进入睡眠状态或将其关闭。如果您担心iMac或MacBook会耗电,那完全有点多余,当屏幕关闭且Mac进入睡眠状态时,这时的电能消耗会非常小。当然,如果您担心它消耗电量,那么在睡觉时_苹果秒控键盘二代下班需要关机吗

2020论文计划-程序员宅基地

今天是2020年的第一天,这里列出来我今年的CV论文阅读计划,也包括我前面读过的一些论文。 15 Jan 2010.ReLU.Xavier Glorot,Antoine Bordes,Y. Bengio Deep Sparse Rectifier Neural Networks http://www.chenjianqu.com/show-63.html Jan 2012.AlexNet.Alex Krizhevsky,I Sutskever,G Hinton Ima.

史上最全的CSS样式整理_css 所有样式key-程序员宅基地

一 字体属性:(font)大小 {font-size: x-large;}(特大)xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX、PD样式 {font-style: oblique;}(偏斜体)italic;(斜体) normal;(正常)行高 {line-height: normal;}(正常) 单位:PX、PD、EM粗细 {font-weight: bold;_css 所有样式key

stm32 笔记 PWM及HAL库应用_stm32 hal库pwm_余生皆假期-的博客-程序员宅基地

STM32 使用一个定时器作为 PWM 输出,在上图中,ARR 即为重装载值。在计数器的值大于CRRx的值并且小于 ARR 之间,即区分高低电平。输出在图中分别有 ① 和 ② 两种情况.分别为:①CRR 和 ARR 区间为低电平。②CRR 和 ARR 区间为高电平。_stm32 hal库pwm

[转]iOS高级调试&逆向技术-汇编寄存器调用-程序员宅基地

前言本文翻译自Assembly Register Calling Convention Tutorial序言通过本教程,你会可以看到CPU使用的寄存器,并探索和修改传递给函数调用的参数。还将学习常见的苹果计算机架构以及如何在函数中使用寄存器。这就是所谓架构的调用约定。了解汇编是如何工作的,以及特定架构调用约定是如何工作是一项极其重要的技能。它可以让你在没有源码的情况下..._调试和逆向技术

随便推点

2021年中央企业数字化转型研究报告(附下载)_数字化转型调研报告-程序员宅基地

数字化转型在各个行业紧锣密鼓的推进,中央企业作为中国经济重要的组成部分,承担着试点验证的社会责任,现已进行到何等地步?中央企业的数字化转型的路径是什么?方法论能否给其他企业指明方向?亿欧智库针对中央企业数字化转型提出1+4+4+N的思考框架,包括集团管控、4项原则(CPAS),4个基础以及N个业务,助力中央企业数字化转型。中央企业应做数字化转型的领头羊首先,中央企业是中国经济的重要组成部分,承担着试点验证的社会责任。根据财政部数据,除去疫情因素,中央企业近十年营业总收入..._数字化转型调研报告

模电【第一部分】_p区电势比n区高-程序员宅基地

在PN结中,P区的电势比N区高(YES);在PN结形成过程中,空穴的扩散运动方向是从P区到N区(NO );漂移运动方向是从N区到P区( YES);PN结形成后,参与扩散运动的载流子数量大于参与漂移运动的载流子数量(NO);在纯净半导体中掺入五价磷元素后,形成__N型__半导体,其导电率__增大__;这种半导体的多数载流子是__自由电子__,少数载流子是__空穴__。在纯净半导体中掺入三价硼元素后,形成__P型__半导体,其导电率__增大__;这种半导体的多数载流子是__空穴.._p区电势比n区高

盲源分离算法JADE附MATLAB代码_盲源分离matlab程序_CodeRoarX的博客-程序员宅基地

盲源分离是指在未知混合因子的情况下,将多个源信号从混合信号中分离出来的过程。JADE算法是一种常用的盲源分离算法,其具有计算量小、收敛速度快等优点,在语音识别、图像处理等领域得到了广泛的应用。下面通过MATLAB代码演示JADE算法的实现过程。分离结果保存在S_est中。以上就是JADE算法在MATLAB中的实现过程。盲源分离算法JADE附MATLAB代码。_盲源分离matlab程序

linux系统的启动与自启动程序-程序员宅基地

进入到操作系统之后是图形化界面,但是也可以用终端操作先来看下vi /etc/inittab: 定义了7个操作系统的runlevel(启动级别)。所以关机可以用init 0 ——重启可以用init 6reboot若忘记root用户密码,可以重新重置系统密码。按E(edit),再用E,直接加一个single回车,按B,按第二个选项启动,就跳过了安全直达用户。即可初始化密码。cd /etc/rcr...

python datetime 报错OSError: [Errno 22] Invalid argument_不解不惑的博客-程序员宅基地

datetime.datetime.utcfromtimestamp()函数的输入数据类型为浮点型,单位为秒。classmethoddate.fromtimestamp(timestamp)返回对应于 POSIX 时间戳的当地时间,例如time.time()返回的就是时间戳。这可能引发OverflowError,如果时间戳数值超出所在平台 Clocaltime()函数的支持范围的话,并且会在localtime()出错时引发OSError。 通常该数值会被限制在 1970 年...

Java输出前50个素数_java 编写一个函数isprime()判断一个自然数是否素数,输出前50个素数-程序员宅基地

package Hello;public class First50prime { public static void main(String[] args) { // TODO Auto-generated method stub int count = 0; int rownum=0; for(int i=2;count<50;i++) { int ..._java 编写一个函数isprime()判断一个自然数是否素数,输出前50个素数