个人做什么网站,wordpress新文章加new,中国银行全球门户网站,企业网站建设价钱RPMSG协议通讯协议介绍 RPMSG#xff0c;全称Remote processor Messaging。是一种核间通讯协议。在Linux Kernel中#xff0c;已经内置了RPMSG。 Linux RPMSG基于共享内存#xff0c;利用RPMSG可以高效的实现核间通信。比如Linux与FreeRTOS、Linux与Android#xff0c;都可…RPMSG协议通讯协议介绍 RPMSG全称Remote processor Messaging。是一种核间通讯协议。在Linux Kernel中已经内置了RPMSG。 Linux RPMSG基于共享内存利用RPMSG可以高效的实现核间通信。比如Linux与FreeRTOS、Linux与Android都可以使用RPMSG完成域间通信。 Linux端 RPMSG架构图图片摘自网络 FreeRTOS端RPMSG架构图图片摘自网络
RPMSG使用例子
RPMSG需要内核支持Linux Kernel目前已经内置该协议。对于UserSpaceLinux内核提供了RPMSG对应的设备节点
# *表示数字具体项目中的Driver开出来的节点名不同
# 比如/dev/rpmsg_ctrl0
/dev/rpmsg_ctrl*用户空间通过ioctl接口利用/dev/rpmsg_ctrl*节点可以创建用于通信的端口Endpoint。Endpoint创建时要指定name、src端口、dst端口。
比如Linux上创建一个端口name:rpmsg_endpoint123src:888dst666。那么对端比如FreeRTOS与之对应name:rpmsg_endpoint123src:666dst888。
创建完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.namerpmsg_endpoint123;
info.src888;
inof.dst666;
// 创建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可以实现核间不同在不同操作系统域间传递消息。基于共享内存因此其通信效率较高。