RPMsg(Remote Processor Messaging)是一种基于virtio的消息传递总线,允许内核驱动程序与系统上可用的远程处理器进行通信。如果需要,驱动程序可以暴露适当的用户空间接口。每个RPMsg设备都是与远程处理器的通信通道(因此RPMsg设备称为通道)。通道由文本名称标识,并具有本地(“source”)RPMsg地址和远程(“destination”)RPMsg 地址。
如下图所示,消息在端点之间通过双向无连接通信通道传递。iMX6 SoloX的Core 0是ARM Cortex®-A9,而Core 1是ARM Cortex®-M4

A9 Linux配置

Source Code和配置

drivers/rpmsg/virtio_rpmsg_bus.c
drivers/rpmsg/imx_rpmsg.c
drivers/rpmsg/imx_rpmsg_pingpong.c
drivers/rpmsg/imx_rpmsg_tty.c

这里virtio_rpmsg_bus.c是通用代码,imx_rpmsg.c是平台相关代码,imx_rpmsg_pingpong.cpingpong测试代码,imx_rpmsg_tty.crpmsg tty驱动代码。这部分代码一般不需要改动,只需要在内核的defconfig文件中做相关配置:

For RPMSG pingpong test
Symbol: IMX_RPMSG_PINGPONG [=m]
Type : tristate
Prompt: IMX RPMSG pingpong driverLocation:-> Device Drivers-> Rpmsg drivers-> RPMSG bus driver (RPMSG [=y])
For RPMSG TTY driver
Symbol: IMX_RPMSG_TTY [=m]
Type : tristate
Prompt: IMX RPMSG tty driverLocation:-> Device Drivers-> Rpmsg drivers-> RPMSG bus driver (RPMSG [=y])

DTS文件配置

  reserved-memory {                                       m4_reserved {             reg= <0x8FF00000 0xF0000>;no-map;};          rpmsg_reserved {                                    reg= <0x8FFF0000 0x10000>;no-map;           };      };&rpmsg{vdev-nums = <1>;reg = <0x8FFF0000 0x10000>;status = "okay";};

这里给M4预留了0x8FF000000x8FFF0000的内存空间,这里需要和u-boot加载M4的地址保持一致;另外给RPMsg预留了0x8FFF00000x90000000的共享内存空间(也就是通信通道),这里需要和M4 FreeRTOS中给RPMsg的配置保持一致。

M4 FreeRTOS配置

imx6sx_m4/platform_info.c文件里面配置RPMsg的共享内存空间

  //256M#define VRING0_BASE                       0x8FFF0000#define VRING1_BASE                       0x8FFF8000

这里共享内存的地址空间也是0x8FFF00000x90000000,总共64KB大小。

运行RPMsg测试程序

首先使用M4 FreeRTOS源码构建rpmsg_pingpong_freertos_example.bin测试程序,然后在u-boot命令行使用tftp命令在内存0x8FF00000处运行它

U-Boot> tftpboot 0x8FF00000 rpmsg_pingpong_freertos_example.bin
U-Boot> dcache flush
U-Boot> bootaux 0x8FF00000

接着在内存里运行Linux和ramdisk系统

U-Boot> tftpboot 0x80000000 uImage
U-Boot> tftpboot 0x82000000 imx6sx.dtb
U-Boot> tftpboot 0x83800000 core-image.cpio.gz.u-boot
U-Boot> setenv bootargs 'console=ttymxc0,115200n8 root=/dev/ram0 rw'
U-Boot> bootm 0x80000000 0x83800000 0x82000000

进入系统后,使用insmod imx_rpmsg_tty.ko运行测试程序

$ insmod imx_rpmsg_tty.ko
$ /unit_tests/mxc_mcc_tty_test.out /dev/ttyRPMSG 115200 R 100 1000 &

Linux系统的log

insmod imx_rpmsg_tty.ko
Install rpmsg tty driver!
echo deadbeaf > /dev/ttyRPMSG
imx_rpmsg_tty rpmsg0: msg(<- src 0x1) deadbeaf len 8

FreeRTOS的log

RPMSG PingPong FreeRTOS RTOS API Demo...
RPMSG Init as Remote
Service handshake is done, M4 has setup a rpmsg channel [0 ---> 1024]
len:4   dst:1024        src:1024
Get Data From Master Side : deadbeaf

