Remi Pi 搭载的 RZ/G2L 芯片的一个特色就是异构多核,有两个 A55 和一个 M33 ,在米尔提供的 SDK 里,两个 A55 上跑 linux ,M33 裸跑或者跑 freertos 。由于架构不同,三个核无法跑一套系统(两个A55核上跑的就是同一套系统,linux在同构核心上支持smp),也就是 amp 场景了。
在异构处理器系统之间通讯,有一个常用的方式就是 RPMsg 协议。RPMsg(Remote Processor Messaging) 是基于 Virtio 的一种消息传递协议,利用 Virtio 的 virtqueue 实现处理器之间的消息传递,提供了一种高效、标准化的通信方式。RPMsg 通过定义消息端点(Endpoints),为每个通信参与方提供独立的地址空间,确保消息传递的准确性和安全性。
SDK 里提供了异构通讯的示例,M33的工程在 04_Sources/Cortex M33-example/M33/rzg2l-cm33-multi-os-pkg/rzg2l_cm33_rpmsg_demo 路径下。
导入工程,依次点击[File]->[Import]->[General]->[Existing Projects into Workspace]->[Next],选择 rzg2l_cm33_rpmsg_demo 工程。
编译后,生成如下文件:
拷贝到 SD 卡中,用于在 uboot 阶段加载并启动 M33,如下图:
加载 M33 完成后,在 uboot 输入 run bootcmd 启动A55。
A55 进入到根文件系统后,执行下图所示测试指令:
测试程序在等待 A55 和 M33 之间的通信通道建立后,A55 开始向 M33 发送消息,并将消息的大小从最小值 17 增加到最大值 488,当 M33 接收到 A55 发送的消息时并回送给 A55。
错误计数为0,测试程序成功通过。