ZYNQ系列是Xilinx最近幾年推出的多核異構SoC,集成了FPGA和ARM處理器,ARM部分是雙核ARM Cortex-A9處理器,雙核可以同時對稱使用,還可以非對稱使用。
基于OpenAMP軟件架構,可以實現一個ARM核運行Linux系統,而另一個ARM核運行RTOS,如FreeRTOS,或者裸機跑,RTOS和FPGA端進行低延時的高速數據交換,滿足實時任務需求,而跑Linux的ARM核可以作為上層應用,處理更復雜的業務邏輯。
本文分享基于OpenAMP框架的雙核ARM通信案例的使用說明,CPU0(Master)運行Linux系統,CPU1(Remote)運行裸機或FreeRTOS程序。CPU0使用remoteproc加載CPU1程序,并對CPU1進行配置。
圖 1
OpenAMP詳細開發說明可查閱官方文檔
本文基于創龍科技 Xilinx Zynq-7010/7020平臺進行案例測試。
1 echo_test案例
1.1案例功能
案例功能:CPU0使用RPMsg向CPU1發送數據,CPU1接收到數據后再使用RPMsg向CPU0回傳數據。CPU0對回傳的數據進行驗證,并輸出驗證結果。
1.2操作說明
將CPU1裸機或FreeRTOS可執行文件復制到評估板文件系統“/lib/firmware/”目錄下,并執行如下命令加載CPU1程序。
Target# echo echo_test.elf > /sys/class/remoteproc/remoteproc0/firmware
Target#echo start > /sys/class/remoteproc/remoteproc0/state
圖 3
執行如下命令加載RPMsg驅動,并在“/dev/”目錄下生成RPMsg設備節點。
Target#modprobe rpmsg_user_dev_driver
圖 4
將CPU0應用程序可執行文件復制到評估板文件系統,并執行如下命令通過RPMsg與CPU1進行通信。
Target# ./echo_test
圖 5
輸入1,并按回車鍵進行測試。
圖 6
圖 7
輸入2,并按回車鍵退出測試。
圖 8
執行如下命令,停止CPU1程序。
Target# echo stop > /sys/class/remoteproc/remoteproc0/state
圖 9
2 matrix_multiply案例
2.1案例功能
案例功能:CPU0隨機生成兩個矩陣并使用RPMsg向CPU1發送數據,CPU1接收到數據后進行矩陣乘法運算,再使用RPMsg向CPU0回傳運算結果,然后CPU0通過串口終端輸出運算結果。
2.2操作說明
將CPU1裸機或FreeRTOS可執行文件復制到評估板文件系統“/lib/firmware/”目錄下,并執行如下命令加載CPU1程序。
Target# echo matrix_multiply.elf> /sys/class/remoteproc/remoteproc0/firmware
Target# echo start > /sys/class/remoteproc/remoteproc0/state
圖 10
執行如下命令加載RPMsg驅動,并在“/dev/”目錄下生成RPMsg設備節點。
Target# modprobe rpmsg_user_dev_driver
圖 11
將CPU0應用程序可執行文件復制到評估板文件系統,并執行如下命令通過RPMsg與CPU1進行通信。
Target#./mat_mul_demo
圖 12
輸入1,并按回車鍵進行測試。
圖 13
輸入2,并按回車鍵退出測試。
圖 14
執行如下命令,停止CPU1程序。
Target# echo stop > /sys/class/remoteproc/remoteproc0/state
圖 15
3內存分配說明
512MByte DDR容量版本核心板的內存地址分配如下:
表 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容量版本核心板的內存地址分配如下:
表 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)內存地址空間范圍,可通過更改設備樹文件tlz7x-easyevm-s.dts、資源表rsc_table.c及鏈接文件lscript.ld對內存地址空間進行重新分配。三者需同步修改并保持一致,以確保固件程序鏈接地址與設備樹配置的elf_ddr_0對應。所使用的資源(內存和virtio設備資源)不能超出設備樹文件配置的內存范圍。
圖 16設備樹文件tlz7x-easyevm-s.dts配置
圖 17設備樹文件tlz7x-easyevm-s.dts配置
圖 18CPU1程序資源表rsc_table.c配置
圖 19CPU1程序鏈接文件lscript.ld配置
審核編輯:湯梓紅
-
ARM
+關注
關注
134文章
9165瀏覽量
369190 -
Linux
+關注
關注
87文章
11345瀏覽量
210391 -
操作系統
+關注
關注
37文章
6892瀏覽量
123742 -
Zynq
+關注
關注
10文章
610瀏覽量
47296
原文標題:【分享】ZYNQ雙核ARM分別運行不同的操作系統(基于OpenAMP)
文章出處:【微信號:mcu149,微信公眾號:電子電路開發學習】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論