面向DSP的嵌入式远程调试环境设计*
2016-07-12贺红卫
王 品,刘 冰,贺红卫
(中国兵器科学研究院,北京 100089)
面向DSP的嵌入式远程调试环境设计*
王品,刘冰,贺红卫
(中国兵器科学研究院,北京100089)
摘要:针对目前DSP软件开发环境存在的不足,提出了基于GDB构建远程调试环境的方案。介绍了GDB远程调试原理,详细讨论了远程调试环境设计中关键技术——调试服务器的设计。以TMS320C674x DSP为目标平台,对方案予以实现,针对C674x DSP特有的可变长指令和超长指令字架构,描述了调试服务器相应的实现方法。实验结果表明,基于GDB构建的面向DSP的嵌入式远程调试环境能够满足DSP应用软件调试的需要。
关键词:DSP,GDB,远程调试,调试服务器
0 引言
近年来,数字信号处理器(Digital Signal Processor,DSP)由于其灵活、稳定、重复性好、可大规模集成和易于实时实现等优点,被广泛应用于雷达、语音、通信、图像处理等诸多方面[1],在火指控系统中也发挥着重要作用[2]。目前软件开发人员使用DSP厂商提供的集成环境作为DSP软件调试环境,需要配备专用的仿真器,成本较高,一般只支持Windows操作系统作为调试主机,并且核心技术都掌握在少数DSP厂商手中。由于上述问题的存在,特别是国家对武器系统软硬件安全可控要求的不断提高,使得研究面向DSP平台的嵌入式远程调试环境设计技术具有重要意义。基于GDB的远程调试环境具有成本低、不受厂商具体调试协议限制、安全可控的特点,既支持Windows操作系统作为调试主机,也支持Linux操作系统作为调试主机[3],是实现DSP软件调试的一种可选方案。
1 GDB远程调试原理
GDB的全称为GNU Debugger,是GNU开源组织发布的支持多种目标平台的程序调试工具。GDB远程调试系统由调试主机GDB环境、调试服务器和通讯信道3部分组成。GDB也称为主调试器,运行在调试主机中,面向调试人员,实现调试功能,而GDB的调试目标是目标机中的应用程序。要完成GDB和应用程序的交互,目标机需要有一段程序充当GDB和应用程序的中介,为GDB实现调试功能提供底层支撑,实现数据传输、执行GDB命令、获取和控制应用程序状态等功能,它就是调试服务器。GDB和调试服务器之间采用远程串行协议(RSP)交换数据。有了GDB和调试服务器,还需要通讯信道将两者连接起来,如网口、串口等。远程调试原理如图1。
图1 远程调试原理
相对于本地调试,远程调试具有以下特点:
①主调试器和被调试程序运行在不同的计算机上,通过一定的通信方式将调试主机和目标机相连,绕开了目标机上软硬件资源有限的限制,为用户提供强大的调试环境。
②目标机上无需操作系统支持。目标机上即使运行操作系统,也主要是用于嵌入式应用的支撑,而不是用于目标机的开发环境平台。
③本地调试只能调试相同指令集的程序,而远程调试可以调试与主机不同指令集的程序。
④由于主调试器和被调试程序的分离,不可避免地引入了通信开销,对调试效率有一定影响。
典型的远程调试过程如图2所示。
图2 远程调试过程
2 调试服务器设计
构建基于GDB的嵌入式远程调试环境,主调试器、目标机调试服务器、通讯信道缺一不可。本文采用串口作为通讯信道,操作简单。目前,GDB已经提供了对TI DSP的支持,只需在官网下载GDB源码,使用相应编译选项进行编译,即可生成针对目标平台的主调试器,因此,本方案的关键技术是调试服务器的设计。
调试服务器作为目标系统上运行的一段程序,功能如下:
①在应用程序发生异常时,作为中断服务程序处理异常,与主调试器交互信息,通知用户。
②执行调试器的命令,包括寄存器访问、修改;目标机内存访问、修改;设置、删除断点;单步、恢复应用程序运行等[4]。
根据上述各项功能需求,调试服务器的实现方法如下:
①通过异常机制实现单步和断点功能,中断被调试程序。实现调试服务器的关键是协调调试服务器与被调试程序获得目标机控制权的时机。调试服务器以插入“陷阱指令”的方法使目标机产生异常,进入异常处理程序,同时,将调试服务器设计为异常处理程序,对软中断或未定义指令异常进行处理,收到continue或step命令后,将断点或下一条指令地址处的指令替换为软中断指令或未定义指令,恢复被调试程序的上下文,使被调试程序获得处理器控制权,从挂起处继续运行;当被调试程序运行至被替换为软中断指令或未定义指令的地址处时,目标机产生中断或异常,开始执行异常处理程序,从而使调试服务器获得目标机的控制权,在异常处理程序中,保存被调试程序的上下文,以供GDB查询和恢复应用程序的执行。通过这种方式,调试服务器实现了对被调试程序执行过程的控制,并能够收集到程序挂起时的上下文信息。
②执行调试器的命令。寄存器访问和修改,是通过在进入调试服务器时,首先保存被调试程序上下文实现的,当收到读寄存器命令时,调试服务器将先前保存的寄存器值返回给主机端;在恢复被调试程序运行前,要恢复先前保存的、可能被GDB修改的被调试程序上下文,从而实现寄存器的修改。查看、修改目标系统内存的命令通过直接读写内存实现。单步运行功能是通过在下一条指令地址处插入软中断或者未定义指令,使处理器产生异常实现的。设置断点功能则是通过在断点地址处插入软中断或者未定义指令,使处理器产生异常实现的。
实现了上述功能,在调试主机编译生成的应用程序就能够通过GDB和调试服务器的配合,下载到目标系统中进行调试,验证应用程序的正确性。
根据不同体系结构处理器的特点,调试服务器的实现方式存在一定的差别。在对远程调试技术进行研究的过程中可以看到,目前已经出现了面向ARM、i386等体系结构处理器的调试服务器[5],而对面向DSP的调试服务器的研究还很少见。支持可变长指令和并行指令是C674x DSP与其他体系结构处理器的不同之处,这一特点增加了计算下一条指令地址和替换指令的难度,下文围绕可变长指令和并行指令的处理,对C674x DSP调试服务器的实现进行介绍。
3 TMS320C674x系列DSP简介
TMS320C674x是TI公司推出的C6000平台上的定点DSP芯片,具有低成本,低功耗和高性能的特点,有强大的计算能力和快速中断响应处理能力。该芯片拥有可变长指令体系和超长指令字架构,可变长指令体系提供了灵活的DSP 16位精简指令和32位指令两种指令集,为程序员编程提供了便利条件。超长指令字架构是指在单一时钟周期执行多条指令的高性能架构,也可以叫作并行执行指令架构。该芯片既具有数字信号处理能力,又具有强大的事件管理能力和嵌入式控制功能,适用于有大批量数据处理的测控场合,如工业自动化控制、电力电子技术应用、智能化仪器仪表及电机系统等[1]。
4 可变长指令与并行指令处理
4.1指令长度计算
TMS320C674x DSP指令可分为16位精简指令和32位指令。在中断被调试程序执行时,采用的是插入“陷阱”的方式,而16位精简指令和32位指令占用的内存空间和操作码均不相同。如果要插入“陷阱”处的指令是32位指令,则插入SWE(软中断)指令,否则插入16位非法指令。所以在调试服务器进行应用程序调试时,首先需要判断被调试程序当前执行的指令是16位精简指令还是32位指令,然后根据各自的规则作出相应的处理。判定地址addr处指令位数的方法如下:
①计算addr地址处指令所属取指包包头地址pAddr,pAddr为满足下列条件的最小值:(pAddr+4)%32==0,pAddr>=addr。
②判断pAddr地址处指令pIns是不是包头,如果pIns的高4位不是0xe,说明本条指令不是包头,addr处指令位数为32位,流程结束。
③计算pAddr地址处指令在所属取指包中的序号num,num=(pAddr%32)/4。
④获得pIns中num对应的Layout位flag,flag= (pIns>>(21+ num))&0x1,如果flag为1,addr处指令位数为16位,否则为32位。
4.2并行指令判断方法
并行指令是在单一时钟周期内同时执行的指令。在进行指令替换时,需要针对并行指令进行处理,否则会导致指令重复执行等错误。
判断某地址处指令与下一条指令是否并行执行采用的方法是:首先判断该指令是16位指令还是32位指令。如果是32位指令,则读取指令操作码P标志位(第0位),如果该位为1,说明下一条指令与当前指令是并行指令;反之,则不是并行指令。不同于32位指令,16位指令的并行标志位不包含在指令中,而是包含在取指包包头中。如果该指令是16位指令,则计算当前指令是所属取指包中的第几条指令,读取包头中相应的并行标志位,判断下一条指令与当前指令是否并行指令。
4.3调试服务器处理流程
目标机发生异常、调试服务器获得处理器控制权后,处理流程如下:
①保存被调试程序上下文,将软中断和非法指令恢复为之前保存的合法指令;
②通过读取IERR(内部异常报告寄存器)状态,根据16位精简指令和32位指令产生异常的机制和类型不同,判断是16位非法指令还是32位软中断指令引起的异常,由此得出被调试程序将要执行的指令的位数;
③按照16位精简指令和32位指令两种情况分别调整PC值。因为DSP处理器认为未定义指令是没有被处理器执行的指令,而软中断指令是被执行过的指令,所以在调试服务器进一步处理前,若应用程序当前指令是16位精简指令,则当前指令即为应用程序恢复执行后的应执行的第一条指令,不需要调整PC值;若当前指令是32位指令,调整PC值为PC值减4,使PC-4处指令成为应用程序恢复执行后执行的第一条指令;
④按照RSP协议通知GDB应用程序执行被中断;
⑤接收GDB命令。若接收到单步执行命令‘s’,转到步骤⑥。若接收到恢复运行命令‘c’,转到步骤⑧,否则执行并应答GDB命令后,转到步骤⑤;
⑥根据指令编码规则及并行指令判断方法分析当前指令,计算与当前指令不并行的下一条指令的地址,获得与当前指令并行的所有指令的地址及内容,根据16位精简指令和32位指令两种情况逐条判断是否跳转,如果有跳转指令则得出跳转目标地址;
⑦计算出nextAddress(下一条指令地址)和jumpAddress(跳转目标地址)后,替换目标地址处指令。替换nextAddress处指令时,根据16位精简指令和32位指令分别处理;
a. nextAddress处是32位指令时,替换nextAd-dress处为SWE指令;
b. nextAddress处是16位精简指令时,除需替换nextAddress处指令为16位非法指令外,还需替换nextAddress处指令所在取指包包头的指令,将并行标志位清零,确保nextAddress处指令不与nextAddress处指令的下一条指令并行执行;
如果即将执行的指令中包括跳转指令,还需要替换jumpAddress处的指令,同样根据16位精简指令和32位指令两种情况分别处理;
a. jumpAddress处是32位指令时,替换jumpAddress处为SWE指令;
b. jumpAddress处是16位精简指令时,除需替换jumpAddress处指令为16位非法指令外,还需替换jumpAddress处指令所在取指包包头的指令,将并行标志位清零,确保jumpAddress处指令不与jumpAddress处指令的下一条指令并行执行;
⑧恢复被调试程序上下文,返回被调试程序产生异常处继续执行。
处理流程图如图3所示。
4.4实验验证
将调试主机与目标平台通过串口连接,对TMS320C674x DSP目标平台进行调试。实验结果显示,调试系统能够实现设置断点、单步、查看或修改变量值、查看或修改通用寄存器等源码级调试功能,调试界面如图4所示。采用本方案构建的面向DSP的嵌入式远程调试环境能够满足DSP应用软件调试的需要。
5 结论
本文讨论了基于GDB的DSP远程调试环境的实现方案,并详细介绍了其中的关键技术——调试服务器的设计和实现,在TMS320C674x DSP上验证了该远程调试环境的正确性。本方案设计的调试环境可与免费开源、功能强大的ECLIPSE框架无缝集成,借助GNU的GCC编译器,即可构成一个图形化的面向DSP平台的集成软件开发环境,实现一体化的工程管理、编译链接和远程调试功能,满足集成软件开发环境安全可控的需要。
参考文献:
[1]TEXAS I I.TMS320C6000系列DSP的CPU与外设[M].卞红雨,纪祥春,译.北京:清华大学出版社,2007.
[2]张逊,邓雅娟,王国刚. DSP在舰炮火控系统中的应用[J].指挥控制与仿真,2006,28(2):82-84.
[3]王钦骞.嵌入式系统调试器的研究与实现[D].成都:电子科技大学,2006.
图3 调试服务器处理流程图
图4 远程调试界面
[4]况阳,雷航,詹瑾瑜. USB设备端驱动的研究及在GDB远程调试中的应用[J].计算机应用研究,2011,28(10):3770-3772.
[5]程君,刘云霞.基于ARM平台的GDB远程调试环境的研究与实现[J].科技资讯,2007,17(7):26-27.
Design of Embedded Remote Debugging Environment for DSP
WANG Pin,LIU Bing,HE Hong-wei
(Academy of Chinese Weapon Science,Beijing 100089,China)
Abstract:Due to the shortcomings exist in software development environment for DSP,a solution to build remote debugging environment on GDB is proposed. After describing the GDB remote debugging principles,the design of debug server is discussed in detail which is key technology of remote debugging environment. The solution is implemented on TMS320C674x DSP target platform,and the implement method of debug server for variable -width instructions and VLIW architecture is described. Experimental results show that the embedded remote debugging environment for DSP built on GDB is able to meet the needs of DSP application software debugging.
Key words:DSP,GDB,remote debug,debug server
中图分类号:TP311.5
文献标识码:A
文章编号:1002-0640(2016)05-0137-04
收稿日期:2015-04-27修回日期:2015-05-27
*基金项目:国家科技重大专项基金资助项目(2013ZX01020-004)
作者简介:王品(1984-),男,吉林松原人,硕士,工程师。研究方向:嵌入式软件开发环境。