Linux RPMsg框架--以及应用于iMX6 SoloX连接A9和M4 Core相关推荐

  1. linux消息框架,远程处理器消息框架 - 基于Linux 简化 AMP 配置使其更方便更动态地分配资源...

    核心的 rpmsg 框架起到开关的作用,根据消息中包含的目的地址将消息传送到相应端点.由于消息报头包含源地址,因此可在不同处理器之间建立专用连接. 命名服务 处理器可通过向 rpmsg 框架的命名服务 ...

  2. 如何将CSS应用于iframe?

    我有一个简单的页面,其中包含一些iframe部分(以显示RSS链接). 如何将相同的CSS格式从首页应用到iframe中显示的页面? #1楼 上面有一些更改的作品: var cssLink = doc ...

  3. 记录一次与大神们的关于GAN应用于NLP的讨论

    说实话,是聆听了大神们,本人只是捧哏似的嗯.啊了几句. 之前paperweekly的GAN讨论组要进行一次讨论,给出了很多议题进行投票.里边有GAN in NLP.GAN and RL.半监督GAN等 ...

  4. 领域驱动和MVVM应用于UWP开发的一些思考

    领域驱动和MVVM应用于UWP开发的一些思考 0x00 起因 有段时间没写博客了,其实最近本来是根据梳理的MSDN上的资料(UWP开发目录整理)有条不紊的进行UWP学习的.学习中有了心得体会或遇到了问 ...

  5. linux加密框架 crypto 算法管理 - 哈希算法应用实例

    参考链接 Linux加密框架应用示例(二)_家有一希的博客-CSDN博客 linux加密框架 crypto 算法管理 - 应用角度讲解加密框架的运行流程_CHYabc123456hh的博客-CSDN博 ...

  6. linux加密框架 crypto 算法管理 - 应用角度讲解加密框架的运行流程

    参考链接 Linux加密框架的应用示例(一)_家有一希的博客-CSDN博客 本文大纲 本节将从应用角度说明加密框架的运行流程,包括加密框架如何管理算法.如何动态创建算法,应用模块如何创建算法实例.如何 ...

  7. linux加密框架 crypto 算法管理 - 算法检测

    参考链接 Linux加密框架的算法管理(四)_家有一希的博客-CSDN博客 函数介绍 如前所述,无论是静态算法还是动态算法,算法注册的最后一步都是进行算法正确性检验,一般流程是先调用__crypto_ ...

  8. linux加密框架 crypto 算法管理 - 动态和静态算法管理

    参考链接 Linux加密框架的算法管理(三)_家有一希的博客-CSDN博客 动态和静态算法管理 静态算法 加密框架中的算法分为静态算法和动态算法两种,其中静态算法指的是以"算法名.ko&qu ...

  9. linux加密框架 crypto 算法crypto_register_alg的注册流程

    算法注册流程 静态算法模块初始化 分组算法模块初始化 AES算法模块(aes_generic.c)的初始化接口aes_init实现向加密框架注册AES算法的功能,如下所示. aes_generic.c ...

最新文章

  1. Latex 中连加符号的上下界问题总结
  2. 基于NPOI的Excel数据导入
  3. 第三次作业+105032014101
  4. 使用dokcer搭建个人博客网站
  5. Python基础之条件判断
  6. 《Shell脚本学习指南》第四章 文本处理工具
  7. 顺序表中有效元素的长度_408数据结构之顺序表进阶(1)
  8. 《大话移动 APP 测试》
  9. hashCode和equals方法的关系
  10. vue aplayer 进度条无法拖动_「最近项目小结」使用Vue实现一个简单的鼠标拖拽滚动效果插件...
  11. 怎么在堆叠柱状图中体现百分比_微生物门类堆叠柱状图一文解决
  12. Xcode9安装插件,xcode9安装使用Alcatraz
  13. Excel文件的读取-xls格式篇
  14. 寒武纪“失速”,是AI芯片行业的阵痛?
  15. MySQL最全整理(面试题+笔记+导图),面试大厂不再被MySql难倒
  16. Android开发常见面试
  17. 保姆式RecyclerView下拉刷新、上拉加载更多Kotlin
  18. oracle索引整理
  19. 统计学习第二弹--描述性统计(理论公式)
  20. 沙奎尔·奥尼尔——盘点那些“巨人”的事①

热门文章

  1. MagicLeap SDK 安装指南
  2. 2018 ucla计算机排名,2018USNews美国最佳公立大学排名,UCLA和UCB并列第一
  3. 王道考研计算机网络第五章——传输层
  4. Boosting分类器
  5. 华为鸿蒙手机用大卡还是小卡,教你解决SIM卡剪卡导致华为P8手机不识卡的问题...
  6. rop检查_糖尿病、高血压人群为啥要定期检查眼睛?
  7. 生活小妙招---wifi遥控点火器
  8. apns php流程
  9. 关系网络数据可视化:1. 关系网络图Gephi
  10. visual studio 2015 下载