【經驗分享】基於創龍AM5708多核間通信的IPC例程通用開發流程
此文章原創來源於:創龍電子
? ? ? ??AM5708嵌入式開發板是一款由創龍基於TI AM570x浮點DSP C66x + ARM Cortex-A15工業控制及可編程音視頻處理器。由SOM-TL570x工業核心板設計的開發板,它為用戶提供了SOM-TL570x工業核心板的測試平臺,用於快速評估SOM-TL570x工業核心板的整體性能。廣泛應用於機器視覺、電力自動化、智能交通、醫療器械、自動分揀裝置、高精度儀器儀表、高端數控系統等多種工業應用場合。
? ? ? ? 下面簡單講解一下創龍基於AM57x核間通信的IPC例程位於光盤"Demo\rtos-examples"目錄下,其中ti-linux-ipc-examples文件夾下包含TI官方例程,tl-linux-ipc-examples文件夾下為創龍移植的IPC例程。
? ? ? ? 每個IPC例程包含src、bin兩個文件夾,其中src文件夾下含例程源文件,bin文件夾下含有我司提供的IPC例程可執行文件,將其復制到開發板文件系統下即可測試。本章節以光盤"Demo\rtos-examples\tl-linux-ipc-examples\tl-gatemap-mutex-access"例程為例,演示基於AM57x核間通信IPC例程在Linux下的通用開發步驟。測試前請參照《基於創龍AM57x的RTOS SDK開發環境搭建和編譯說明》文檔,搭建基於Linux的RTOS Processor-SDK-04.03開發環境、編譯IPC例程需要依賴的IPC鏈接庫。
AM5708編譯libticmem.a鏈接庫
libticmem.a共享內存鏈接庫提供對共享內存的支持,它是由IPC例程"/src/ludev"源文件編譯生成,例程如果未使用共享內存則源碼不含該文件。
如果IPC例程需要使用到共享內存,請參照如下方法編譯生成libticmem.a鏈接庫。編譯IPC例程時依賴於libticmem.a鏈接庫,如果IPC例程沒有使用到共享內存則無需編譯libticmem.a鏈接庫。
打開Ubuntu,執行如下指令新建“/home/tronlong/AM57xx/rtos_examples/”工作目錄,將光盤“Demo\rtos-examples\tl-linux-ipc-examples\tl-gatemap-mutex-access”例程整個文件夾上傳到rtos_examples工作目錄。
Host#?? mkdir -p /home/tronlong/AM57xx/rtos_examples
Host#?? cd /home/tronlong/AM57xx/rtos_examples
圖 1
進入IPC例程"/src/ludev"目錄,在ludev下依次執行如下指令,新建install目錄用於存放編譯生成的文件。並設置好環境變量,其中"prefix="參數應根據IPC例程"ludev/install"目錄實際路徑修改。
Host#?? cd tl-gatemap-mutex-access/src/ludev/
Host#?? mkdir __install
Host#?? ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --prefix=/home/tronlong/AM57xx/rtos_examples/tl-gatemap-mutex-access/src/ludev/__install
圖 2
執行如下指令編譯並安裝鏡像,編譯完成後,將在“__install/lib”目錄下會生成libticmem.a鏈接庫文件,如下圖所示:
Host#?? make && make install
圖 3
圖 4
AM5708的IPC例程編譯
以光盤“Demo\rtos-examples\tl-linux-ipc-examples\tl-gatemap-mutex-access”例程為例,進入tl-gatemap-mutex-access工程源碼目錄,打開products.mak文件,參照如下方法並結合實際情況配置環境變量,其他變量保持一致無需修改。
Host#?? vi products.mak
圖 5
Linux-RT交叉編譯工具鏈路徑
TOOLCHAIN_INSTALL_DIR = /home/tronlong/ti-processor-sdk-linux-rt-am57xx-evm-04.03.00.05/linux-devkit/sysroots/x86_64-arago-linux/usr
Cmem鏈接庫路徑
CMEM_INSTALL_DIR = /home/tronlong/AM57xx/rtos_examples/tl-gatemap-mutex-access/src/ludev
圖 6
修改完成保存退出後,執行如下指令清理工程,編譯並安裝鏡像。
Host#?? make clean
Host#?? make -j 8 && make install
圖 7
編譯完成後,會在“install/tl-gatemap-mutex-access/debug”目錄下生成可執行文件,本例程編譯生成了A15核可執行文件(app_host)和DSP1核可執行文件(server_dsp1.xe66),不同例程編譯生成的可執行文件不一樣。不同核心對應的可執行文件、trace buffer(調試信息)路徑不相同,對應關系如下表所示。
表 1
核心
可執行文件
trace buffer
Host
A15核
app_host
——
Slave
DSP1核
server_dsp1.xe66
remoteproc2/trace0
DSP2核
(AM570x不含)
server_dsp2.xe66
remoteproc3/trace0
IPU1核
server_ipu1.xem4
remoteproc0/trace0
IPU2核
server_ipu2.xem4
remoteproc1/trace0
Host#?? tree -A install/
圖 8
AM5708的IPC例程測試
為便於測試,我司提供經測試驗證的IPC例程可執行文件,位於光盤“Demo\rtos-examples”路徑下的IPC工程bin目錄下,bin目錄下還包含load-firmware.sh腳本文件,ARM端通過load-firmware.sh腳本文件加載可執行文件到DSP/M4核心。
以tl-gatemap-mutex-access例程為例,將光盤“Demo\rtos-examples\tl-linux-ipc-examples\tl-gatemap-mutex-access\bin”文件夾復制到開發板文件系統“/home/root”目錄下。進入文件系統bin目錄,執行load-firmware.sh腳本文件加載固件:
Target# ????? ./load-firmware.sh
圖 9
執行如下指令,運行A15測試程序:
Target# ????? ./app_host
圖 10
執行如下指令查看DSP核打印信息,如下圖所示:
Target# ????? cat /sys/kernel/debug/remoteproc/remoteproc2/trace0
圖 11
【經驗分享】基於創龍AM5708多核間通信的IPC例程通用開發流程