当前位置: 首页 > 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可以实现核间不同,在不同操作系统(域)间传递消息。基于共享内存,因此其通信效率较高。

相关文章:

【Linux】RPMSG通讯协议介绍

RPMSG协议通讯协议介绍 RPMSG,全称Remote processor Messaging。是一种核间通讯协议。在Linux Kernel中,已经内置了RPMSG。 Linux RPMSG基于共享内存,利用RPMSG可以高效的实现核间通信。比如Linux与FreeRTOS、Linux与Android,都可…...

Idea(中文版) 项目结构/基本设置/设计背景

目录 1. Idea 项目结构 1.1 新建项目 1.2 新建项目的模块 1.3 新建项目模块的包 1.4 新建项目模块包的类 2. 基本设置 2.1 设置主题 2.2 设置字体 2.3 设置注释 2.4 自动导包 2.5 忽略大小写 2.6 设置背景图片 3. 项目与模块操作 3.1 修改类名 3.2 关闭项目 1. I…...

深入理解 Android 中的 ActivityInfo

深入理解 Android 中的 ActivityInfo 在 Android 开发中,ActivityInfo 是一个非常重要的类,它包含了关于 Activity 的元信息。这些信息通常是从 AndroidManifest.xml 文件中提取的,开发者可以通过 ActivityInfo 类来获取和操作这些信息。本文…...

Linux初识——基本指令

