ZYNQ系列是Xilinx最近幾年推出的多核異構(gòu)SoC,集成了FPGA和ARM處理器,ARM部分是雙核ARM Cortex-A9處理器,雙核可以同時(shí)對稱使用,還可以非對稱使用。
基于OpenAMP軟件架構(gòu),可以實(shí)現(xiàn)一個(gè)ARM核運(yùn)行Linux系統(tǒng),而另一個(gè)ARM核運(yùn)行RTOS,如FreeRTOS,或者裸機(jī)跑,RTOS和FPGA端進(jìn)行低延時(shí)的高速數(shù)據(jù)交換,滿足實(shí)時(shí)任務(wù)需求,而跑Linux的ARM核可以作為上層應(yīng)用,處理更復(fù)雜的業(yè)務(wù)邏輯。
本文分享基于OpenAMP框架的雙核ARM通信案例的使用說明,CPU0(Master)運(yùn)行Linux系統(tǒng),CPU1(Remote)運(yùn)行裸機(jī)或FreeRTOS程序。CPU0使用remoteproc加載CPU1程序,并對CPU1進(jìn)行配置。

圖 1
OpenAMP詳細(xì)開發(fā)說明可查閱官方文檔
本文基于創(chuàng)龍科技 Xilinx Zynq-7010/7020平臺進(jìn)行案例測試。
1 echo_test案例
1.1案例功能
案例功能:CPU0使用RPMsg向CPU1發(fā)送數(shù)據(jù),CPU1接收到數(shù)據(jù)后再使用RPMsg向CPU0回傳數(shù)據(jù)。CPU0對回傳的數(shù)據(jù)進(jìn)行驗(yàn)證,并輸出驗(yàn)證結(jié)果。
1.2操作說明
將CPU1裸機(jī)或FreeRTOS可執(zhí)行文件復(fù)制到評估板文件系統(tǒng)“/lib/firmware/”目錄下,并執(zhí)行如下命令加載CPU1程序。
Target# echo echo_test.elf > /sys/class/remoteproc/remoteproc0/firmware
Target#echo start > /sys/class/remoteproc/remoteproc0/state

圖 3
執(zhí)行如下命令加載RPMsg驅(qū)動(dòng),并在“/dev/”目錄下生成RPMsg設(shè)備節(jié)點(diǎn)。
Target#modprobe rpmsg_user_dev_driver

圖 4
將CPU0應(yīng)用程序可執(zhí)行文件復(fù)制到評估板文件系統(tǒng),并執(zhí)行如下命令通過RPMsg與CPU1進(jìn)行通信。
Target# ./echo_test

圖 5
輸入1,并按回車鍵進(jìn)行測試。

圖 6

圖 7
輸入2,并按回車鍵退出測試。

圖 8
執(zhí)行如下命令,停止CPU1程序。
Target# echo stop > /sys/class/remoteproc/remoteproc0/state

圖 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操作說明
將CPU1裸機(jī)或FreeRTOS可執(zhí)行文件復(fù)制到評估板文件系統(tǒng)“/lib/firmware/”目錄下,并執(zhí)行如下命令加載CPU1程序。
Target# echo matrix_multiply.elf> /sys/class/remoteproc/remoteproc0/firmware
Target# echo start > /sys/class/remoteproc/remoteproc0/state

圖 10
執(zhí)行如下命令加載RPMsg驅(qū)動(dòng),并在“/dev/”目錄下生成RPMsg設(shè)備節(jié)點(diǎn)。
Target# modprobe rpmsg_user_dev_driver

圖 11
將CPU0應(yīng)用程序可執(zhí)行文件復(fù)制到評估板文件系統(tǒng),并執(zhí)行如下命令通過RPMsg與CPU1進(jìn)行通信。
Target#./mat_mul_demo

圖 12
輸入1,并按回車鍵進(jìn)行測試。

圖 13
輸入2,并按回車鍵退出測試。

圖 14
執(zhí)行如下命令,停止CPU1程序。
Target# echo stop > /sys/class/remoteproc/remoteproc0/state

圖 15
3內(nèi)存分配說明
512MByte DDR容量版本核心板的內(nèi)存地址分配如下:
表 1
| 名稱 | 地址范圍 | 范圍大小 |
| PSLinux | 0~0x17FF FFFF | 384MByte |
| PLMicroBlaze | 0x1800 0000~0x18FF FFFF | 16MByte |
| OpenAMP-remoteapp | 0x1900 0000~0x19FF FFFF | 16MByte |
| PL | 0x1A00 0000~0x1FFF FFFF | 96MByte |
1GByte DDR容量版本核心板的內(nèi)存地址分配如下:
表 2
| 名稱 | 地址范圍 | 范圍大小 |
| PSLinux | 0~0x17FF FFFF | 384MByte |
| PLMicroBlaze | 0x1800 0000~0x18FF FFFF | 16MByte |
| OpenAMP-remoteapp | 0x1900 0000~0x19FF FFFF | 16MByte |
| PL | 0x1A00 0000~0x1FFF FFFF | 96MByte |
| PSLinux | 0x2000 0000~0x3FFF FFFF | 512MByte |
如需修改CPU1程序(OpenAMP-remote app)內(nèi)存地址空間范圍,可通過更改設(shè)備樹文件tlz7x-easyevm-s.dts、資源表rsc_table.c及鏈接文件lscript.ld對內(nèi)存地址空間進(jìn)行重新分配。三者需同步修改并保持一致,以確保固件程序鏈接地址與設(shè)備樹配置的elf_ddr_0對應(yīng)。所使用的資源(內(nèi)存和virtio設(shè)備資源)不能超出設(shè)備樹文件配置的內(nèi)存范圍。

圖 16設(shè)備樹文件tlz7x-easyevm-s.dts配置

圖 17設(shè)備樹文件tlz7x-easyevm-s.dts配置

圖 18CPU1程序資源表rsc_table.c配置

圖 19CPU1程序鏈接文件lscript.ld配置
審核編輯:湯梓紅
-
ARM
+關(guān)注
關(guān)注
135文章
9467瀏覽量
386887 -
Linux
+關(guān)注
關(guān)注
88文章
11581瀏覽量
217174 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7267瀏覽量
128169 -
Zynq
+關(guān)注
關(guān)注
10文章
624瀏覽量
49046
原文標(biāo)題:【分享】ZYNQ雙核ARM分別運(yùn)行不同的操作系統(tǒng)(基于OpenAMP)
文章出處:【微信號:mcu149,微信公眾號:電子電路開發(fā)學(xué)習(xí)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
ARM CPU操作系統(tǒng)
怎么實(shí)現(xiàn)ARM/DSP雙核系統(tǒng)的通信接口的設(shè)計(jì)?
ARM操作系統(tǒng)應(yīng)用程序
關(guān)于Zynq的理論部分
ZYNQ7000搭建嵌入式Linux操作系統(tǒng)
小白求助如何對雙核ARM進(jìn)行分核運(yùn)行呢
DSP/ARM雙核系統(tǒng)的通信接口設(shè)計(jì)
運(yùn)行于Zynq SoC上μITRON(操作系統(tǒng))的繼任者:eT
ZYNQ開發(fā)雙核運(yùn)行原理及過程
關(guān)于zynq 雙核運(yùn)行的流水燈工程
基于OpenAMP框架的雙核ARM通信案例
分享!基于NXP i.MX 8M Plus平臺的OpenAMP核間通信方案

ZYNQ雙核ARM分別運(yùn)行不同的操作系統(tǒng)(基于OpenAMP)
評論