您的当前位置:首页基于JTAG技术的嵌入式交叉调试软件

基于JTAG技术的嵌入式交叉调试软件

来源:小侦探旅游网
0期第26卷第1Vol. 26No. 10计算机工程与设计    Computer Engineering and Design2005年10月Oct.   2005基于JTAG技术的嵌入式交叉调试软件                               阳富民,柯滔,涂刚(                          华中科技大学计算机学院,湖北武汉430074)摘要:介绍了JTAG交叉调试技术及Xscale芯片的增强调试功能,并在此基础上给出一种嵌入式交叉调试软件系统的设计及实现。主机端环境为LINUX操作系统,并利用GDB调试软件,目标系统采用Xscale芯片.该系统的特点是纯软件实现,廉价方便。关键词:JTAG;嵌入式系统;交又调试中图法分类号:TP319文献标识码:A文章编号:1000-7024(2005)10-2817-03Embedded cross debugging software based on JTAGYANG Fu-min,  KE Tao,TU Gang(School of Computer Science, Huazhong Universiyto f Scienceand Technology, Wuhan 430074, China)Abstract: The cross debugging technology was introduced with JTAG and the debugging functions of Xscale was emhanced. The designand implementation technology of an embedded cross debugging software system was provided in details.The host ran with linux operatingsystem, and GDB was adopted as host debugger. The target chip is Xscale. The peculiarity of this system is its cheapness due to puresoftware implementation.Key words: JTAG; embedded system; cross debugging1引言特有调试功能给出一种嵌入式交叉调试软件的设计与实现。    交叉调试是嵌入式系统开发中普遍采用的调试方法。支2交叉调试系统的总体结构持HAG"'技术的嵌入式芯片可以在系统运行环境尚未建立的    交叉调试系统由主机调试器、目标机上的调试代理、调试条件下实现交叉调试。所谓的JTAG技术就是将芯片内部所协议3大部分组成,其体系结构如图1所示。图中主机调试有的引脚通过边界扫描单元串接起来,借助JTAG外部接口实器主要实现对源文件、目标文件和符号表的访问处理,接收用现对芯片引脚的操作,达到控制芯片的目的。芯片内的片上户输入的调试命令,并根据调试协议封装成调试命令请求包调试逻辑由测试访问接口控制器体现,它包括一个16状态的发送给调试代理,同时接收调试代理返回的调试信息,以获取有限状态机以及调试指令寄存器、数据寄存器、旁路寄存器和目标程序的当前运行状态。目标机上的调试代理负责根据调芯片标识寄存器等,由它实现对边界扫描单元的操作以及调试协议接收并解析调试命令,监控目标程序的运行状态,将目试指令的执行。标程序状态信息返回主机端。调试协议则规定了调试命令和I    ntel公司的Xscale"'是符合ARM体系架构的一款嵌入式调试信息的数据格式及通信过程。芯片,它不但支持JTAG标准指令,还添加了4条特有的JTAGHOSTTARGET指令:LDIC,SELDCSR,DBGRX和DBGTX.LDIC指令用于将调试代理程序下载到Xscale的微型指令缓冲区(MinilC)中;SELDCSR指令用于读写DCSR数据寄存器,可以使CPU产生异常:DBGRX指令用于写入RX数据寄存器,使目标机从中接收调试命令;DBGTX指令用于读出TX数据寄存器,即从目标机接收调试数据。涉及的硬件包括协处理器CP 14中的控制寄存器TXRXCTRL、发送寄存器TX、接收寄存器RX和一图1调试系统体系结构个36位移位寄存器DBG SR等。    此结构的特点是主机端环境为LINUX操作系统,主机调本文将应用J    TAG技术提供的调试支持,并针对Xscale芯片的试器采用GDB -I- JTAGER的方案,由GDB完成对源文件、目收稿日期:2004-09-01.作者简介:阳富民(1966-),男,湖南邵阳人,教授,研究方向为嵌入式操作系统及人工智能技术;柯滔,硕士生,研究方向为嵌入式操作系统:涂刚,博士生,研究方向为嵌入式操作系统。一2817一标文件和符号表的访问处理和与用户的交互,由JTAGER程序封装对交叉调试的支持;调试协议是JTAGER程序与调试代理程序之间的通信规范,此协议遵循Xscale芯片手册〔2]规定的调试过程及步骤;调试代理程序HANDLER则通过Xscale特有的LDIC指令载入目标芯片的微型指令缓存中。3调试协议调试协议是整个交叉调试系统的中心,它规定了主机与    目标机之间的数据通信过程。主机与目标机采用尽量简单的数据包交互,JTAGER需要发往HANDLER的调试命令包括读写目标机内存(g和P)、增加断点(b)、继续运行(c)。由于读写目标机寄存器会频繁发生,所以采用轮询方式定时完成。交互过程中采用Xs    cale协处理器14的寄存器RX, TX作为数据交换通道:JTAGER使用特有JTAG指令LDIC, SEL-DCSR,DBGRX和DBGTX对目标芯片的RX, TX进行读写;HANDLER使用芯片汇编指令mcr与mrc读写RX与TX。两者数据交互要通过握手进行同步二RX握手(包括普通RX握手与快速数据下载握手两种类型)与TX握手。3.1普通RX握手普通RX握手协议是」    TAGER向HANDLER传送数据的通信规范。JTAGER在传输数据时,首先通过JTAG轮询TXRXCTRL的RR位,检查其是否为0,直到RR=O。然后通过DBG.RX将数据扫描入RX中,并设置数据有效位(dbg.v=1) o当写入RX时,RR自动设为1。在HANDLER端,HANDLER轮询RR直到RR=1,这表明此时Rx中的数据有效。一旦RR被设置,则HANDLER从RX中读取新数据,并自动设RR=O o3.2快速数据下载握手    快速数据下载握手协议用于JTAGER向Xscale系统内存传输数据。此时JTAGER首先必须轮询RR位直到RR=O。一旦检测到RR=O(表明HANDLER已就绪),JTAGER开始传输数据。JTAGER将数据扫描入RX,并设置dbg.v=1, dbg.d=1。当数据写入RX时,TXRXCTRL中的RR位和D位自动被设置为1. JTAGER继续将新数据扫描入RX中时,无需轮询RR来检测HANDLER是否己读取数据,只需设置dbg.v和dbg.d。当HANDLER没有读取以前的数据,而此时JTAGER已完成新数据的扫描时会出现一个溢出异常。在完成了下载操作后,JTAGER将设置dbg.d=0,允许HANDLER结束下载。    HANDLER处于等待数据写入内存的线程中,这个线程的循环是基于TXRXCTRL的D位。当RR=1时,HANDLER开始读取RX的数据,并写入内存中。这个操作一直持续到JTAGER清除D位为止。当溢出异常发生时,    TXRXCTRL的Ov位被设置,而且一直保持直到用MCR命令对TXRXCTRL进行一个写操作来清除。在JTAGER完成下载之后,它会根据Ov位检查溢出异常是否发生。HANDLER保存了在异常发生之前最后一次数据有效保存的地址。3.3  TX握手TX握手协议用于HANDLER向J    TAGER传输数据。在HANDLER端,HANDLER首先必须轮询TR位检查TX寄存器是否为空(以前的数据己被JTAGER读取)。当TR=O, HAND-2818一LER就将新数据写入TX中,TR被自动设置。在JTAGER端,JTAGER在读取TX数据前必须通过JTAG轮询TR位,扫描出TR位和TX寄存器数据。当TR=1时,表明扫描出的TX数据有效并自动清除TR位。4主机端调试器GDB+JTAGER    GDB是公开源码的一种功能强大的通用调试器,它支持丰富的调试命令与多种编程语言,并且支持远程调试方式。运行GDB的平台通过并行端口(或网口、串口等)连接到己建立运行环境的目标机时,GDB可以按照远程串行协议(RSP)与目标机上的插桩程序通信来调试目标系统。但当目标机为裸机时,GDB无法与之通信而不能调试,所以再增加一个中间软件JTAGER,它的功能是应用JTAG技术实现对裸机的交叉调试。J    TAGER首先需要能解析GDB的串行调试通信协议,并且根据GDB所发的调试命令进行处理,在取得相应调试信息时封装为特定格式将之回送给GDB,完成各类调试命令的支持;其次,JTAGER需要能将GDB的调试命令信息转译为相应的JTAG指令组合,按照调试协议规定的握手过程通过RX,TX与调试代理(HANDLER)通信,间接控制目标机程序的运行。它与目标机的通信途径是主机端并口以特定接线方式直接连接到目标机的JTAG口。连线中也可以加入被称为“探头”的器件(较常见的为wiggler),以硬件方式实现自动“串/并”转换[3]由以上分析可知,J    TAGER程序必须实现2个关键功能:与GDB的数据包交互和对RX, TX寄存器的读写操作。以这两个功能为基础,再通过JTAGER程序的主控流程和调试命令的处理过程就可以清晰地描述出JTAGER程序的实现。另外,HANDLER的载入作为Xscale的独特功能也有必要加以说明。下面分别对这5部分的实现进行叙述。4.1  GDB交互数据包交互过程必须遵守GDB远程串行协议(    RSP)进行数据包处理[4],数据包格式为:¥packet data#checksuma¥为数据包的头标识,packet data为数据包内容,#是数据包结束标识,check-sum表示整个数据包的检验码,用来保证数据的正确传送。在」    TAGER运行过程中,其主控循环不断地接收RSP数据包、解析、并将处理结果封装成应答RSP数据包,交给GDB o以读内存为例:GDB发往J    TAGER的数据包:¥mc0018004,4#8dJ    TAGER应答GDB的数据包:¥OOd82de9#304.2  RX, TX寄存器读写操作RX写入函数(    ……)Tx读出函数仁.    〕{      {      whi    le(RR!=0);whi    le(RR!=1);将DBGRX指令写入J    TAG将DBGTX指令写入J    TAG的IR中;的IR中;设置dbg.    d=0-, dbg. lfush=0,设置d    bg.d, dbg.v和dbg.lfushdbg.v=卜为0;通过DBG.     RX将数据写入通过DBG.     TX将数据读出RX, RR自动设为1;TX, RR自动设为0;}      }      图2  RX.TX寄存器读写函数RX,     TX是JTAGER与HANDLER的数据交换通道,对它们的读写操作要按照调试协议规定的握手过程进行。其实现伪码如图2所示。4.3  JTAGER主控流程J    TAGER在主机上与GDB并行运行,它使用Unix的io多路转换机制监听指定的tcp调试端口与GDB进行通信。其主体控制流程伪码如图3所示。JTAGER主控程序C二J{初始化目标板的JTAG接口:往目标板的MinilC载入HANDLER;打开GDB远程tcp端口,接收gdb远程调试协议报数据;while(l)监视tcp调试端口和用户标准输入;if(有数据包),解析后进入相应调试命令处理函数;else轮询目标机的传输寄存器TX;}    收到退出命令作结束程序的处理,进行t    cp连接的中断和内存的回收;}    图3  JTAGER主控程序4.4  HANDLER载入HANDLER由J    TAGER通过JTAG接口,采用Xscale特有的LDIC指令载入到目标机微型指令缓存中,在锁定指令缓存后不被目标系统感知。其载入步骤遵守Xscale芯片手册相关规定,伪码如图4所示。载入HANDLER函数(    …〕{    发送RESET和TRST信号,并等待36个J    TAG时钟周期;发出SELDCSR指令,写入DCSR寄存器,设置目标芯片为Hal    tMode;    等待2030个JTAG时钟周期;发出LDI    C指令,写入JTAG的IR中:打开HANDLER文件,    循环将它写入目标芯片的RX寄存器;等待15个J    TAG时钟周期,清除Halt Mode;目标芯片从地址0开始执行HANDLER;    }    图4往MiniIC载入HANDLER4.5调试命令处理函数调试命令的处理分两个过程:首先按照调试协议的规定    将相应数据包发送至目标芯片的RX寄存器;然后等待从TX寄存器返还的处理结果,此结果由HANDLER对目标芯片做相应处理后得到。以读内存为例,程序伪码如图5所示。目标机调试代理HANDLER按照调试协议和J    TAGER进读内存处理函数C〕    {    设置接受数据缓冲区:        向RX寄存器依次写入,pI,开始地址和长度;发出DBGTX指令,选中DBGTX数据寄存器,设置目标    芯片为Halt Mode;从TX寄存器依次读入从开始地址起始的指定长度的    内存内容;封装传送到GDB的数据包,并发送至指定的t    cp端口:}    图5读内存命令处理函数行调试命令与调试信息的交互,当调试事件发生时作为一个事件处理器,对目标芯片进行控制。需要注意的是,由于微型指令缓存大小的限制(2K), HANDLER代码量要尽量的精简,因此使用arm汇编编写,其程序流程伪码如图6所示。HANDLER程序流程(二){初始化HANDLER,使目标机处于就绪状态(Halt Mode) ;向JTAGER发送目标机就绪的信号;while(1){等待JTAGER发送相应调试指令;//通过mrc实现对RX的读出若接收到调试指令,进入相应的调试处理子程序;向JTAGER发送调试结果;/通过mcr实现对TX的写入}l图6  HANDLER程序流程注:HANDLER对TX及RX的读写需要遵循调试协议进    行握手同步。6结论    目前嵌入式交叉调试主要采取的是硬件调试器与调试程序相结合的调试方法,但硬件调试器的价格比较高,增加了系统开发成本。本文给出了一种特定的嵌入式交叉调试软件系统的设计及实现,并在工作使用中取得了满意的结果。参考文献:[1]IEEE 1149. IEEE standard test access port and boundary-scanarchitecture[S]. 2001.9-30.[2]Intel.  Intel. Xscale' microarchitecture for the PXA250 andPXA210 applications processors user's manual[S]. Intel Corpo-ration, 2002.109-154,120-124.[3]毛德操,胡希明.嵌入式系统—采用公开源代码和Strong-ARM/Xscale处理器[M].浙江:浙江大学出版社,2003.657.[4]Free Software Foundation Inc. Debugging with gdb fitfh editionI S1. 1998.126-144.一2819一5目标机调试代理HANDLER

因篇幅问题不能全部显示,请点此查看更多更全内容