多核异构核间通信Mailbox vs rpmsg

目录

一、关键术语解释

二、Mailbox与rpmsg对比 

三、rpmsg传输流程


异构核间数据通过共享内存实现数据传递,通过中断来触发发送、接收。

一、关键术语解释

IPC
Inter-Processor Communication

MailBox
IP which provides queued interrupt mechanism for communication channel

VRing
Ring Buffer in shared memory

Rpmsg
Remote Processor Messaging,queue on local memory

二、Mailbox与rpmsg对比 

Mailbox

  • 支持数据长度:4Bytes * 15reg = 60Bytes (不同SoC可能不同)
  • 传输方式:直接使用mbox寄存器
  • 应用场景:简单控制命令,比如相机启流停流

rpmsg

  • 支持数据长度:512Bytes(496Bytes数据有效载荷,前16Bytes称为rpmsg标头,由传输层内部使用,其中包含源地址、目标地址和数据大小。)
  • 传输方式:使用mbox作为中断传递,在mbox中传递vqid(Virtual Queue ID,标识虚拟消息队列的id),实际的IPC数据存在rpmsg-buf区的VRing中。
  • 应用场景:较长控制命令

注意,上述数据长度芯片厂商都是可以修改,甚至rpmsg的实现方式。

另有共享内存方案,也是基于Mailbox,会比rpmsg传输内容更多,没有被广泛采用,在此不做深入探讨。有兴趣看下面博客:

https://betheme.net/qianduan/5063.html?action=onClickhttps://betheme.net/qianduan/5063.html?action=onClick

三、rpmsg传输流程

在这里插入图片描述

rpmsg的步骤顺序描述如下:

1、应用程序向给定目的地(CPU、端点)发送消息
2、消息首先从应用程序复制到两个CPU之间使用的VRING。 此后,IPC 驱动程序在硬件邮箱中发布 VRING ID。
3、这会触发目标 CPU 上的中断。 在目标 CPU 的 ISR 中,它提取 VRING ID,然后根据 VRING ID 检查该 VRING 中的任何消息
4、如果收到消息,它从VRING中提取消息并将其放入目标RPMSG端点队列中。 然后触发在此 RPMSG 端点上阻止的应用程序
5、然后应用程序处理接收到的消息,并使用相同的RPMSG 和VRING 机制在相反方向回复发送方CPU。

Core1
application调用rpmsg_send接口,把数据copy到本地queue
virtio-ring把data从localqueu搬运到共享内存中的vring中
同时写mailbox寄存器进行kick操作

Core2
触发IPC中断
中断处理函数中把数据从vring中搬运到localqueue
中断处理函数callback,receivecount ++
上层APP调用rpmsg_recv,把数据copy到应用中去

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值