我们在linux下输入各种指令,其实就相当于在windows中的相关操作,比如双击,新建文件夹等。 以下是相关基本指令基本用法 一.ls(显示当前目录下的所有文件和目录) 那如何显示当前目录(我们所在的位置&…...

c/c++ 里的进程间通信 , 管道 pipe 编程举例

&#xff08;1&#xff09;以下是一个网上的使用 pipe 编程的范例&#xff1a; #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/wait.h>int main() {int pipefd…...

【C++笔记】红黑树(RBTree)深度剖析和AVL树的对比分析

【C笔记】红黑树(RBTree)深度剖析和AVL树的对比分析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】红黑树(RBTree)深度剖析和AVL树的对比分析前言一.红黑树的定义1.1 红黑树的概念1.2红黑树的规则1.3 红黑树对比A…...

Pytorch初学

创建虚拟环境 python控制台&#xff0c;jupyter notebook,python文件运行的差异&#xff0c;后续结合使用三者。 jupter主要可以对代码进行分割单独运行&#xff0c;主要做一些探索性工作。 数据集的常见存储模式 1、以标签命名图像。 2、单独存储图像的地址。 加载数据集…...

Golang学习笔记_20——error

Golang学习笔记_17——方法 Golang学习笔记_18——接口 Golang学习笔记_19——Stringer 文章目录 error1. 接口2. 创建3. 自定义错误4. 处理错误5. 实现Error接口 源码 error 在Go语言中&#xff0c;error 是一个内建的接口类型&#xff0c;用于表示和处理错误情况。它是Go语言…...

基于Vite+TS初始项目 | 不断更新

1 创建项目 1.1 初始化项目 # 创建项目 pnpm create vite# 使用vue-ts模板创建项目 pnpm create vite xyz-vue-app-ts --template vue-ts1.2 添加ts类型检查命令 添加 "type-check" 类型检查命令 {"name": "xyz-vue-app-ts-test","scri…...

R语言装环境Gcc报错以及scater包的安装

error: ‘timespec_get’ has not been declared in ‘::’ 80 | using ::timespec_get; 在conda 的虚拟环境中升级gcc的版本 conda install -c conda-forge gcc11 gxx11终极方法&#xff0c;在R的最新版本和环境下装啥都能成功&#xff01;&#xff01; 比如beyondcell的方法…...

关于量子神经网络的思考

其实在写这篇文章之前想了很多&#xff0c;主要是想法太超前&#xff0c;有可能颠覆未来机器智能行业甚至是影响世界。 1、计算机的历史 计算机的历史可以追溯到20世纪中叶&#xff0c;最早的电子计算机如ENIAC和EDVAC采用了冯诺依曼架构&#xff08;John von Neumann Archit…...

注册中心如何选型?Eureka、Zookeeper、Nacos怎么选

这是小卷对分布式系统架构学习的第9篇文章&#xff0c;第8篇时只回答了注册中心的工作原理的内容&#xff0c;面试官的第二个问题还没回答&#xff0c;今天再来讲讲各个注册中心的原理&#xff0c;以及区别&#xff0c;最后如何进行选型 上一篇文章&#xff1a;如何设计一个注册…...

使用 Conda创建新的环境遇到的问题

下载速度很慢 1、更新 conda update -n base -c defaults conda2、清理缓存 conda clean --all解决方法 方法 1&#xff1a;关闭严格的渠道优先级 检查是否开启了严格渠道优先级&#xff1a; conda config --show channel_priority 如果返回 strict&#xff0c;说明启用了严…...

Flutter项目开发模版,开箱即用(Plus版本)

前言 当前案例 Flutter SDK版本&#xff1a;3.22.2 本文&#xff0c;是由这两篇文章 结合产出&#xff0c;所以非常建议大家&#xff0c;先看完这两篇&#xff1a; Flutter项目开发模版&#xff1a; 主要内容&#xff1a;MVVM设计模式及内存泄漏处理&#xff0c;涉及Model、…...

Spring Boot + Jasypt 实现application.yml 属性加密的快速示例

Jasypt(Java Simplified Encryption)是一个专为Java应用程序设计的开源加密库,旨在简化加密和解密流程,保护敏感数据如密码、API密钥等。 jasypt-spring-boot-starter允许开发者在Spring Boot应用中轻松地实现加密和解密功能。 本篇介绍使用 jasypt-spring-boot-starter 以…...

arcgisPro加载CGCS2000天地图后,如何转成米单位

1、导入加载的天地图影像服务&#xff0c;一开始是经纬度显示的。 2、右键地图&#xff0c;选择需要调整的投影坐标&#xff0c;这里选择坐标如下&#xff1a; 3、点击确定后&#xff0c;就可以调整成米单位的了。 4、切换后结果如下&#xff1a; 如有需要&#xff0c;可调整成…...

多模态论文笔记——GLIDE(DALL·E 2模型核心部件)

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍了OpenAI的DALLE 2模型中重要的组成部分&#xff0c;用于图像生成的GLIDE模型及其论文。 文章目录 论文背景扩散模型&#xff08;Diffusion Models&…...

mybatisPlus动态sql语句 ${ew.sqlSegment}

mybatis-plus的${ew.sqlSegment}&#xff0c;${ew.sqlSelect}&#xff0c;${ew.customSqlSegment} ew是mapper方法里的Param(Constants.WRAPPER) Wrapper queryWrapper对象 简答介绍&#xff1a; ${ew.sqlSelect}&#xff1a;拼接select SQL主体 Select("select ${ew.…...

【工具】HTML自动识别用户正在讲话 以及停止讲话

【工具】HTML自动识别用户正在讲话 以及停止讲话 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>语…...

小程序与内嵌网页的数据通信

小程序与内嵌网页的数据通信 前言 微信小程序提供了web-view组件&#xff0c;允许开发者在小程序中嵌入网页。然而&#xff0c;由于小程序和网页运行在不同的环境中&#xff0c;它们之间的通信就需要依赖特定的机制来实现。然而我们日常的需求中&#xff0c;很多的时候都涉及…...

Android Studio移动开发入门:构想集成Phi-3-vision模型的智能相机App

Android Studio移动开发入门&#xff1a;构想集成Phi-3-vision模型的智能相机App 1. 从零开始的智能相机构想 想象这样一个场景&#xff1a;当你用手机拍摄一朵花时&#xff0c;相机不仅能自动识别花的品种&#xff0c;还能告诉你它的生长习性和养护要点&#xff1b;当你扫描…...

RGThree-Comfy:重新定义ComfyUI工作流效率的艺术创作引擎

RGThree-Comfy&#xff1a;重新定义ComfyUI工作流效率的艺术创作引擎 【免费下载链接】rgthree-comfy Making ComfyUI more comfortable! 项目地址: https://gitcode.com/gh_mirrors/rg/rgthree-comfy RGThree-Comfy是一个革命性的ComfyUI扩展套件&#xff0c;专为AI艺术…...

从零构建IPXE编译环境:避坑指南与实战解析

1. 为什么需要定制IPXE编译环境 最近在帮客户部署自动化装机系统时&#xff0c;发现标准PXE存在不少局限性。比如无法直接加载HTTP资源、不支持现代加密协议&#xff0c;最头疼的是不同硬件架构&#xff08;x86 BIOS/UEFI、ARM&#xff09;需要不同的引导文件。这时候IPXE就派…...

3分钟解锁全网资源下载神器:res-downloader终极使用指南

3分钟解锁全网资源下载神器&#xff1a;res-downloader终极使用指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是否曾…...

GB/T 28998-2012 重组装饰材检测

重组装饰材是指以普通树种木材的单板为主要原材料&#xff0c;采用单板调色、层积、模压胶合成型等技术制造而成的一种具有天然珍贵树种木材的质感、花纹、颜料等特性或其他工艺图案的新型木质装饰板方材。GB/T 28998-2012重组装饰材测试测试项目检测标准含水率GB/T 17657浸渍剥…...

终极指南:OBS智能背景移除插件让直播画面瞬间专业

终极指南&#xff1a;OBS智能背景移除插件让直播画面瞬间专业 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: https://gitc…...

别再只测功能了!手把手教你为数据防泄露系统设计一份实战测试用例(附WinPE、虚拟机等16个场景)

数据防泄露实战测试&#xff1a;从高危场景到防御验证的完整指南 当企业核心代码库在深夜被批量下载到某个境外IP时&#xff0c;安全团队往往要等到审计警报响起才发现问题。更令人不安的是&#xff0c;我们最近对50家科技公司的调研显示&#xff0c;83%的内部数据泄露都发生在…...

LabVIEW声音采集避坑指南:从麦克风选型到.lvm文件存储,新手必看的5个实战细节

LabVIEW声音采集避坑指南&#xff1a;从麦克风选型到.lvm文件存储的5个实战细节 第一次用LabVIEW做声音采集时&#xff0c;我对着波形图上跳动的噪声信号发呆了整整两小时——采样率设对了&#xff0c;接线也没问题&#xff0c;但采集到的音频就像老式收音机调频不准时的杂音。…...

如何快速部署YaeAchievement:原神成就数据自动化导出终极指南

如何快速部署YaeAchievement&#xff1a;原神成就数据自动化导出终极指南 【免费下载链接】YaeAchievement 更快、更准的原神数据导出工具 项目地址: https://gitcode.com/gh_mirrors/ya/YaeAchievement YaeAchievement是一款专为《原神》玩家设计的开源成就数据导出工具…...

NaViL-9B开源大模型落地:金融票据识别+风险点标注自动化案例

NaViL-9B开源大模型落地&#xff1a;金融票据识别风险点标注自动化案例 1. 项目背景与挑战 在金融行业&#xff0c;每天需要处理海量的票据和合同文件。传统的人工审核方式面临三大痛点&#xff1a; 效率瓶颈&#xff1a;一个熟练的审核员每天最多处理200-300份票据成本压力…...