基于SylixOS操作系统的统一开发调试器设计
2019-06-29朱寿羽陈洪邦李孝成
朱寿羽 陈洪邦 李孝成
摘 要:随着摩尔定律持续有效,传统的单核处理器逐渐被片上系统和多核处理器所取代,如何在多机多核环境中实现高效的开发调试成为我们所面临的问题之一。面向对系统可靠性要求极高的电力控制领域,设计并实现了一个基于SylixOS国产操作系统的统一开发调试器。首先对统一开发调试器的设计进行了简单介绍,然后在GDB基础上对多核调试的连接方法和多线程调试进行了改进。通过测试表明,此统一开发调试器能够在主流国产多核处理器上实现远程多核调试,可以显著缩短程序员的调试时间。
关键词:国产软硬件;远程调试;GDB;菊花链;多核调试
0引言
目前,智能电网日益受到国家的重视,其中研究的重点就是摆脱电网设备底层操作系统对国外操作系统的依赖,避免存在安全隐患。在南京翼辉信息独立负责“核高基”部分课题后,将扭转我国电网控制领域底层操作系统受制于人的局面。在片上系统和多核处理器带来丰厚回报的同时,如何针对多核处理器设计调试环境成为开发过程中的难题[1-2]。首先程序员在代码调试过程中所需的时间大幅度增加,而且冗余多机技术在电力控制领域普遍采用,但现有的大多数调试工具只是针对单核单处理器[3],因此本文基于SylixOS国产实时操作系统,设计并实现一个多机多核调试器,能够满足在国产龙芯、飞腾、智芯等处理器上的调试要求。
1调试器的总体设计
如图1所示,统一开发调试器的设计采用宿主机和目标机的开发调试环境[4-5],在宿主机上编写源代码,利用翼辉集成开发环境RealEvo-IDE在宿主机上编译生成可執行代码并下载到目标机上。目标机上运行配合宿主机端GDB的调试代理,实现对被调试程序的调试,调试代理和被调试程序都基于运行在龙芯、飞腾、智芯等国产处理器上的SylixOS操作系统。调试时,两端通过串口、网口或JTAG接口进行连接,GDB利用远程串行通信协议RSP与调试代理进行发送调试指令和接收调试反馈的通信。
1.1 GDB调试原理
基于GDB远程调试、设置断点、单步运行、读写寄存器等强大功能以及实时、开源、跨平台性好等特点成为此统一开发调试器主要依托的调试方案[6]。下面简述GDB和调试代理之间的调试过程[7-9]。如图2所示,GDB通过用户接口的循环机制接收到用户输入的调试指令,结合对命令进行统一管理的符号表进行解释和处理,生成调试代理可以识别的指令,然后将调试指令按照RSP协议固定的格式进行封装和发送。当调试代理通过连接通道接收到封装后的指令时,先进行指令的解析,然后根据指令生成调试事件并将此事件加入到调试事件链中等待处理,最后调试代理将调试结果反馈到宿主机端GDB。
1.2 RSP协议
GDB运行在PC端,调试代理运行在开发板上,所以两者之间需要在串口、网口或JTAG接口等通道的基础上实现数据的传输,远程串行通信协议RSP实现了这一功能,它能很好的实现命令的封装和传输以及其他必要的功能。RSP协议定义了GDB和调试代理之间通信时统一的数据包格式[10],此协议和大多数通信协议类似,传输的数据包包含了起始位,结束位以及校验和这三个部分,其格式如图3所示,
$为起始位,#为结束位,Data为数据部分,Checksum是将数据部分所有字符的ASCLL码取和后与256取模所得的校验和。当调试代理端在调试过程中接收到GDB端发送的消息时,就会对消息中的数据部分进行校验,并根据校验的结果给GDB端正确的回应。“+”表示校验和正确,可进行下一步传输,“-”表示校验和错误,需要进行重新校验。
2调试器的实现
2.1多核连接方法的实现
目前大多数芯片厂商生产的芯片只留出单一的JTAG接口,而没有考虑到处理器中内核的个数。一般开发者都是采用IEEE 1149.1标准菊花链连接方法来同步和处理多核的调试工作,如图4所示。
通过IPi的TDO与IPi+1的TDI相连的方式将多个IP核连接成一个串行的链,同时它们通过TAP控制器共享测试模式选择TMS、测试时钟TCK、测试复位TRST控制信号。当接收到扫描测试指令时,指令经过此连接方式进入到IP核TAP的指令寄存器中,从而能够达到在同一时间对多个IP核的TAP进行访问的目的,也可以同时获取各个IP核边界上的输入信号以及输出信号,此连接方式的运用对多核处理器的调试有很大帮助。但菊花链连接方式一个很大的缺点就是其与IEEE1149.1的标准不一致,而且此连接方式在多个IP核中选择特定的一个IP核进行调试会有很大的工作量。后期有人提出的TLM(TAP Linking Module)连接方法和并行多TAP控制器互连调试方法都存在一定的缺陷,不能实现多核调试 [11]。
本设计利用菊花链连接的长处,既能对多个IP核进行同时调试以满足观察多核之间互相配合情况的要求,又能对特定的某一个IP核进行调试。如图5所示,首先我们在硬件上增加了模式选择控制器Pattern_TAP,同时在软件上附加模式开关Switch_TAP,然后将接口进行封装。当调度器发出Select_TAP1指令时,指令经过解释后将选择Pattern_TAP的bypass数据寄存器,对TAP1的TMS产生一个选择信号, 进入单核调试模式,基于SylixOS操作系统的RealEvo-IDE调试软件对IP1进行调试。当调度器发出TRST_n的信号,对IP1的调试处于挂起状态。通过这种方式也可以实现对其余IP核TAP的调试。当调度器发出Select_DC命令时,Pattern_TAP将DCflag标志寄存器的值置0(默认状态下为1),进入Daisy-Chain菊花链互连多核调试模式,TAP1的TDI输入切入到Pattern_TAP的TDO输出,TAPn的TDO输出连接到JTAG接口的TDO上,而TAP之间通过菊花链的连接方法进行互连,这样统一开发调试器便可实现对多个IP核进行同时调试。调度器发出DC_EXIT命令时,将退出多核调试。通过增加模式选择控制器和模式开关这种方式,便可满足不同得调试需求。
2.2多线程的实现
GDB虽然支持多线程调试,但其all-stop模式在对个别线程进行单步调试时,可能会干扰到其余线程。而non-stop模式在某个线程运行断点时,GDB可能会停止整个进程。所以不难看出GDB对多线程调试的能力还是不完善的[12]。而此统一开发调试器是在调试代理的基础上进行改进,使其可以更优的实现对多线程的调试。改进的基本的方案是在命令中指定内核号、进程号和线程号,运行在开发板上的调试代理会根据此命令让特定内核上的线程运行调试.如图6所示,调试代理在接收并解析调试命令后,会从命令中获取到内核号、进程号和线程号,然后会进行相关信息的匹配,符合的情况下切换线程执行调试命令。例如收到next[123.1-6,124]>2的调试命令,调试代理将此命令翻译为让2号内核上的123号进程的1-6号线程及124号进程进行单步运行。
2.3调试功能测试
测试工作基于运行在宿主机上的RealEvo-IDE,其主要功能是 SylixOS 工程管理和程序调试,可以通过JTAG接口、网口或串口与目标机交互。RealEvo-IDE 的交叉编译器在宿主机上编译生成可以在目标机上运行的 SylixOS 镜像文件,统一开发调试器实现了宿主机与目标机之间多核调试。下面进行串口调试的测试,首先我们通过使用串口线将宿主机与目标机相连,如图7所示,在SylixOS Terminal中使用/dev/ttyS*参数输入“debug” 命令。
然后在RealEvo-IDE界面打开“Debugger→Connection”属性页,在“Type”下拉框选择“Serial”,在“Device”编辑框中输入 PC 端与设备相连的调试串口名称,在“Speed”编辑框设置调试串口波特率为115200,如图 8所示。
进行上面的操作后,便可进行调试,如查看内存内容。在“Memory”界面上点击加号按钮添加一个内存监控器,点击“OK”后,默认以十六进制显示该地址处的内存数据,点击“New Renderings…”按钮可以选择其他类型的显示方式,如9图中以“Floating Point”类型为例。
3 结束语
本文基于SylixOS国产操作系统和集成开发环境RealEvo-IDE,对多核调试的连接方法和GDB调试代理多线程调试进行改进,设计了一个统一开发调试器。该统一开发调试器能够良好地支持国产龙芯、飞腾、智芯等处理器的软件调试。但是,统一开发调试器调试功能和调试命令还需不断的完善和优化,给开发者带来更好的调试环境。
參考文献:
[1]蔡玉鑫. 嵌入式多核处理器核间通信方法的设计与实现[D].西安电子科技大学,2015.
[2]夏安祥,史浩山,阮园,刘红红.一种可重定向的交叉调试器实现方法[J].计算机应用研究,2011,28(10):3735-3738.
[3]王超. 嵌入式多核调试器的研究与实现[D].电子科技大学,2015.
[4]杨群,李笑天,何虎.面向Superscalar与VLIW混合架构处理器的调试器设计[J].计算机应用与软件,2015,32(05):84-87+163.
[5]霍峰.基于某国产操作系统的交叉调试技术的研究[J].电子测试,2018(Z1):90-91.
[6]姚文星. 基于JTAG的多核DSP调试系统的研究与实现[D].中国民航大学,2014.
[7]钟太聪. 基于多核的GDB远程任务级调试改进[D].电子科技大学,2010.
[8]韩斌,罗克露.基于aCoral操作系统远程调试器的设计[J].实验科学与技术,2013,11(05):38-40+70.
[9]陈必泉,黄承慧.GDBSERVER原理分析及其应用[J].计算机工程与设计,2005(03):746-749.
[10]李琮,王竹平,费晓琪.基于GDB的多核DSP平台调试器的设计与实现[J].微电子学与计算机,2015,32(01):72-75.
[11]王玥. 嵌入式SoC可调试设计的研究[D].浙江大学,2007.
[12]李鹏程. 面向嵌入式系统的多核调试工具研究与实现[D].电子科技大学,2017.