0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ZYNQ双核ARM分别运行不同的操作系统(基于OpenAMP)

电子电路开发学习 来源:Tronlong创龙科技 作者:Tronlong创龙科技 2022-12-05 13:46 次阅读

ZYNQ系列是Xilinx最近几年推出的多核异构SoC,集成了FPGAARM处理器,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进行配置。

87e15f4c-7450-11ed-8abf-dac502259ad0.png

图 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

884aef0c-7450-11ed-8abf-dac502259ad0.png

图 3

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

Target#modprobe rpmsg_user_dev_driver

885750a8-7450-11ed-8abf-dac502259ad0.png

图 4

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

Target# ./echo_test

88624922-7450-11ed-8abf-dac502259ad0.png

图 5

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

887b2bea-7450-11ed-8abf-dac502259ad0.png

图 6

88878854-7450-11ed-8abf-dac502259ad0.png

图 7

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

889b0096-7450-11ed-8abf-dac502259ad0.png

图 8

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

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

88a810f6-7450-11ed-8abf-dac502259ad0.png

图 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

88b82054-7450-11ed-8abf-dac502259ad0.png

图 10

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

Target# modprobe rpmsg_user_dev_driver

88c355f0-7450-11ed-8abf-dac502259ad0.png

图 11

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

Target#./mat_mul_demo

88cfbc3c-7450-11ed-8abf-dac502259ad0.png

图 12

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

88e5056a-7450-11ed-8abf-dac502259ad0.png

图 13

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

88f6e294-7450-11ed-8abf-dac502259ad0.png

图 14

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

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

88a810f6-7450-11ed-8abf-dac502259ad0.png

图 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设备资源)不能超出设备树文件配置的内存范围。

8911174a-7450-11ed-8abf-dac502259ad0.png

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

89485a7a-7450-11ed-8abf-dac502259ad0.png

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

89561ff2-7450-11ed-8abf-dac502259ad0.png

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

896385b6-7450-11ed-8abf-dac502259ad0.png

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

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9164

    浏览量

    368874
  • Linux
    +关注

    关注

    87

    文章

    11342

    浏览量

    210258
  • 操作系统
    +关注

    关注

    37

    文章

    6889

    浏览量

    123656
  • Zynq
    +关注

    关注

    10

    文章

    610

    浏览量

    47267

原文标题:【分享】ZYNQ双核ARM分别运行不同的操作系统(基于OpenAMP)

文章出处:【微信号:mcu149,微信公众号:电子电路开发学习】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用ZYNQ进行嵌入式系统设计

    ZYNQ内置了ARM Cortex-A9硬核,对软件设计提供了极大的灵活性,在该处理器上可运行Linux,Android等复杂的操作系统
    的头像 发表于 10-11 09:05 953次阅读

    ARM CPU操作系统

    嵌入式操作系统ARM CPU的软件基础 从8 位/16位单片机发展到以ARM CPU为代表的32位嵌入式处理器,嵌入式操作系统将替代传
    发表于 07-04 07:03

    怎么实现ARM/DSP系统的通信接口的设计?

    本文介绍了使用ARM和DSPCPU构成的嵌入式系统的硬件平台,以及源代码开放的Linux作为嵌入式
    发表于 05-26 06:21

    ARM操作系统应用程序

    ZYNQ将CPU和FPGA集成到了一起 开发人员需要具备技能: 1.ARM操作系统应用程序 2.设备驱动程序 3.FPGA硬件逻辑设计 需要了解Linux操作系统
    发表于 07-22 08:55

    关于Zynq的理论部分

    关于Zynq的理论部分,文大部分截图摘抄自《zynqbook》ZYNQ架构ARM Cortex-A9 处理器:
    发表于 07-23 10:11

    ZYNQ7000搭建嵌入式Linux操作系统

    建立这部分请参考我上篇讲述搭建操作系统的文章二、VIVADO工程设置zynq的搭建也请参照上篇文章,不过需要增加一些内容;双击zynq
    发表于 12-17 06:42

    小白求助如何对ARM进行分运行

    ARM如何分运行,一个运行操作系统 一个跑裸机
    发表于 01-13 07:27

    DSP/ARM系统的通信接口设计

    DSP/ARM系统的通信接口设计  嵌入式系统的核心是嵌入式微处理器和嵌入式操作系统
    发表于 12-21 17:00 1781次阅读
    DSP/<b class='flag-5'>ARM</b><b class='flag-5'>双</b><b class='flag-5'>核</b><b class='flag-5'>系统</b>的通信接口设计

    运行Zynq SoC上µITRON(操作系统)的继任者:eT

    eT-Kernel是由eSOL公司推出的基于T-Engine的操作系统,有望成为?ITRON操作系统的继任者,可在Zynq SoC上运行
    发表于 02-10 19:31 1378次阅读

    ZYNQ开发运行原理及过程

    ZYNQ是一个可扩展平台,就是有FPGA作为外设的A9处理器,它的启动流程与FPGA完全不同,而与传统的ARM处理器类似,ZYNQ的启动
    的头像 发表于 12-05 10:48 5979次阅读

    ZYNQ OpenAMPARM通信案例开发手册

    ZYNQ OpenAMPARM通信案例开发手册
    发表于 07-06 10:27 32次下载

    关于zynq 运行的流水灯工程

    zynq 7000 一般有2个cpu (arm A9),我们一般都用一个cpu0,本实验让2个cpu 都运行起来,cpu0 运行操作系统pe
    发表于 09-13 09:22 1117次阅读

    基于OpenAMP框架的ARM通信案例

    本文主要介绍基于OpenAMP框架的ARM通信案例的使用说明,CPU0(Master)运行Linux
    发表于 11-30 12:44 5216次阅读

    Xilinx ZYNQARM通信开发实例

    前言:本文主要介绍基于OpenAMP框架的ARM通信案例的使用说明,CPU0(Master)运行Linux
    的头像 发表于 12-27 13:48 2105次阅读
    Xilinx <b class='flag-5'>ZYNQ</b><b class='flag-5'>双</b><b class='flag-5'>核</b><b class='flag-5'>ARM</b>通信开发实例

    Zynq的AMP多核处理

    写的是Zynq 7000系列的,arm有两个。主要有AMP和SMP两种方式,SMP是两个运行一个操作
    的头像 发表于 10-17 16:59 923次阅读
    <b class='flag-5'>Zynq</b>的AMP多核处理