当前位置: 首页 > news >正文

【Linux】RPMSG通讯协议介绍

RPMSG协议通讯协议介绍

  • RPMSG,全称Remote processor Messaging。是一种核间通讯协议。在Linux Kernel中,已经内置了RPMSG。

  • Linux RPMSG基于共享内存,利用RPMSG可以高效的实现核间通信。比如Linux与FreeRTOS、Linux与Android,都可以使用RPMSG完成域间通信。

  • Linux端 RPMSG架构图(图片摘自网络
    请添加图片描述

  • FreeRTOS端RPMSG架构图(图片摘自网络
    请添加图片描述

RPMSG使用例子

  • RPMSG需要内核支持,Linux Kernel目前已经内置该协议。对于UserSpace,Linux内核提供了RPMSG对应的设备节点
# *表示数字,具体项目中的Driver开出来的节点名不同
# 比如/dev/rpmsg_ctrl0
/dev/rpmsg_ctrl*
  • 用户空间通过ioctl接口,利用/dev/rpmsg_ctrl*节点,可以创建用于通信的端口(Endpoint)。Endpoint创建时,要指定name、src端口、dst端口。

比如:Linux上创建一个端口,name:rpmsg_endpoint123,src:888,dst:666。那么对端(比如FreeRTOS),与之对应,name:rpmsg_endpoint123,src:666,dst:888。
在这里插入图片描述

  • 创建完Endpoint之后,两端便可以使用linux标准的read、write来进行通信交互了。

伪代码:

// 打开控制节点
int fd = open("/dev/rpmsg_ctrl123);/* struct ss_rpmsg_endpoint_info {char name[32];__u32 src;__u32 dst;__u32 id;__u32 mode;__u16 target_id;
}; */
ss_rpmsg_endpoint_info info;
info.name="rpmsg_endpoint123";
info.src=888;
inof.dst=666;
// 创建Endpoint
// 创建/dev/rpmsg*节点,*是数字,通过info.id获得。
ioctl(fd, SS_RPMSG_CREATE_EPT_IOCTL, &info);// 打开Endpointchar devPath[256];
snprintf(devPath, sizeof(devPath),  "/dev/rpmsg%d", info.id);
int endPd = open(devPath)// 使用Endpoint发送消息
write(endPd, buf, len);// 使用Endpoint读取消息
read(endPd, buf,len);

综上,利用RPMSG可以实现核间不同,在不同操作系统(域)间传递消息。基于共享内存,因此其通信效率较高。

http://www.lryc.cn/news/517204.html

相关文章:

  • Idea(中文版) 项目结构/基本设置/设计背景
  • 深入理解 Android 中的 ActivityInfo
  • Linux初识——基本指令
  • c/c++ 里的进程间通信 , 管道 pipe 编程举例
  • 【C++笔记】红黑树(RBTree)深度剖析和AVL树的对比分析
  • Pytorch初学
  • Golang学习笔记_20——error
  • 基于Vite+TS初始项目 | 不断更新
  • R语言装环境Gcc报错以及scater包的安装
  • 关于量子神经网络的思考
  • 注册中心如何选型?Eureka、Zookeeper、Nacos怎么选
  • 使用 Conda创建新的环境遇到的问题
  • Flutter项目开发模版,开箱即用(Plus版本)
  • Spring Boot + Jasypt 实现application.yml 属性加密的快速示例
  • arcgisPro加载CGCS2000天地图后,如何转成米单位
  • 多模态论文笔记——GLIDE(DALL·E 2模型核心部件)
  • mybatisPlus动态sql语句 ${ew.sqlSegment}
  • 【工具】HTML自动识别用户正在讲话 以及停止讲话
  • 小程序与内嵌网页的数据通信
  • Android - NDK:编译可执行程序在android设备上运行
  • 快速上手:采用Let‘sEncrypt免费SSL证书配置网站Https (示例环境:Centos7.9+Nginx+Let‘sEncrypt)
  • shell技能树-扩展变量
  • 基于RedHat9部署WordPress+WooCommerce架设购物网站
  • LabVIEW瞬变电磁接收系统
  • Docker入门篇[SpringBoot之Docker实战系列] - 第534篇
  • Linux系统扩容根 (/) 文件系统空间
  • JavaScript之JQuery
  • JAVA学习记录2
  • 计算机网络、嵌入式等常见问题简答
  • 中华人民共和国预算法实施条例