嵌入式调试大杀器——PS Trace使用指南

作者:Terry Ni,AMD工程师;来源:AMD开发者社区

一、引言

        在嵌入式系统调试工具中, trace工具通常是解决一些疑难问题的最好工具。它能够在不破坏和修改原有运行过程的情况下,直接抓取到执行过程。这对调查一些异常挂起,异常状态或是特殊工况提供了非常好的抓手。

        在我们zynqMP或者Versal的PS部分集成有ARM CoreSight模块,这个模块就是用来实现我们trace功能的核心。其结构如下图所示:

1.png

二、安装OpenCSD

         ARM Coresight抓trace是遵循"Arm® Embedded Trace Macrocell Architecture Specification"规范,其解析一般是需要配合ARM DS开发套件来使用。但是为了使coresight具有更大的开放度,ARM推出了openCSD。用户可以使用这个开源库来解析trace文件。

1)下载openCSD源文件

从git链接中下载openCSD源码 https://github.com/Linaro/OpenCSD/tree/master

2)编译openCSD库

进入到源码的OpenCSD/decoder/build/linux/目录下,用make install将其编译,并安装到用户指定的路径下。例如:

make install PREFIX="/my_app/openCSD"

3)把OpenCSD安装路径设置到系统中,例如:

export OPENCSD_PATH=“/my_app/openCSD”

4)在Vitis工具中使能PS trace

点击Vitis菜单,选择New Featrue Preview

2.png

选择PS Trace,并点击“Enable”

3.png


三、PS trace的使用方法

1)在Vitis Debug环境下使用

在debug配置界面中,使能trace功能,并设置trace内存保存地址,大小以及输出文件的路径位置。

4.png

当你进入debug调试界面之后,你可以右击标记栏,添加trace的起始中断位置,以及结束中断位置。

5.png

6.png

7.png

当你通过debug工具(全速执行,单步等)完成程序运行后,trace文件也会相应的生成完毕。

8.png

接着,可以通过Vitis菜单下PS trace->Open PS Trace工具来直观的追踪刚刚记录下来的trace文件。

9.png

10.png10.png

2)在外部XSCT环境下使用

        通常在实际应用过程中,通过trace功能是为了捕捉一些异常板上出现的异常情况,在这种情况下,并不能借助Vitis debug环境来复现,并且有些情况下,不清楚异常错误的位置,也可能APU已经crash。这个时候我们可以通过XSCT的方式来使用trace功能。

首先,在XSCT中加载trace相关的指令函数。

11.png

不同的device器件需要加载的tcl脚本不一样,具体可以在Vitis/2024.2/scripts/vitis/util/目录下查看。

12.png

接下来,还是通过XSCT工具,下载你的elf程序,或者通过stop指令将已经运行的程序暂停。

13.png


当程序进入暂停状态后,你用enable_trace <core name> <buffer address> <buffer size>  命令启动ps trace

例如:

14.png


接着,你可以通过bpadd命令,在程序中的某个执行地址上设置一个断点,或者等到程序异常停止后,或者随时用stop指令暂停程序与运行。程序处于暂停或者crash状态后,就可以通过write_trace_output <core name> <buffer address> <buffer size> <output path>命令来获取trace文件。

例如:

15.png

最后,你可以通过Vitis菜单下PS Trace -> Generate PS Trace工具来生成解析后的trace文件。例如:trace_file.decode.txt

16.png

17.png

18.png


总结:

PS trace工具是嵌入式调试过程中的一项大杀器,对于偶发性异常问题的排查可以起到关键性的作用。利用Vitis工具中的ps trace,可以在实际应用过程中更加高效的排查问题,减少成本,提高效率。