时间:2024-04-25
江雪+钟逸+邵晨龙+曹子钰+李洋
摘要:本文简述了EJTAG的相关基础概念,探究了使用EJTAG对操作系统内核进行调试的可行性。
关键词:EJTAG;内核调试
1 前言
在gdb里调试普通应用程序时,执行r命令,程序才会运行起来。而直到程序遇到事先设置的断点,它才会停下。然而,对操作系统内核调试却不能遵循这个流程,因为系统启动后,内核就已经在运行了。本文简述了EJTAG的相关基础概念,探究了使用EJTAG对操作系统内核进行调试的可行性。
2 EJTAG介绍
EJTAG(Enhanced Joint Test Action Group)是MIPS公司根据IEEE 1149.1协议的基本构造和功能扩展而制定的规范,是一个硬件/软件子系统,在处理器内部实现了一套基于硬件的调试特性,用于支持片上调试。
EJTAG由ARM的JTAG发展而来,而JTAG的设计,原意便是对制作好的CPU进行测试。因此,它“够底层”,能够在不依赖于上层操作系统的前提下,直接对CPU进行操作,令CPU执行指定的机器码指令。而能够控制CPU执行特定指令,理论就可以让电脑执行任意操作,当然也就可以读写寄存器,读写内存,设置断点。
3 调试模式
要想让内核停止下来,只有使用EJTAG进入调试模式。调试模式下,内核停止运行,系统可供EJTAG观察和调试,类似于gdb调试应用程序时进入断点的情况。
要想使用EJTAG进入调试模式,比较常见的方式有这么几种:CPU执行SDBBP指令、EJTAG断点寄存器置位、单步调试等。这里让正在运转的内核进入调试模式,一般采用将EJTAG断点寄存器置位的办法。
其实在gdb中,也可以通过信号使程序暂停运行以供调试。而较为成熟的IDE,一般也都提供了调试时暂停的功能,比如开源跨平台的Eclipse。
总之,调试模式是一种程序停止运行的状态。在调试模式这一时间停止的状态下,才能对内核进行各种状态的观察,才能控制内核的运行情况。本文中的EJTAG调试均是在調试模式下完成的。
4 边界扫描
边界扫描是EJTAG调试中一个很重要的概念,其特点是在待测试芯片的每个引脚上添加一个移位寄存器,由于移位寄存器在芯片的边界上,所以被称作是边界扫描寄存器(Boundary-Scan Register Cell)。
正常工作的时候,这些移位寄存器是透明的,并不会对芯片的输入输出造成任何影响;而在调试的时候,配合TAP状态机的各种状态,移位寄存器可起到直接控制引脚的输入输出。简单的说,Capture-DR/Capture-IR状态和Update-DR/Update-IR状态,可以将引脚上的数据捕获到移位寄存器,或是从移位寄存器更新引脚上的数据。而在Shift-DR/Shift-IR状态下,这些移位寄存器可以通过TDI和TDO进行数值的移位输入输出,从而设置或是读取芯片各引脚的电平。
5 TAP原理
对边界扫描链的控制主要是通过TAP(Test Access Port)控制器来完成的。EJTAG标准中定义了TAP控制器,可以使EJTAG通过状态机实现相对比较复杂的功能。通过给TMS引脚输入不同的信号,即可让TAP控制器进入不同的状态,实现特定的功能。
TAP控制器的状态转化图如图1所示。可以看到图中有许多以DR和IR为后缀的状态,这些状态表示当前正对数据寄存器(Data Register)或指令寄存器(Instruction Register)进行操作。由于这两类状态的原理类似,只是面向的操作对象不同,因此下面对状态转换图中的重要状态进行介绍时,若状态以DR/IR为后缀,仅以数据寄存器(Data Register)为例来进行描述。
简单的说来,操作TAP控制器一般是如下流程(以Run-Test/Idle起,Run-Test/Idle止为例):先通过设置TMS进入Shift-IR状态(TMS依次输入1100即可,下同),设置五位的IR寄存器来选择指令;然后经过Update-IR返回Run-Test/Idle。再之后进入Shift-DR来设置DR寄存器来设置刚刚所选指令的值,最后经过Upadate-IR返回Run-Test/Idle。比如,在Shift-IR状态下,TDI输入01010,可选中EJTAG控制寄存器;随后在Shift-DR状态下,TDI即可设置EJTAG控制寄存器的值。
6 小结
本文讲述了EJTAG的基础知识,并逐步讲述了设置EJTAG控制寄存器的方式。按照此种思路,能够实现系统内核的指令集调试乃至源码级调试,验证了EJTAG调试系统内核的可行性。
参考文献
[1]中国科学院计算技术研究所,龙芯3A处理器用户手册之多核处理器架构、寄存器描述与系统软件编程指南
[2]中国科学院计算技术研究所,龙芯3A处理器用户手册之GS464 处理器核
[3]金辉,华斯亮,张铁军等.基于JTAG标准的处理器片上调试的分析和实现.微电子学与计算机,2007,24(6):116-119,122.DOI:10.3969/j.issn.1000-7180.2007.06.034
[4]刘旭伟.FPGA可配置端口电路的设计,西安电子科技大学,2008
[5]OPEN-JTAG开发小组,ARM JTAG调试原理
[6]韩青.多核调试新方法探讨.电子产品世界,2007,(12):114-115.DOI: 10.3969/j.issn.1005-5517.2007.12.019
[7]吴疆,田金兰与张素琴,面向多目标机的交叉调试器的研究与设计.清华大学学报(自然科学版),2003.43(1):第101-104页endprint
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!