【Linux】RPMSG通讯协议介绍

devtools/2025/1/9 3:07:45/

RPMSG_0">RPMSG协议通讯协议介绍

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

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

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

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

RPMSG_9">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.ppmy.cn/devtools/148448.html

相关文章

Unity3D 搭建ILRuntime开发环境详解

一、引言 ILRuntime是一款基于C#的热更新框架,它能够在运行时动态加载和执行C#代码,从而实现热更新功能。本文将详细介绍如何在Unity3D中搭建ILRuntime开发环境,并提供技术详解以及代码实现。 对惹,这里有一个游戏开发交流小组&…

Python自学 - 函数初步(内置函数、模块函数、自定义函数)

1 Python自学 - 函数初步(内置函数、模块函数、自定义函数) 1.1 内置函数 几乎所有的编程都会提供一些内置函数,以便完成一些最基本的任务,Python提供了丰富的内置函数,熟悉内置函数可以给工作带来极大便利。   Python官方的内置函数介绍网…

功能篇:页面实现实时的时钟功能

要在网页上实现一个实时的时钟功能,可以使用HTML、CSS和JavaScript。下面是一个简单的例子,它创建了一个数字时钟,显示当前的时间,并每秒更新一次。 ### HTML 首先,在HTML文件中定义一个用于展示时间的元素&#xff1…

Python中的OS库

Python中的OS库 1. 导入os模块2. 文件和目录操作2.1 获取当前工作目录2.2 更改当前工作目录2.3 列出目录内容2.4 检查路径是否存在2.5 检查是否为文件或目录2.6 创建目录2.7 删除目录2.8 重命名文件或目录2.9 删除文件2.10 文件属性 3. 环境变量3.1 获取环境变量3.2 设置环境变…

【高阶数据结构】哈希表封装unordered_map、unordered_set

哈希表封装unordered_map、unordered_set 1.源码及框架分析2.模拟实现unordered_map和unordered_set1.支持 insert 的实现2.支持 iterator 的实现3.unordered_map支持 operator [] 的实现 3.总代码1.HashTable.h2.UnorderedMap.h3.UnorderedSet.h4.Test.cpp 1.源码及框架分析 …

leetcode-----mysql

1934. 确认率 - 力扣(LeetCode) 表: Signups -------------------------- | Column Name | Type | -------------------------- | user_id | int | | time_stamp | datetime | -------------------------- User_id是该表的主键…

太速科技-138-1路1Gsps AD 1路1Gsps DA高速采集存储回放设备

1路1Gsps AD 1路1Gsps DA高速采集存储回放设备 一、产品简介 产品基于1Gsps的AD,1Gsps的DA 实现PCIe的数据采集、存储、回放功能。硬件包括FPGA采集播出卡、PCIe固态盘、超威服务器。 二、采集卡性能指标采集卡原理框图: 板卡…

1、pycharm、python下载与安装

1、去官网下载pycharm 官网:https://www.jetbrains.com/pycharm/download/?sectionwindows 2、在等待期间,去下载python 进入官网地址:https://www.python.org/downloads/windows/ 3、安装pycharm 桌面会出现快捷方式 4、安装python…