TRACE32——AMP多核調試
TRACE32——AMP多核調試
之前有一篇文章介紹過芯片的SMP多核調試,適用于同架構的內核運行同一套操作系統的場景。例如英飛凌的TC275TF芯片的三個TriCore核以SMP的方式運行著AutoSar操作系統。
但隨著芯片的使用場景越來越復雜,芯片廠商推出的SoC可能會同時集成不同架構的內核用于不同的功能。
例如TI公司推出的TDA4VM芯片含有Cortex-M3、Cortex-R5、Cortex-A72、C66x DSP、C7x DSP等不同架構的內核。
不同架構的內核有不同的指令集、有不同的代碼空間、運行不同的操作系統,所以也需要不同的TRACE32窗口(GUI)來進行調試。但此時TRACE32 GUI之間共享一個勞特巴赫設備以及一個JTAG調試接口:
傳統方式調試AMP
如果是在Windows PC機上,我們可以使用TRACE32 Start程序進行配置AMP調試環境。根據需要調試的內核架構,添加相應的配置項即可。
配置好后,只需在Configuration名字處(圖中是TDA4的位置)或者1:PodBus Device Chain處右鍵,點擊Start,便會自動打開所有核的調試窗口。
關于TRACE32 Start的使用方法可以參考app_t32start.pdf
由于AMP多核調試時,可能會使用Trace(跟蹤)功能,為了便于TRACE32更好地處理多核之間的Trace數據,建議在各個GUI中,執行如下命令
System.config
在每個GUI中修改此處的參數:
對于絕大部分情況,此處參數的配置原則為:
core:任意數字,各個GUI之間不重復即可。
推薦按窗口順序填寫:
即第一個GUI的值寫1. 第二個GUI的值寫2.以此類推
chip:各個GUI之間保持為相同值
推薦都寫1.
有時候,AMP多核調試時,可能會希望主核開始運行時,其他從核也能同步運行起來。此時,可以執行Synch命令進行相應的同步配置:
注意:使用Synch功能的前提是,每個GUI都打開了InterCom Port。具體操作方法可以參考文檔:
- general_ref_s.pdf的Synch章節
- ide_ref.pdf的InterCom章節
新方法調試AMP
如果在Linux PC上使用TRACE32,可能沒有TRACE32 Start。因此TRACE32推出了更高效更通用的方法(需要2020年以后的TRACE32版本),主要為下面兩個命令組
//用于打開新的GUI、查看已經打開的GUI
TargetSystem
//用于GUI之間的通信、跨GUI之間執行命令
InterCom
以TI芯片TDA4VM為例,AMP相關調試方法如下:
按照正常方式啟動第一個TRACE32 GUI用于第一個內核/子系統的調試。
例如,TDA4VM的MCU域的R5 SMP 多核子系統
在調試過程中,如果需要同時調試其他內核/子系統,可以使用這條命令再啟一個TRACE32 GUI:
TargetSystem.NewInstance <新窗口名字> /ARCH <新窗口架構>
// 其中新窗口名字,可以任意取名
// 架構名可選的有:
// - ARM:所有ARM核
// - ARM64:2022年開始的TRACE32版本不區分ARM和ARM64,任選一個即可
// - Tricore: 英飛凌Tricore核
// - C6000
// - C7000
// - 等等,更多的架構可以在TRACE32命令行下方的提示欄中進行選取
例如希望調試TDA4VM MAIN0域的R5 SMP子系統,新打開的GUI調試的架構,和當前GUI調試的架構一樣時,/ARCH參數可省略:
// 新GUI名字任意選取,例如 main0TargetSystem.NewInstance main0
這條命令會:
- 打開當前GUI的Intercom Port(如果未打開)
- 克隆當前GUI使用的配置文件(config.t32)
- 并將配置文件的Intercom Port加1后,供新打開的GUI使用
當然上面的操作是TRACE32底層自動做的,一般用戶可以不用關心。只需要記住新打開的GUI的名字。
如果用戶習慣使用用鼠標操作,可仍然按照以前的習慣,在新打開的GUI中:
- 選擇要調試的內核/芯片/子系統名字
- 進行Attach操作,連上內核后開始調試
也有用戶習慣使用CMM腳本操作TRACE32,通過這種方法調試AMP多核的優勢是,可以使用一個CMM腳本,控制所有多核窗口。示意圖如下:
單個CMM腳本能夠控制所有窗口的操作,主要用了如下命令:
Intercom.execute <窗口名字> <命令>
//命令可簡寫成如下格式
IC <窗口名字> <命令>
本例子中,我們的腳本可以這樣寫:
//第一個GUI:MCU-R5
System.cpu TDA4VM-CR5-MCU
core.assign 1,2 //MCU域是一個R5 SMP子系統
System.attach
Break
List /core 0
List /core 1
//*******打開第二個GUI:MAIN0-R5**********
TargetSystem.NewInstance main0
IC main0 System.cpu TDA4VM-CR5-MAIN0
IC main0 System.CONFIG.CORE 2. 1.
IC main0 core.assign 1,2 //MAIN0域是一個R5 SMP子系統
IC main0 System.attach
IC main0 Break
IC main0 List /core 0
IC main0 List /core 1
同理,我們也可以用類似的方法,打開其他核的調試窗口,例如TDAVM芯片中的DSP C66x
當打開的GUI比較多后,除了可以使用*IC <窗口名字> <命令>*的方法來對指定GUI進行操作。還可以使用ALL、OTRHERS,來進行多個GUI的同時操作:
//對所有已經打開的GUI,執行命令
IC ALL <命令>
//除了當前GUI,對其他所有窗口執行命令
IC OTHERS <命令>
命令示意圖如下:
IC ALL Go
IC Others Go
綜合更多的內核和命令,CMM腳本功能更新如下:
//script.cmm 在第一個GUI中執行
//第一個GUI:MCU-R5
System.cpu TDA4VM-CR5-MCU
core.assign 1,2 //MCU域是一個R5 SMP子系統
System.attach
Break
List /core 0
List /core 1
//打開第二個GUI:MAIN0-R5
TargetSystem.NewInstance main0
IC main0 System.cpu TDA4VM-CR5-MAIN0
IC main0 System.CONFIG.CORE 2. 1.
IC main0 core.assign 1,2 //MAIN0域是一個R5 SMP子系統
IC main0 System.attach
IC main0 Break
IC main0 List /core 0
IC main0 List /core 1
//打開第三個GUI:C66X
TargetSystem.NewInstance c66x
IC c66x System.cpu TDA4VM-C66X
IC c66x System.CONFIG.CORE 3. 1.
IC c66x System.attach
IC c66x Break
IC c66x List
//多個GUI之間的同步控制
Go Os_Init //控制MCU-R5運行到斷點處
Wait !RUN()
IC All Go //控制所有GUI一起運行程序
wait 5.s
IC Others Break
ENDDO
回顧下整個AMP多核調試環境,其中包含了若干個SMP多核子系統。使用一個CMM腳本進行調試,操作和維護都更方便。
也可以執行如下命令后查看當前AMP多核調試環境中,各個GUI以及各個Core的狀態:
TargetSystem All
關于TargetSystem命令的更多介紹可以參考:
- general_ref_t.pdf的 TargetSystem章節
多核調試更多參考信息
- 文檔:
debugger_.pdf 中的多核調試章節
例如 debugger_armv8v9.pdf 的Quick Start for Multicore Debugging
- 腳本:
demo\<arch>\hardware\
文件夾下提供了一些常見的開發板可用的多核調試參考腳本
例如\demo\arm\hardware\s32g2\s32g-vnp-evb\s32g-vnp-evb-m7-a53-amp\s32g-vnp-evb_amp_sram.cmm
智能推薦
react-native--03開發環境&真機調試
IDE -> WebStorm 目前市面上的IDE,有知名的Sublime和jetbrains,其中jetbrains有一系列的IDE支持多種語言,如JAVA(IntelliJ IDEA)、Python(Pycharm)、Ruby(RubyMine)、Javascript/html/css(WebStorm),由于我本人長期開發Python,采用的是Pycharm,因此我個人傾向與采用Web...
單GDB調試RISC-V CPU 多核時,continue 命令行為解析
1 背景 前兩天軟件同事反應在使用單GDB調試我們四核CPU(RISC-V,64位)時,對設置軟斷點后再continue后的行為不太理解,和以前調試單核CPU的行為不太一致,因此我在ZEBU平臺做下復現工作,然后結合行為和波形分析Debug Module。 2 現象 2.1 openocd配置 下面是使用的openocd配置文件。 上面需要注意的是第23行的openocd命令: 查詢官方的open...
C#學習筆記:程序調試——使用Trace和日志文件
參考書目:C#6.0學習筆記——從第一行C#代碼到第一個項目設計(作者周家安)P240 學習內容:程序調試方法——使用Trace和日志文件 運行結果1:在調試窗口 在debug文件夾中,產生日志文件 ...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
猜你喜歡
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...