I.mx7 android,i.MX7中A核与M核的通信机制----RPMsg

RPMsg是一个多核通信栈,已经在FreeRTOS BSP里集成了,可用于与i.MX A7和M4核进行通讯。这个协议栈来源于github上的一个开源项目OpenAMP (see http://github.com/OpenAMP/open-amp)

除了RPMsg API,这个版本中没有包含OpenAMP的其他特性.

远程处理器消息传递(RPMsg)是一种基于virtio的消息传递总线,允许在非对称多处理(AMP)系统中存在的同构或异构核上运行的独立软件上下文之间的处理器间通信(IPC)。RPMsg组件源代码最近作为开放式非对称多处理(OpenAMP)框架的一部分发布.RPMsg API符合上游Linux3.4.x内核中存在的RPMsg总线基础结构。

原始RPMsgAPI基于通过已注册的接收回调处理中断上下文中的传输数据(消息),该回调在接收到消息时被调用。

这种方法的不便之处在于,接收数据的所有处理必须在中断上下文中完成,或者必须将消息复制到临时应用程序缓冲区中以供以后处理。

可用API的两种用法都与实时操作系统(RTOS)的概念不兼容,因为中断总是抢占正在运行的任务,无论其当前优先级如何,并且这种中断可以在随机日期发生并且可以

采取随机的执行时间。这可能会在实时系统时序中引入额外的抖动。此外,使用RTOS进行应用程序开发的做法是拥有多个独立的顺序上下文。

拥有阻塞顺序API更自然,更方便,原始RPMsgAPI中没有。

阻塞API的一个很好的例子是套接字接口或任何类似POSIX的接口。

因此,自然趋势是为应用程序员提供这种接口。

总而言之,RPMsgAPI的RTOS感知扩展的优点如下:

•中断上下文中无数据处理

•阻塞式接收API

•零拷贝发送和接收API

•允许由RTOS提供的超时接收

•与LinuxOS上游兼容

恩智浦对RPMsg的贡献包括在原始基础RPMsg层之上创建的两个附加层:

RPMsg扩展层允许用户分配和释放virtio tx缓冲区,以及实现零拷贝发送功能。 RPMsg扩展层API旨在用于裸机应用程序。

RPMsg RTOS层解决了上面讨论的基于RTOS的应用程序需求(处理中断上下文之外的接收数据,阻塞接收API实现,零复制机制)。

这个支持RTOS的RPMsg API层分为多个C模块:

rpmsg_rtos.c/.h包含一个通用实现,它不依赖于使用的RTOS,也不依赖于使用的平台。

在 /porting//platform.c/.h 和platform_info.c中,是依赖于平台(SoC)的功能。

在 /porting/env//rpmsg_porting.c/.h中,RTOS的抽象是使用platform.h中的函数实现的,以便与硬件建立连接。但是,rpmsg_porting.c/.h模块本身与硬件无关。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值