论文部分内容阅读
在数字信息技术和网络技术高速发展的今天,嵌入式系统已经广泛地渗透到人们的日常生活等方方面面中。其中,应用最广泛的是ARM处理器。随着ARM处理器和uClinux的应用的普及,移植和调试uClinux系统显得越发重要。但是,目前缺乏有效的GNU嵌入式系统调试工具,而由于嵌入式系统应用的广泛性,难以推出统一的或者具有普遍性的调试工具。因为平台差异和体系结构的差异,调试方法多种多样,虽然各有优点,但是都存在一些不足之处。尤其是目前的嵌入式系统调试开发工具对GNU的支持不好,这样就不利于GNU下大量开放源码的优秀软件进入嵌入式系统。 嵌入式系统的一些调试方法,比如软件仿真,要实现指令级的仿真,并且要针对不同的外设完成不同的设备仿真模块;而通过仿真器来调试一则成本较高,二则仿真器基本都是商业产品,一般缺乏对于GNU平台的调试支持。要让广泛而丰富的GNU项目进入嵌入式系统发挥作用,就要在多种现实的调试方法的基础上分析特点、博采众长、工具集成来寻找一条新路。 本文将针对这一方案,介绍一种低成本的基于JTAG的ARM调试器的设计与实现。首先要调试GNU项目,必然要在GNU的开发工具链中寻找切入点——GNU中的GDB调试器。GDB允许设置一个远程的调试代理,将调试的底层工作抽象为通用的接口,但是GDB并不支持嵌入式系统所常用的JTAG调试。要使得GDB能够支持JTAG,就要将两个模块无逢链接。经过综合考虑,方案首先完成了针对ARM的JTAG简易调试器,然后将其抽象并且使其理解GDB的远程串行调试协议(这里的主要工作是分析协议和参考GDB中的实现代码)。最后在充分分析的基础上修改GDB的远程调试模块,并且完成GDB和JTAG调试代理的无缝连接。从而实现了在GNU工具链下的针对嵌入式系统的源代码级调试的支持。由于借鉴了优秀的GNU项目GDB(GNU Debug)可以更好的支持uClinux等GNU相关项目的调试工作。从而弥补了GNU缺乏有效的嵌入式系统调试工具的缺憾。