
01
引言
在嵌入式系統調試工具中, trace工具通常是解決一些疑難問題的最好工具。它能夠在不破壞和修改原有運行過程的情況下,直接抓取到執行過程。這對調查一些異常掛起,異常狀態或是特殊工況提供了非常好的抓手。
在我們zynqMP或者Versal的PS部分集成有ARM CoreSight模塊,這個模塊就是用來實現我們trace功能的核心。其結構如下圖所示:


02
安裝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

選擇PS Trce,并點擊“Enable”


03
PS trace的使用方法
1)在Vitis Debug環境下使用
在debug配置界面中,使能trace功能,并設置trace內存保存地址,大小以及輸出文件的路徑位置。

當你進入debg調試界面之后,你可以右擊標記欄,添加trace的起始中斷位置,以及結束中斷位置。



當你通deug具(全速執行,單步等)完成程序運行后,trace文件也會相應的生成完畢。

接著,可以通過itis菜單下PS trace->Open PS Trace工具來直觀的追蹤剛剛記錄下來的trace文件。


(2)在外部XST環境下使用
通常在實際應用過程中,通過trace功能是為了捕捉一些異常板上出現的異常情況,在這種情況下,并不能借助Vitis debug環境來復現,并且有些情況下,不清楚異常錯誤的位置,也可能APU已經crash。這個時候我們可以通過XSCT的方式來使用trace功能。
首先,在XSCT中加載trace相關的指令函數。

不同的devie器件需要加載的tcl腳本不一樣,具體可以在Vitis/2024.2/scripts/vitis/util/目錄下查看。

接下來,還是通XSCT工具,下載你的elf程序,或者通過stop指令將已經運行的程序暫停。

當程序進入暫停態后,你用enable_trace <core name> <buffer address> <buffer size> 命令啟動ps trace
例如:

接著,你可以通bpadd命令,在程序中的某個執行地址上設置一個斷點,或者等到程序異常停止后,或者隨時用stop指令暫停程序與運行。程序處于暫?;蛘遚rash狀態后,就可以通過write_trace_output <core name> <buffer address> <buffer size> <output path>命令來獲取trace文件。
例如:

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




04
總結
PS trace工具是嵌入式調試過程中的一項大殺器,對于偶發性異常問題的排查可以起到關鍵性的作用。利用Vitis工具中的ps trace,可以在實際應用過程中更加高效的排查問題,減少成本,提高效率。
