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

【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);

// 打开Endpoint
 char 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.kler.cn/a/470548.html

相关文章:

  • C#开发——接口Interface
  • 前后端分离架构设计与实现:构建现代Web应用的基石
  • JVM实战—13.OOM的生产案例
  • 彻底学会Gradle插件版本和Gradle版本及对应关系
  • Android 性能优化:内存优化(实践篇)
  • 感知器的那些事
  • w140体育馆使用预约平台的设计与实现
  • CV-MLLM经典论文解读|OneLLM: One Framework to Align All Modalities with Language
  • netty系列(四)websocket client和server
  • 用CRD定义未来:解锁机器学习平台的无限可能
  • ollama+FastAPI部署后端大模型调用接口
  • 修改 页面 滚动条样式
  • 【React】漫游式引导
  • java开发springoot
  • 【苏德矿高等数学】第1讲:有界函数、无界函数、复合函数
  • DeepSpeed是什么,怎样使用
  • 个性化电影推荐系统|Java|SSM|JSP|
  • 【形式篇】年终总结怎么写:PPT如何将内容更好地表现出来
  • 5.C语言流程控制语句详解:if、switch、while、for、break、continue等
  • Vue Router v3.x 迁移到 v4.x(两者的区别)【路由篇】
  • 【模电】功率放大电路总结
  • 【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
  • 【渗透测试术语总结】
  • Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s
  • 人工智能的发展领域之GPU加速计算的应用概述、架构介绍与教学过程
  • 【H3CNE邓方鸣】路由协议概述+2025.1.5