全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 移动通信 >

基于OpenAMP框架的双核ARM通信案例

时间:2022-11-30 12:44

人气:

作者:admin

标签: ARM  CPU  FPGA 

导读:基于OpenAMP框架的双核ARM通信案例-本文主要介绍基于OpenAMP框架的双核ARM通信案例的使用说明,CPU0(Master)运行Linux系统,CPU1(Remote)运行裸机或FreeRTOS程序。CPU0使用remoteproc加载CPU1程序,并对...

ZYNQ 是赛灵思公司(Xilinx)推出的新一代全可编程片上系统(APSoC),它将处理器的软件可编程性与 FPGA硬件可编程性进行完美整合,以提供无与伦比的系统性能、灵活性与可扩展性。

前言:

本文主要介绍基于OpenAMP框架的双核ARM通信案例的使用说明,CPU0(Master)运行Linux系统,CPU1(Remote)运行裸机或FreeRTOS程序。CPU0使用remoteproc加载CPU1程序,并对CPU1进行配置。

1ef6187e-7063-11ed-8abf-dac502259ad0.png

图 1

OpenAMP详细开发说明可查阅官方文档:

https://china.xilinx.com/content/dam/xilinx/support/documentation/sw_manuals/xilinx2021_2/ug1186-zynq-openamp-gsg.pdf。

本文基于创龙科技 Xilinx Zynq-7010/7020平台进行案例测试。

1f1ac502-7063-11ed-8abf-dac502259ad0.png

图 2

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

1fa9dbe8-7063-11ed-8abf-dac502259ad0.png

图 3

执行如下命令加载RPMsg驱动,并在“/dev/”目录下生成RPMsg设备节点。

Target#  modprobe rpmsg_user_dev_driver

1fc0b16a-7063-11ed-8abf-dac502259ad0.png

图 4

将CPU0应用程序可执行文件复制到评估板文件系统,并执行如下命令通过RPMsg与CPU1进行通信。

Target#  ./echo_test

1fd30cfc-7063-11ed-8abf-dac502259ad0.png

图 5

输入1,并按回车键进行测试。

1fedba48-7063-11ed-8abf-dac502259ad0.png

图 6

200294fe-7063-11ed-8abf-dac502259ad0.png

图 7

输入2,并按回车键退出测试。

201bcdac-7063-11ed-8abf-dac502259ad0.png

图 8

执行如下命令,停止CPU1程序。

Target#  echo stop > /sys/class/remoteproc/remoteproc0/state

202eee14-7063-11ed-8abf-dac502259ad0.png

图 9

2             1

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

2043584a-7063-11ed-8abf-dac502259ad0.png

图 10

执行如下命令加载RPMsg驱动,并在“/dev/”目录下生成RPMsg设备节点。

Target#  modprobe rpmsg_user_dev_driver

2058408e-7063-11ed-8abf-dac502259ad0.png

图 11

将CPU0应用程序可执行文件复制到评估板文件系统,并执行如下命令通过RPMsg与CPU1进行通信。

Target#  ./mat_mul_demo

20717eaa-7063-11ed-8abf-dac502259ad0.png

图 12

输入1,并按回车键进行测试。

20886282-7063-11ed-8abf-dac502259ad0.png

图 13

输入2,并按回车键退出测试。 

20a6f350-7063-11ed-8abf-dac502259ad0.png

图 14

执行如下命令,停止CPU1程序。

Target#  echo stop > /sys/class/remoteproc/remoteproc0/state

202eee14-7063-11ed-8abf-dac502259ad0.png

图 15

 3            01

内存分配说明

512MByte DDR容量版本核心板的内存地址分配如下:

表 1

 

名称 地址范围 范围大小
PS Linux 0~0x17FF FFFF 384MByte
PL MicroBlaze 0x1800 0000~0x18FF FFFF 16MByte
OpenAMP-remote app 0x1900 0000~0x19FF FFFF 16MByte
PL 0x1A00 0000~0x1FFF FFFF 96MByte

 

1GByte DDR容量版本核心板的内存地址分配如下:

表 2

 

名称 地址范围 范围大小
PS Linux 0~0x17FF FFFF 384MByte
PL MicroBlaze 0x1800 0000~0x18FF FFFF 16MByte
OpenAMP-remote app 0x1900 0000~0x19FF FFFF 16MByte
PL 0x1A00 0000~0x1FFF FFFF 96MByte
PS Linux 0x2000 0000~0x3FFF FFFF 512MByte

 

如需修改CPU1程序(OpenAMP-remote app)内存地址空间范围,可通过更改设备树文件tlz7x-easyevm-s.dts、资源表rsc_table.c及链接文件lscript.ld对内存地址空间进行重新分配。三者需同步修改并保持一致,以确保固件程序链接地址与设备树配置的elf_ddr_0对应。所使用的资源(内存和virtio设备资源)不能超出设备树文件配置的内存范围。

20cda39c-7063-11ed-8abf-dac502259ad0.png

图 16设备树文件tlz7x-easyevm-s.dts配置

20ebf0e0-7063-11ed-8abf-dac502259ad0.png

图 17设备树文件tlz7x-easyevm-s.dts配置

2129aec6-7063-11ed-8abf-dac502259ad0.png

图 18 CPU1程序资源表rsc_table.c配置

21425bb0-7063-11ed-8abf-dac502259ad0.png

图 19 CPU1程序链接文件lscript.ld配置

编辑:黄飞

 

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信