1 / 14

清华大学综合论文训练答辩

清华大学综合论文训练答辩. 题目:基于 EJTAG 的交叉调试器开发 报告人:葛宏 项目合作成员:苏宏谋、鄂威 指导教师:田金兰、王生原. 背 景. 交叉调试器是一种分布式的系统。调试器运行在宿主机端,而被调试的可执行代码运行在目标机端,宿主机和目标机使用某种通信协议进行通信。 基于 EJTAG 的交叉调试器是 CPU 项目的一个组成部分,目的是在监控程序、操作系统的移植过程中提供调试功能。 基于 EJTAG 的交叉调试器的开发工作分两步进行。第一步,实现一个汇编级的交叉调试器;第二步,实现一个高级语言级的交叉调试器。. 主要工作. 了解交叉调试器的发展现状

leone
Download Presentation

清华大学综合论文训练答辩

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 清华大学综合论文训练答辩 题目:基于EJTAG的交叉调试器开发 报告人:葛宏 项目合作成员:苏宏谋、鄂威 指导教师:田金兰、王生原

  2. 背 景 • 交叉调试器是一种分布式的系统。调试器运行在宿主机端,而被调试的可执行代码运行在目标机端,宿主机和目标机使用某种通信协议进行通信。 • 基于EJTAG的交叉调试器是CPU项目的一个组成部分,目的是在监控程序、操作系统的移植过程中提供调试功能。 • 基于EJTAG的交叉调试器的开发工作分两步进行。第一步,实现一个汇编级的交叉调试器;第二步,实现一个高级语言级的交叉调试器。

  3. 主要工作 • 了解交叉调试器的发展现状 • 深入研究EJTAG规范 • 设计并实现基于EJTAG的汇编级交叉调试器的EJTAG模块部分 • 设计基于EJTAG的高级语言级交叉调试器 • 总结目前的工作,并提出下一步的方案

  4. EJTAG概述

  5. 0xBFC0 0480, 执行固定的例外处理指令 ProbTrap=0 EJTAGBrk=1, 触发debug例外 PC = 0xFF20 0200 dmseg内 PC -> Address ProbTrap=1 处理器设置PrAcc=1; PRnW=0;Psz[1:0]=xx; 测试PrAcc 选择Address, 移出其内容 检测PrAcc=1 (3) 选择Data, 移入对应Address的指令 PrAcc=0 执行指令,PC+=4 (2) (1) EJTAG调试的流程

  6. EJTAG调试的流程 • Load类指令用于处理器外部到处理器内部的数据传输。如果读入的指令是Load类指令,比如LW,LH,LB.而且地址在dmseg范围里,则: • PC值变为load指令的操作数地址 • 移入的是期望的数据 • 由于延迟槽的存在,需要检测Address地址的值以判断是否是load指令的操作数地址 • Store类指令用于处理器内部到处理器外部的数据传输。如果读入的指令是Store类指令,比如SW,SH,SB.而且地址在dmseg范围里,则: • PC值变为store指令的操作数地址 • 移出期望得到的数据 • 由于延迟槽的存在,需要检测Address地址的值以判断是否是store指令的操作数地址

  7. 1.1 HCI(人机界面) 调试请求 调试响应 1.2调试命令打包 及响应的处理 Debugger Command Request GDB Remote serial protocol Responce 2.1调试命令解包、处理及响应的返回 调试请求 调试响应 2.2 EJTAG信号的发出/接收 TCK, TMS, TDI TRST* TDO Board 基于EJTAG的汇编级调试器

  8. 基于EJTAG的汇编级调试器 • 1. 断点管理(指令执行+数据读写) • Add增加断点 • Remove删除断点 • List列出断点 • 2. 信息 • 寄存器 查看所有寄存器的内容(通用+CP0) • 内存 查看指定地址的内存数据 • 3. 执行 • 单步 • 多步(在单步的基础上扩充) • 连续(到断点处停止) • 4. 装入目标代码 • 向目标机装入目标代码

  9. 遇到的困难和解决 • EJTAG方案的选择 • 将所有要读写的寄存器串联的方案 优点:软件和硬件实现比较容易 缺点:对CPU硬件实现和性能开销大 • TAP使用外部微处理器实现 优点:不增加CPU的工作量 缺点:要在开发板上实现TAP,不符合EJTAG规范 • TAP在CPU内部实现 优点:符合EJTAG规范,对开发板只需要增加从CPU引 出4根信号线 缺点:增加CPU的工作量

  10. 遇到的困难和解决 • 现场保存的问题 由于MIPS指令集的load, store指令都需要一个寄存器作为基址寄存器,因此,为了在EJTAG调试的过程中不破坏寄存器现场,必须有一个不用的空闲寄存器用来存放这个基址寄存器的值,以便在调试结束后恢复基址寄存器。 • 利用某个被调试程序中不用的空闲通用寄存器 • 利用CP0寄存器中的DESAVE寄存器 • 延迟槽对Load-Store指令的影响 Load-Store指令分两拍进行。第一拍,取指令并分析。第二拍,将指定地址的数据装入寄存器/将寄存器的数据装入指定地址。由于延迟槽的存在,这两拍中间会有间隙。 • 插入nop指令,检测Address寄存器 • 死循环 上述操作有可能陷入死循环 • 循环一定次数不成功,则重新进行Load-Store操作。重复若干次不成功,则Load-Store失败,退出调试过程

  11. 基于EJTAG的高级语言级调试器 • 体系结构和基于EJTAG的汇编级调试器基本相同,差别主要在对调试命令的处理部分。 • 我负责的EJTAG处理部分基本不需要改动,只需改动I/O模块即可

  12. 未来工作展望 • 基于GDB的支持EJTAG的交叉调试器 • 操作系统调试器 KDB和KGDB的研究和应用。

  13. 衷心感谢 田金兰老师 王生原老师 苏宏谋师兄 鄂威同学 教研组其他的老师和同学

  14. 谢谢大家,欢迎提问!

More Related