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

    文章

    8651

    浏览量

    361772
  • Linux
    +关注

    关注

    87

    文章

    10988

    浏览量

    206725
  • 操作系统
    +关注

    关注

    37

    文章

    6282

    浏览量

    121872
  • Zynq
    +关注

    关注

    9

    文章

    600

    浏览量

    46619

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

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

收藏 人收藏

    评论

    相关推荐

    arm 操作系统 嵌入式系统 的认识

    的帖子搞明白了arm是怎么一回事,记得原来在哪里看到过arm上可以运行操作系统,就查了一下,发现arm上的确是可以
    发表于 12-08 09:46

    赛灵思Zynq-7000可扩展处理平台让编程流程更简单

    的器件,但Zynq-7000 EPP的独特之处在于它由ARM处理器系统而非可编程逻辑元件来进行控制。也就是说,处理系统能够在开机时引导(在FPGA逻辑之前)并
    发表于 05-16 10:44

    ARM CPU操作系统

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

    Linux操作系统怎么移植到ARM平台?

    目前,在嵌入式系统里基于ARM的嵌入式处理器以其功耗低,功能强大的优点已经成为市场的主流。与此同时,在网络上发展起来的Linux操作系统,以其功能强大,开放源代码,支持硬件种类众多
    发表于 08-19 06:39

    嵌入式操作系统怎么选择?

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

    怎么实现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

    ARM Cortex-A9 处理器

    架构ARM Cortex-A9 处理器:一个应用级的处理器,能运行完整的像Linux 这样的操作系统传统的现场可编程门阵列(Field
    发表于 07-23 09:23

    ZYNQ7000搭建嵌入式Linux操作系统

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

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

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

    非对称的ARM系统,如何实现工业产品的低延时——基于ZYNQ

    + Artix-7 FPGA架构的单芯片SoC,它的OpenAMP框架可实现ARM Cortex-A9非对称使用方案,从而使
    发表于 04-29 15:38

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

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

    ZYNQ OpenAMP双核ARM通信案例开发手册

    ZYNQ OpenAMP双核ARM通信案例开发手册
    发表于 07-06 10:27 31次下载

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

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