清华大学综合论文训练答辩
This presentation is the property of its rightful owner.
Sponsored Links
1 / 14

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


  • 60 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


4742198

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

题目:基于EJTAG的交叉调试器开发

报告人:葛宏

项目合作成员:苏宏谋、鄂威

指导教师:田金兰、王生原


4742198

背 景

  • 交叉调试器是一种分布式的系统。调试器运行在宿主机端,而被调试的可执行代码运行在目标机端,宿主机和目标机使用某种通信协议进行通信。

  • 基于EJTAG的交叉调试器是CPU项目的一个组成部分,目的是在监控程序、操作系统的移植过程中提供调试功能。

  • 基于EJTAG的交叉调试器的开发工作分两步进行。第一步,实现一个汇编级的交叉调试器;第二步,实现一个高级语言级的交叉调试器。


4742198

主要工作

  • 了解交叉调试器的发展现状

  • 深入研究EJTAG规范

  • 设计并实现基于EJTAG的汇编级交叉调试器的EJTAG模块部分

  • 设计基于EJTAG的高级语言级交叉调试器

  • 总结目前的工作,并提出下一步的方案


Ejtag

EJTAG概述


Ejtag1

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调试的流程


Ejtag2

EJTAG调试的流程

  • Load类指令用于处理器外部到处理器内部的数据传输。如果读入的指令是Load类指令,比如LW,LH,LB.而且地址在dmseg范围里,则:

    • PC值变为load指令的操作数地址

    • 移入的是期望的数据

    • 由于延迟槽的存在,需要检测Address地址的值以判断是否是load指令的操作数地址

  • Store类指令用于处理器内部到处理器外部的数据传输。如果读入的指令是Store类指令,比如SW,SH,SB.而且地址在dmseg范围里,则:

    • PC值变为store指令的操作数地址

    • 移出期望得到的数据

    • 由于延迟槽的存在,需要检测Address地址的值以判断是否是store指令的操作数地址


Ejtag3

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的汇编级调试器


Ejtag4

基于EJTAG的汇编级调试器

  • 1. 断点管理(指令执行+数据读写)

    • Add增加断点

    • Remove删除断点

    • List列出断点

  • 2. 信息

    • 寄存器查看所有寄存器的内容(通用+CP0)

    • 内存查看指定地址的内存数据

  • 3. 执行

    • 单步

    • 多步(在单步的基础上扩充)

    • 连续(到断点处停止)

  • 4. 装入目标代码

    • 向目标机装入目标代码


4742198

遇到的困难和解决

  • EJTAG方案的选择

    • 将所有要读写的寄存器串联的方案

      优点:软件和硬件实现比较容易

      缺点:对CPU硬件实现和性能开销大

    • TAP使用外部微处理器实现

      优点:不增加CPU的工作量

      缺点:要在开发板上实现TAP,不符合EJTAG规范

    • TAP在CPU内部实现

      优点:符合EJTAG规范,对开发板只需要增加从CPU引出4根信号线

      缺点:增加CPU的工作量


4742198

遇到的困难和解决

  • 现场保存的问题

    由于MIPS指令集的load, store指令都需要一个寄存器作为基址寄存器,因此,为了在EJTAG调试的过程中不破坏寄存器现场,必须有一个不用的空闲寄存器用来存放这个基址寄存器的值,以便在调试结束后恢复基址寄存器。

    • 利用某个被调试程序中不用的空闲通用寄存器

    • 利用CP0寄存器中的DESAVE寄存器

  • 延迟槽对Load-Store指令的影响

    Load-Store指令分两拍进行。第一拍,取指令并分析。第二拍,将指定地址的数据装入寄存器/将寄存器的数据装入指定地址。由于延迟槽的存在,这两拍中间会有间隙。

    • 插入nop指令,检测Address寄存器

  • 死循环

    上述操作有可能陷入死循环

    • 循环一定次数不成功,则重新进行Load-Store操作。重复若干次不成功,则Load-Store失败,退出调试过程


  • Ejtag5

    基于EJTAG的高级语言级调试器

    • 体系结构和基于EJTAG的汇编级调试器基本相同,差别主要在对调试命令的处理部分。

    • 我负责的EJTAG处理部分基本不需要改动,只需改动I/O模块即可


    4742198

    未来工作展望

    • 基于GDB的支持EJTAG的交叉调试器

    • 操作系统调试器

      KDB和KGDB的研究和应用。


    4742198

    衷心感谢

    田金兰老师

    王生原老师

    苏宏谋师兄

    鄂威同学

    教研组其他的老师和同学


    4742198

    谢谢大家,欢迎提问!


  • Login