Linux RPMsg framework
Linux RPMsg framework 是在virtio framework上实现的一个消息传递机制,可以和远端处理器通信。它基于virtio vrings通过共享内存向远程CPU发送消息或从远程CPU接收消息。
vrings不是单向的,一个vring专用于发送到远程处理器的消息,另一个vring用于从远程处理器接收的消息。此外,可以在内存中创建共享缓冲区给本地和远端处理器来使用。
Mailbox framework将用于在共享缓冲区中等待新消息时通知核心。
基于这些框架,RPMsg框架实现了基于通道的通信。这些通道由文本名称标识,并具有本地(srouce)RPMsg地址和远程(destionation)RPMsg地址。
在远端处理器,还必须实现RPMSG框架。有几种解决方案,我们建议使用OpenAMP。
OpenAMP wiki文档
github.com/OpenAMP/o...
github.com/OpenAMP/o...
系统结构
remoteproc: remoteproc framework允许不同的平台/体系结构控制(打开电源,加载固件,关闭电源)远端处理器。该框架还为支持rpmsg协议的远程处理器添加了rpmsg virtio设备。更多详细介绍可以参考Linux remoteproc framework文档。
virtio: VirtIO framework 也支持虚拟化技术。它提供了一个基于共享环型缓冲区(vring)实现的高效传输层。更多关于这个框架的细节,请参考下面的链接:- Virtio: Linux的IO虚拟化框架(An I/O virtualization framework for Linux) www.ibm.com/develope...
virtio introduction - SlideShare www.slideshare.net/z...
rpmsg: 一种基于virti的消息总线,允许内核驱动程序与系统上可用的远程处理器通信。它提供了消息传递基础结构,便于客户端驱动程序编写有线协议消息。然后,如果需要,客户机驱动程序可以依次公开适当的用户空间接口。
rpmsg_client_driver客户端驱动程序,它实现与远端处理器关联的服务。当远端处理器使用“新服务声明”RPMsg消息请求相关联服务时,RPMsg框架将探测此驱动程序。
RPMsg定义
要实现Rpmsg客户端,需要理解channel和endpoint概念,以便更好地理解框架。
RPMsg channel:
RPMsg客户端与主处理器和远端处理器之间的通信信道相关联。这个RPMsg客户端由注册在RPMsg框架中的文本服务名称标识。当注册的本地服务名称与公布的远程服务之间发现匹配时,将建立通信通道。
RPMsg endpoint:
RPMsg endpoint通过RPMsg通道提供逻辑连接。一个RPMsg endpoint具有唯一的源地址和相关的回调函数,允许用户在同一个通道上绑定多个端点。当客户端驱动程序使用本地地址创建endpoint时,所有具有与endpoint本地地址相同的目标地址的入站消息都将被路由到该endpoint。请注意,每个通道都有一个默认endpoint,这使得应用程序无需创建新endpoint就可以进行通信。
Linux kernel RPMsg文档中有用户API的描述
www.kernel.org/doc/D...
最后编辑:SteveChen 更新时间:2024-10-18 15:16