摘要
随着计算机应用的不断普及和深化,嵌入式系统及其应用已经成为全球IT产业发展的一个热点。嵌入式系统的调试作为嵌入式软件开发的一个不可或缺的辅助手段,占有十分重要的位置。
为Linux程序开发提供一个友好的、易操作的交叉调试环境,开发了基于嵌入式Linux的源码级交叉调试器。该调试器运行于Windows环境下,目标端为基于ARM 体系结构的嵌入式CPU芯片,调试代理采用GDBServer,调试对象为采用DWARF2调试信息格式的ELF目标文件。
在该交叉调试器中,RSP协议是调试器与GDBServer的消息通信规范。宿主端调试器采用RSP协议对调试命令进行封装并发送给目标机上的调试代理GDBServer,接收调试代理返回的调试信息并依据RSP协议对调试信息进行解析,以获取目标程序的当前运行状态。为了协调配合调试器和调试代理之间的有效通信,提供了RSP协议的消息发送与接收程序。
源代码与目标代码之间的映射关系是源码级调试的关键。为此,研究了ELF目标文件格式和DWARF2调试信息格式,设计了相应的符号表数据结构,使用BFD 库提供的接口读取ELF目标文件上的采用DWARF2格式的调试信息,为源码中的每一个符号提供了相关的调试信息,实现了源代码和目标程序之间的映射。
最后,分析了交叉调试的工作过程,设计了一组调试命令,定义了相关数据结构,介绍了宿主端调试器的主控循环,并以断点设置、连续执行和单步执行为例,介绍了相应调试功能的实现技术。
关键字:嵌入式系统,交叉调试,远程串行通信协议
Abstract
From the time that the first computer was born to the present,with the penetration and deepening of computer application,embedded systems application has become a hot in the global IT industry development.Embedded Systems debugging,as an indispensable mean during the embedded software development plays a very important role.Therefore,the research of embedded software debugging technology has important significance.
Baseed on the IDE of Embedded System,the souce-level crosss debugger is running under Windows OS.The target is embedded CPU chip based on the ARM architecture.The debug-agent is  GDBServer.The object being debugged is ELF files including DWARF2 debugging information.The whole debugging system aims at offering a friendly,ease operation cross debugging environment for developing Linux program.after simply introducing RSP and the principle of symbol table,according to the requirement of functions of debugger,basic functions of source-level cross debugger is implem
ented.
On the communication module, the debugger communicates with debug-agent via RSP, the corresponding algorithm is given. On the symbol-processing module,according to the ELF object file format and DWARF2 debug information format,the debugger reads the debugging information and store it in a data structure.for more convenient management,the debugger provides other two data structs to store respectively debugging symbols and the relationship among debugging symbols.In this basis,the symbol table is easey to be established.On the debugging function module,the main control circulation system is given,then with an analysis of the requirement of debugging functions,the debugging interface is designed.with the debugging principle,the corresponding data structure and algorithm is given.
Key words: Embedded System,Cross Debugging,Remote Serial Protocol
独创性声明
本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除文中已经标明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到,本声明的法律结果
由本人承担。
学位论文作者签名:
日期:年月日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,即:学校有权保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权华中科技大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
在线代码运行器保密□,在_____年解密后适用本授权书。
本论文属于
不保密□。
(请在以上方框内打“√”)
学位论文作者签名:指导教师签名:
日期:年月日日期:年月日
1  绪论
1.1  课题背景
在信息技术高速发展的今天,计算机与计算机技术得到了更为广泛和深入的应用。作为现在及未来计算机技术发展的一个重要方向的嵌入式计算机系统,简称嵌入式系统[1],已经成为了后PC时代全球IT产业发展的又一个突出热点。嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积和功耗严格要求的专用计算机系统[2]。与通用计算机系统一样,它包括硬件系统和软件系统两部分[3]。硬件系统主要由微处理器、存储器、外围设备和电源等组成,而微处理器是整个硬件系统的核心。软件系统主要由嵌入式操作系统和应用软件组成[4]。
嵌入式系统与通用计算机系统既有相似之处,也有明显的区别,其中最为显著的就是嵌入式系统的开发环境与通用系统很不同,它需要交叉编译系统和适当的调试系统[5]。通常我们称运行(集成)开发环境(包括编辑器、编译器和调试器等)的计算机为宿主机(Host),运行被调试程序的为目标机(Target)。被调试程序在宿主机上编辑完后编译成可执行文件并下载至目标机,然后宿主机与目标机通过串口、并口、网口等进行通讯,以完成调试功能,也可使用仿真器辅助调试[6,7]。
然而随着嵌入式硬件技术的发展,嵌入式系统应用的不断增长以及复杂性的不断提高,要求嵌入式软件的规模和复杂性也不断提高,嵌入式软件的质量和开发周期对产品的最终质量和上市时间起到决定性的影响,而在整个嵌入式软件的开发过程中,调试工作占据了软件开发的大部分时间,嵌入式软件的调试工具便成为了嵌入式系统开发商关注的重点[8]。一套调试工具的好坏,不仅直接影响到产品开发的速度和最终质量,甚至还关系到一个产品的成败[9]。
目前市面上针对嵌入式系统开发的调试工具(从硬件到软件)非常多,如ARM 公司的AXD debugger软件与Mutil-ICE仿真器、微软公司的EVC debugger、基于GNU的GDB等等[10],但是大部分嵌入式软件调试工具或者价格往往较高,或者使用不太方便,这对众多资金不雄厚而又有自己特定开发目的的公司开发嵌入式系统极为不利。所以根据现状要想进行嵌入式软件的开发和调试,自己搭建开发调试环境还是非常必要的。这可以在一定程度上降低嵌入式系统的开发成本,使
得嵌入式系统能够尽快为大多数消费者所接受[11,12]。
本课题的目的是通过对嵌入式系统的开发、调试功能进行需求分析,构建一套功能强大、界面友好、易于移植的嵌入式Linux集成开发环境。该集成开发环境提供可视化工程管理、可视化界面程序自动生成、功能强大的代码编辑、支持C/C++、汇编语言的交叉编译、源码级调试、运行代码分析、固化烧写等功能。本文主要研究该集成开发环境的源码级调试技术。此调试系统运行于Windows环境下,目
标端为基于ARM体系结构的嵌入式CPU芯片,调试代理采用GDBServer,调试对象为采用DWARF2(Debugging With Attributed Record Formats)调试信息格式的ELF(Executable and Linking Format)目标文件。
1.2  国内外概况
1.2.1  嵌入式调试方法
嵌入式软件开发过程中的调试一般也称为交叉调试,它与通用软件的调试方法有很大的区别,如表1.1所示[13]。
表1.1  交叉调试与非交叉调试的区别
交叉调试非交叉调试
调试器和被调试程序运行在不同的计算机上调试器和被调试程序运行在同一台计算机上
被调试程序的装载可由调试器完成被调试程序的装载由专门的Loader程序完成需要通过外部通信的方式来控制被调试程序不需要通过外部通信的方式来控制被调试程
可以直接调试不同的指令集的程序只能直接调试相同指令集的程序目前嵌入式系统调试的方法比较多,从大的方面可以分为软件调试和硬件调试两种,而具体细分主要有存储监控、存储仿真、在线仿真、模拟、插桩等六种[14]。
1.存储监控(Rom Monitor)方式
存储监控方式是在目标机上运行一段事先写好的监控程序,该程序通过串口、并口或网口与主机的调试器通讯,从而来监控目标机上被调试程序的运行[15]。通常监控程序是由开发板厂商提供,也可以由开发者自己书写,它首先被固化到目标机的ROM空间中,目标机上电复位后首先执行这段程序,完成硬件初始化和提供通讯接口,并初始化自己的程序空间,然后等待接收主机端的调试命令[16]。普通的监控程序可以完成被调试程序的下载、目标机内存和寄存器的读写、设置断点、单步执行等功能。一些高级的监控程序甚至能完成代码分析、系统分析、ROM 空间的写操作以及设置各种非常复杂的断点等功能[17]。这种调试方式的优点是:廉价有效、简单方便,并且可扩展性强,除了要通讯端口的支持外不需要其他专

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。