`
vaqeteart
  • 浏览: 298429 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

嵌入式开发交叉调试技术简介

 
阅读更多
嵌入式开发交叉调试技术简介

本文主要介绍嵌入式开发环境中使用gdb交叉调试的大体过程。
在后面例子中给出了针对QtExtend环境中使用交叉调试的最简步骤。

主要内容:
一、嵌入式中的交叉调试
二、交叉调试举例
三、其他

一、嵌入式中的交叉调试
============================
远程调试环境由宿主机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.4-tar-bz2
#cd gdb-6.4
#./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v
#make
  这一步的时候可能会有问题,提示一个函数中(具体函数名不记得了)parse error,就是unsigned前边多了一个”}”你用vi进入那一行把它删掉就行了
#make install
#export PATH=$PATH:/usr/local/arm-gdb
进入gdbserver目录:
#./configure --target=arm-linux --host=arm-linux
#make CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc
(这一步要指定arm-linux-gcc的位置)
  没有错误的话就在gdbserver目录下生成gdbserver可执行文件,把它烧写到flash的根文件系统分区,或通过nfs mount的方式都可以,只要保证gdbserver能在开发板上运行就行。
  下面就可以用gdb+gdbserver调试我们开发板上的程序了在目标板上运行gdbserver,其实就是在宿主机的minicom下,我的 RedHat Linux装在vmware下的,我是在minicom下#mount 192.168.2.100:/ /tmp后做的(这里参数 -o nolock可以不加,不加这一步执行得反而更快些),hello和gdbserver都是位于Linux根目录下,把主机根目录挂在到开发板的 /tmp 目录下。
  要进行gdb调试,首先要在目标系统上启动gdbserver服务在gdbserver所在目录下输入命令:
(minicom下)
#cd /tmp
#./gdbserver 192.168.2.100:2345 hello
  192.168.2.100为宿主机IP(这里我没有加这个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 192.168.2.223:2345
(192.168.2.223为开发板IP)
  出现提示:
Remote debugging using 192.168.2.223:2345
[New thread 80]
[Switching to thread 80]
0x40002a90 in ??()
同时在minicom下提示:
Remote debugging from host 192.168.2.100
(gdb)
  连接成功,这时候就可以输入各种GDB命令如list、run、next、step、break等进行程序调试了。
  以上针对通过nfs mount和tftp的方式,只能在主机上调试好后下载到开发板上运行,如果有错误要反复这个过程,繁琐不说,有些程序只能在开发板上调试,所以笔者采用了gdbserver的远程调试方式,希望对大家调试程序有用!

二、交叉调试举例
============================
以上资料源于csdn,内容比较全面但是也比较多,下面通过一个针对QtExtended开发环境下的,简单例子,对其过程进行演示。其他开发环境过程也类似。
大致步骤如下:
1)qbuild.pro中添加如下:
CONFIG+=debug
这一步是Qtextended添加调试标记用的,如果你的程序不是qtextended,那么使用"gcc -g"打开调试选项进行编译即可。
2)开发板子中:
#gdbserver :22222 myapp
3)开发主机中:
#arm-linux-gdb myapp
4)最后运行如下即可开始调试:
(gdb)target remote 192.168.100.200:22222
这里192.168.100.200是开发板子ip。

三、其他
============================
本文主要参考:
http://blog.csdn.net/borefo/archive/2009/12/23/5060682.aspx
http://qtextended.org/doc/qtextended4.4/debug-qtextended.html

有问题联系:
作者:QuietHeart
Email:quiet_heart000@126.com
日期:2011年2月24日
分享到:
评论

相关推荐

    嵌入式Linux应用开发完全手册.pdf

    《嵌入式Linux应用开发完全手册》全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的...

    嵌入式设计及linux驱动开发指南——基于ARM9处理器.pdf

    1.1 嵌入式系统简介 1.1.1 嵌入式系统定义 1.1.2 嵌入式系统与PC 1.1.3 嵌入式系统的特点 1.2 嵌入式系统的发展 1.2.1 嵌入式系统现状 1.2.2 嵌入式系统发展趋势 1.3 嵌入式操作系统与实时操作系统 1.3.1 ...

    嵌入式系统原理与设计.pdf

    然后介绍了交叉编译环境、开发过程,嵌入式设备之问的网络互联技术;最后通过典型事例介绍了嵌入式系统设计和开发的基本思路和方法。 《嵌入式系统原理与设计》适合计算机、软件工程、电子、电气、机电一体化、光电...

    嵌入式\(高校应用案例)北航软件学院

    内核调试技术;内核可移植性概述。 ZKQ090208 嵌入式Linux驱动开发 设备驱动及内核模块概述;构造和运行模块;编写字符设备驱动程序I;编写字符设备驱动程序II;高级字符驱动程序;与硬件通信;中断处理;Linux设备...

    嵌入式Linux应用程序开发标准教程(第2版全)

    5.1 嵌入式开发环境的搭建 5.1.1 嵌入式交叉编译环境的搭建 5.1.2 超级终端和minicom配置及使用 5.1.3 下载映像到开发板 5.1.4 编译嵌入式Linux内核 5.1.5 Linux内核源码目录结构 5.1.6 制作文件系统 5.2 U-Boot移植...

    嵌入式课件

    11.1.3嵌入式Linux的交叉开发工具链 11.2 桌面Linux的安装 11.2.1双操作系统环境 11.2.2 Cygwin模拟环境 11.2.3 VMware虚拟机环境 11.3 Linux的使用 11.3.1 Linux基本命令 11.3.2 vi编辑器的使用 11.3.3 gcc编译器 ...

    嵌入式Linux应用程序开发详解

    5.1 嵌入式开发环境的搭建 133 5.1.1 嵌入式交叉编译环境的搭建 133 5.1.2 超级终端和Minicom配置及使用 135 5.1.3 下载映像到开发板 142 5.1.4 编译嵌入式Linux内核 145 5.1.5 Linux内核目录结构 ...

    VxWorks开发指南与Tornado实用手册part2

    全书共20章,主要内容包括:开发环境Tornado、创建用户工程、交叉调试器-CrossWind、目标机系统状态浏览器-Browser、软件逻辑分析仪-WindView、目标机服务器-Target Server、用户定制开发环境Tornado、VxWorks简介、...

    VxWorks开发指南与Tornado实用手册

    全书共20章,主要内容包括:开发环境Tornado、创建用户工程、交叉调试器-CrossWind、目标机系统状态浏览器-Browser、软件逻辑分析仪-WindView、目标机服务器-Target Server、用户定制开发环境Tornado、VxWorks简介、...

    C语言中的文件读写全解析,学习C语言的15个黄金建议.zip

    除此之外,对于有志于深入系统底层开发的学习者,本文亦提供了系统编程的入门知识,以及如何为嵌入式系统交叉编译C代码的初步了解。 针对刚开始学习C语言的新手,这里有一套详尽的学习建议和实践技巧,从理解基础...

    单片机原理及应用课程简介.doc

    本课程的任务是学习嵌入式计算机硬件软件构成,以及嵌入式系统的主 流操作系统和软件开发技术。本课程主要分为嵌入式体系结构、嵌入式操作系统、嵌入 式软件开发。 嵌入式体系结构的教学主要围绕ARM体系结构进行,...

    LINUX系统开发技术详解---基于ARM

    ║2 嵌入式系统开发技术详解——基于ARM 3.1 Linux 常用工具.............................................................................................................. 28 3.1.1 Shell简介..................

    推荐系统架构师考试全套视频教程合集.zip

    14.7.1 交叉开发环境 14.7.2 开发过程 14.7.3 调试方法 第十五部分 开发管理 15.1 范围管理 15.2 时间管理 15.3 成本管理 15.4 文档管理 15.4.1 软件文档管理指南 15.4.2 计算机软件文档编制规范 15.5 软件配置管理 ...

    uboott移植实验手册及技术文档

    4、交叉编译器 arm-softfloat-linux-gnu-gcc-3.4.5 【实验步骤】 一、建立自己的平台类型 (1)解压文件 #tar jxvf u-boot-1.3.1.tar.bz2 (2)进入 U-Boot源码目录 #cd u-boot-1.3.1 (3)创建自己的开发板...

Global site tag (gtag.js) - Google Analytics