前 言:本文主要介紹基于OpenAMP框架的雙核ARM通信案例的使用說(shuō)明,CPU0(Master)運(yùn)行Linux系統(tǒng),CPU1(Remote)運(yùn)行裸機(jī)或FreeRTOS程序。CPU0使用remoteproc加載CPU1程序,并對(duì)CPU1進(jìn)行配置。
![](https://file.elecfans.com/web2/M00/2A/40/poYBAGHJU7aASx-RAAGhNx_YfZo677.png)
圖 1
OpenAMP詳細(xì)開發(fā)說(shuō)明可查閱官方文檔。
本文基于Xilinx Zynq-7010/7020平臺(tái)進(jìn)行案例測(cè)試。
![](https://file.elecfans.com/web2/M00/2A/46/pYYBAGHJU7eABONvAAcdcwFmz2o209.png)
圖2
1、echo_test案例
1.1 案例功能
案例功能:CPU0使用RPMsg向CPU1發(fā)送數(shù)據(jù),CPU1接收到數(shù)據(jù)后再使用RPMsg向CPU0回傳數(shù)據(jù)。CPU0對(duì)回傳的數(shù)據(jù)進(jìn)行驗(yàn)證,并輸出驗(yàn)證結(jié)果。
1.2 操作說(shuō)明
將CPU1裸機(jī)或FreeRTOS可執(zhí)行文件復(fù)制到評(píng)估板文件系統(tǒng)“/lib/firmware/”目錄下,并執(zhí)行如下命令加載CPU1程序。
Target# echo echo_test.elf > /sys/class/remoteproc/remoteproc0/firmware
Target# echo start > /sys/class/remoteproc/remoteproc0/state
![](https://file.elecfans.com/web2/M00/2A/40/poYBAGHJU7WAPlIfAABOmRX_qO8948.png)
圖 3
執(zhí)行如下命令加載RPMsg驅(qū)動(dòng),并在“/dev/”目錄下生成RPMsg設(shè)備節(jié)點(diǎn)。
Target# modprobe rpmsg_user_dev_driver
![](https://file.elecfans.com/web2/M00/2A/46/pYYBAGHJU7SAVMxDAAAayRBkim8112.png)
圖 4
將CPU0應(yīng)用程序可執(zhí)行文件復(fù)制到評(píng)估板文件系統(tǒng),并執(zhí)行如下命令通過RPMsg與CPU1進(jìn)行通信。
Target# ./echo_test
![](https://file.elecfans.com/web2/M00/2A/40/poYBAGHJU7SAHSeAAAAsbk6udFw782.png)
圖 5
輸入1,并按回車鍵進(jìn)行測(cè)試。
![](https://file.elecfans.com/web2/M00/2A/46/pYYBAGHJU7WANsP-AAATig6n4Uw559.png)
圖 6
![](https://file.elecfans.com/web2/M00/2A/40/poYBAGHJU7WABB9vAAA3WL3hyiE173.png)
圖 7
輸入2,并按回車鍵退出測(cè)試。
![](https://file.elecfans.com/web2/M00/2A/40/poYBAGHJU7WAdk5VAABLxZ_EHjQ490.png)
圖 8
執(zhí)行如下命令,停止CPU1程序。
Target# echo stop > /sys/class/remoteproc/remoteproc0/state
![](https://file.elecfans.com/web2/M00/2A/46/pYYBAGHJU7WALOi6AAASTx9jpuU459.png)
圖 9
2、matrix_multiply案例
2.1 案例功能
案例功能:CPU0隨機(jī)生成兩個(gè)矩陣并使用RPMsg向CPU1發(fā)送數(shù)據(jù),CPU1接收到數(shù)據(jù)后進(jìn)行矩陣乘法運(yùn)算,再使用RPMsg向CPU0回傳運(yùn)算結(jié)果,然后CPU0通過串口終端輸出運(yùn)算結(jié)果。
2.2 操作說(shuō)明
將CPU1裸機(jī)或FreeRTOS可執(zhí)行文件復(fù)制到評(píng)估板文件系統(tǒng)“/lib/firmware/”目錄下,并執(zhí)行如下命令加載CPU1程序。
Target# echo matrix_multiply.elf > /sys/class/remoteproc/remoteproc0/firmware
Target# echo start > /sys/class/remoteproc/remoteproc0/state
![](https://file.elecfans.com/web2/M00/2A/46/pYYBAGHJU7aAb76PAABO70axzO4860.png)
圖 10
執(zhí)行如下命令加載RPMsg驅(qū)動(dòng),并在“/dev/”目錄下生成RPMsg設(shè)備節(jié)點(diǎn)。
Target# modprobe rpmsg_user_dev_driver
![](https://file.elecfans.com/web2/M00/2A/46/pYYBAGHJU7SAVMxDAAAayRBkim8112.png)
圖 11
將CPU0應(yīng)用程序可執(zhí)行文件復(fù)制到評(píng)估板文件系統(tǒng),并執(zhí)行如下命令通過RPMsg與CPU1進(jìn)行通信。
Target# ./mat_mul_demo
![](https://file.elecfans.com/web2/M00/2A/46/pYYBAGHJU7aACwk4AAAxv7lzkqE378.png)
圖 12
輸入1,并按回車鍵進(jìn)行測(cè)試。
![](https://file.elecfans.com/web2/M00/2A/40/poYBAGHJU7aAVcXGAAB8abYPe_Q005.png)
圖 13
輸入2,并按回車鍵退出測(cè)試。
![](https://file.elecfans.com/web2/M00/2A/46/pYYBAGHJU7aAM81uAABQRX5z49A221.png)
圖 14
執(zhí)行如下命令,停止CPU1程序。
Target# echo stop > /sys/class/remoteproc/remoteproc0/state
![](https://file.elecfans.com/web2/M00/2A/46/pYYBAGHJU7WALOi6AAASTx9jpuU459.png)
圖 15
3、內(nèi)存分配說(shuō)明
512MByte DDR容量版本核心板的內(nèi)存地址分配如下:
表 1
![](https://file.elecfans.com/web2/M00/2A/46/pYYBAGHJU7aAc-K3AAAtFC-rPZU521.png)
1GByte DDR容量版本核心板的內(nèi)存地址分配如下:
表 2
![](https://file.elecfans.com/web2/M00/2A/40/poYBAGHJU7eADQsFAAA2Fxpt9Mo556.png)
如需修改CPU1程序(OpenAMP-remote app)內(nèi)存地址空間范圍,可通過更改設(shè)備樹文件tlz7x-easyevm-s.dts、資源表rsc_table.c及鏈接文件lscript.ld對(duì)內(nèi)存地址空間進(jìn)行重新分配。三者需同步修改并保持一致,以確保固件程序鏈接地址與設(shè)備樹配置的elf_ddr_0對(duì)應(yīng)。所使用的資源(內(nèi)存和virtio設(shè)備資源)不能超出設(shè)備樹文件配置的內(nèi)存范圍。
![](https://file.elecfans.com/web2/M00/2A/40/poYBAGHJU7mAA-cFAAJ-9vSgPns676.png)
圖 16設(shè)備樹文件tlz7x-easyevm-s.dts配置
![](https://file.elecfans.com/web2/M00/2A/46/pYYBAGHJU7eAZyexAADyLvufmVk291.png)
圖 17設(shè)備樹文件tlz7x-easyevm-s.dts配置
![](https://file.elecfans.com/web2/M00/2A/40/poYBAGHJU7eATC1QAACBGpdhc1Y471.png)
圖 18 CPU1程序資源表rsc_table.c配置
![](https://file.elecfans.com/web2/M00/2A/40/poYBAGHJU7eAbwytAABGaNEdlCY049.png)
圖 19 CPU1程序鏈接文件lscript.ld配置
-
嵌入式
+關(guān)注
關(guān)注
5095文章
19189瀏覽量
307987 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5131瀏覽量
98328 -
Zynq-7000
+關(guān)注
關(guān)注
3文章
144瀏覽量
36917 -
核心板
+關(guān)注
關(guān)注
5文章
1031瀏覽量
29977 -
工控板
+關(guān)注
關(guān)注
0文章
193瀏覽量
13160
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于Xilinx ZYNQ7000 FPGA嵌入式開發(fā)實(shí)戰(zhàn)指南
AMD/Xilinx Zynq? UltraScale+ ? MPSoC ZCU102 評(píng)估套件
![AMD/<b class='flag-5'>Xilinx</b> <b class='flag-5'>Zynq</b>? UltraScale+ ? MPSoC ZCU102 評(píng)估套件](http://www.delux-kingway.cn/images/chaijie_default.png)
【AG32開發(fā)板體驗(yàn)連載】雷達(dá)實(shí)現(xiàn)與控制
如何申請(qǐng)xilinx IP核的license
![如何申請(qǐng)<b class='flag-5'>xilinx</b> IP<b class='flag-5'>核</b>的license](https://file1.elecfans.com/web2/M00/0A/36/wKgZomcbW8KAAwLHAAALYsx2gPs295.jpg)
ZYNQ核心板學(xué)習(xí)筆記
![<b class='flag-5'>ZYNQ</b>核心板學(xué)習(xí)筆記](https://file1.elecfans.com/web2/M00/0A/22/wKgZomcaHTCAJOOqAAAQVixp0bg952.png)
為Xilinx? Zynq?UltraScale?系列多處理器中的VCCINT_VCU軌供電
![為<b class='flag-5'>Xilinx</b>? <b class='flag-5'>Zynq</b>?UltraScale?系列多處理器中的VCCINT_VCU軌供電](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
使用TPS65086x PMIC為Xilinx Zynq UltraScale MPSoC供電
![使用TPS65086x PMIC為<b class='flag-5'>Xilinx</b> <b class='flag-5'>Zynq</b> UltraScale MPSoC供電](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
正點(diǎn)原子ZYNQ7015開發(fā)板!ZYNQ 7000系列、雙核ARM、PCIe2.0、SFPX2,性能強(qiáng)悍,資料豐富!
[XILINX] 正點(diǎn)原子ZYNQ7035/7045/7100開發(fā)板發(fā)布、ZYNQ 7000系列、雙核ARM、PCIe2.0、SFPX2!
5G千兆雙核物聯(lián)網(wǎng)模塊 OpenWrt二次開發(fā)
![5G千兆<b class='flag-5'>雙</b><b class='flag-5'>核</b>物聯(lián)網(wǎng)模塊 OpenWrt二次<b class='flag-5'>開發(fā)</b>](https://file1.elecfans.com/web2/M00/EC/13/wKgaomZdX2CAAV7fAAKGNC2I66Y186.png)
評(píng)論