微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S698系列处理器软件调试工具V8MON的设计与应用

S698系列处理器软件调试工具V8MON的设计与应用

时间:11-20 来源:电子产品世界 点击:

,使用gcc编译器编译生成,链接了readline、pthread等系统库,并且对gdbserver、utils等开源软件包进行了移植。以下是工程的主Makefile文件内容:

V8MON内部可以分为3层,包括:命令层,调试驱动层和调试接口层。

(1) 命令层:由命令解析器组成,可以解析一般通用的用户命令以及GDB命令,例如:下载、运行等。

(2) 调试驱动层:实现特殊的命令,这些命令与目标处理器的构造相关。V8MON在启动的时候会扫描目标硬件,检测当前处理器类型及其配置,如果是支持的处理器,调试驱动层激活,可以执行特殊的调试命令。

(3) 接口驱动层:实现调试连接协议(DSU protocol),通过协议与目标系统的DSU单元通讯。

可以看到V8MON的主要工作就是命令/协议的解析以及传递,完成数据流由用户接口到目标系统之间的双向传输。下图指明V8MON内部的数据传递流程,方框中是各协议层数据的原始模型;示例条件为:gdb工作模式,通过串口连接目标系统,用户输入内存查看命令。

图3 V8MON内部数据流

4 应用举例

通过V8MON的命令行操作,用户可以开速、简捷的完成调试操作,V8MON的主要操作项如下文。

4.1 文件下载

通过load命令可以将一个SPARC V8体系的应用程序下载到目标系统中:

 

V8MON支持的文件格式为elf32-sparc。V8MON内建的ELF解析器,可以将程序的每个功能段正确的下载到对应的链接地址上,下载完成后程序运行时的%pc指针指向程序的入口地址。下载过程中,控制台将输出段地址、段字节大小、程序入口地址等信息。

4.2 程序运行

运行程序之前,必须先下载程序,而下载的程序必须确保是经过sparc-rtems或sparc-elf工具链编译得到。

 

目标系统的UART1用来输出应用程序的打印信息,这些信息并不能从V8MON的控制台显示,而如果使用-u参数启动V8MON,V8MON将初始化目标系统的UART1为回采模式,这样DSU单元可以读到从UART1输出的信息,进而可以在V8MON控制台上把这些信息显示出来。

4.3 插入断点和监测点

程序下载完后,可以通过break或hbreak命令设置断点,其中break命令用来添加一个软断点(ta 1),而hbreak命令是通过IU单元的watchpoint寄存器添加插入一个硬断点,在调试只读代码(如程序在ROM中运行)时只能使用硬断点。

一个断点只能作用于一个字的地址,当程序运行到此地址时,系统切换到调试模式。软断点可以设置在基于RAM的代码段的任何位置,包括禁止trap的区域(如trap处理函数中);S698处理器提供两个硬断点,设置硬断点将冻结系统的trace buffer。

例如添加断点命令:


 
  查看寄存器

在命令行下可以随时输入reg命令查看所有窗口寄存器的当前值:

也可以使用 reg wn命令查看指定窗口寄存器的值,其中n表示窗口号。使用float指令可以查看FPU寄存器的值(存在FPU运算单元的前提下)。

4.4 查看内存

可以通过mem命令查看任何内存地址上的内容,mem命令的参数包括目标地址和长度,这两个参数都可以缺省。如果符号表被加载,可以使用文本符号代替地址。

 

用户也可以通过disas命令将内存中的内容反汇编成SPARC V8机器指令进行显示。

4.5 使用trace buffer

处理器中的trace buffer用来保存最近的执行指令以及最近的AHB总线上的传输数据,V8MON启动时自动使能trace buffer,启动后用户也可以通过tmode命令使能或禁止trace buffer。ahb/inst/hist分别用来显示trace buffer中的内容。trace buffer在调试时可以起到辅助作用。

4.6 多处理器支持

在多核处理器(例如S698P4)系统中,可以使用cpu命令来切换各处理器的调试状态。在对称多核处理器中,处理器的编号为0~n-1,n表示处理器个数。每个处理器可以设置为使能、禁止两种状态,处理器使能后,将响应run、cont、go等命令。当处理器禁止时,将处于挂起状态,不响应V8MON的任何指令。使用cpu enable n 命令将使能对应处理器,cpu disable n 命令将禁止对应处理器。系统允许同时有多个处理器被使能,但同时只能有一个处理器被激活。所有的调试命令如查看寄存器、增加断点等只对被激活的处理器有效。

 

可以使用gdb来调试多处理器系统,gdb连接后,当前被激活的处理器负责接收gdb命令。

5 结束语

调试器不仅是软件除错的工具,也是硬件除错必不可少的工具,选好调试器、用好调试器、理解调试器的原理对嵌入式开发工作都大有裨益。调试技术的理论基础并不复杂,但是调试本身却是一门实践性非常强的技术,只有在不断的实际操作中才能取得进步,希望本文的讲解能够起到抛砖引玉的作用,引导读者进入S698调试开发之门。

参考文献:

[1] 珠海欧比特控制

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top