在当今的电子技术领域,嵌入式系统的发展日新月异,而异核通信技术在其中扮演着至关重要的角色。Open 软件框架作为针对非对称多处理(AMP)系统开发应用程序所需的软件框架,为实现核间通信提供了强大的支持。用户通过调用该框架组件中的 API,就能轻松实现核间通信。
在具体的硬件架构中,以 STM32MP157 为例,其 A7 内核和 M4 内核通过 IPCC 中断机制来通知对方在共享中有新的数据或者数据已经被处理。需要注意的是,在 A7 这边已经默认开启了 IPCC 中断,而 M4 一定要开启 IPCC 中断,否则 M4 就无法使能 OpenAMP。同时,HSEM(硬件信号量)默认开启,它的作用是确保所有内核可以有序地访问公共资源。内核能够使用信号量来保证对外围设备的独占访问和信息交换,这对于系统的稳定运行至关重要。
从系统架构的角度来看,存在同构和异构的概念。如果所有的 或的架构都一样,那么称为同构;反之,如果所有 CPU 或的架构有不一样的,那么就称为异构,像 STM32MP157 有 A7 和 M4 核就是典型的异构情况。多核操作系统体系主要包括 SMP(对称多处理)结构、AMP(非对称多处理)结构和 BMP(边界多处理)结构。SMP 结构一般运行在同构下,由一个 OS 负责协调两个处理器,两个处理器共享内存,每个运行的应用程序地址相同,通过 MMU(内存管理单元)将它们映射到主存的不同位置。而 AMP 结构则是每个内核运行自己的 OS 或同一 OS。
基于 OpenAMP,生命周期管理是通过 Remoteproc 来实现的,内核间通信是通过 RPMsg 来管理的。IPCC 通信框架在异核通信中也起着关键作用,邮箱依赖于 IPCC,STM32MP157 的 IPCC 硬件模块有 6 个双向通道,每个通道分为两个子通道,共有 12 个子通道。处理器之间交互的数据存放于共享内存中,IPCC 中断机制用于当一个数据包被放入共享内存时,通知另一个 CPU 有新的数据包需要处理。A7 内核的中断控制器是 GIC,M4 内核的中断控制器是 NVIC,且处理器之间要交互的数据是在共享内存中传输的,在 IPCC 处封装了邮箱(Mailbox)框架,用于通知 CPU 在共享内存中有数据要处理。
邮箱框架的工作流程较为复杂。首先要注册邮箱控制器,邮箱客户端发送数据前需先申请通道,接着客户端发送数据并记录数据,邮箱控制器将底层接收到的数据回调给上层应用,当数据发完时,邮箱控制器通知上层当前数据已经发送完成,邮箱客户端释放通道。RemoteProc 软件框架解决了远程处理器生命周期的问题,RPMsg 软件框架解决了核间通信的问题,M4 主要依赖 OpenAMP 库中已有的软件框架来实现和 A7 通信。
Virtio(虚拟化模块)中的 vring 是指向数据缓冲区指针的 FIFO 队列,有两个单向的 vring,一个用于发送到远程处理器的消息,另一个用于从远程处理器接收的消息,两个 vring 组成一个环形,其缓冲区就是两个处理器的共享内存。在实际操作中,A 核远程启动 M4 核(远程协处理器)有特定的脚本指令,例如加载固件、启动固件和关闭固件运行等操作。而且 A7 和 M4 之间通过 RPMsg 进行核间通信时,需要 A7 发送条消息,RPMsg 通道才会被激活,通道激活以后,M4 才能给 A7 发送数据。
以下是相关的图片说明:
- 异核通信框架:

- SMP 结构示意图:

- AMP 结构示意图:

- IPCC 通信框架:

- IPCC 硬件模块通道示意图:

- 邮箱框架相关:


- Virtio vring 示意图:

- 双核通信流程图:

- 加载 rpmsg 驱动过程图:
