核间通信机制
在嵌入式多核系统中,**核间通信(Inter-Core Communication, ICC)**的核心原理是:让多个 CPU 核心在无需共享操作系统的前提下,安全、实时地交换数据与控制信息。根据搜索结果,当前主流实现思路可归纳为“共享内存 + 中断通知 + 通道/缓冲区管理”三层模型,并衍生出多种软硬件协同机制。
1. 物理层:共享内存
片上或片外 RAM 被划分为多核共享区域(DDR、MSRAM 等),每个核心通过 MMU/MPU 把同一段物理地址映射进自己的虚拟空间,实现“零拷贝”数据交换。
为避免竞态,共享区通常再细分为:
TX/RX Vring Buffer(发送/接收环形队列)
消息池、设备描述区、状态标志区等。
对性能要求极高的 AMP(非对称多处理)场景,会额外把控制结构体与数据缓冲区分离,减少 Cache 一致性开销。
2. 驱动层:中断 + 通道协议
Mailbox / IPC Notify
每个核心拥有独立中断线,发送方写完数据后触发对方中断,实现“写 → 中断 → 读”的握手;小数据量(几个字节~几十字节)直接通过寄存器或 FIFO 传递。RPMsg(Remote Processor Messaging)
在 Mailbox 基础上封装一套面向字节流的通道协议:主核把共享内存切成 USED/AVAIL 两块环形缓冲区(Virtqueue);
利用 vring 描述符记录长度、地址;
收发双方仅更新索引、触发中断,即可完成可变长度消息传递;
驱动隐藏了裸机寄存器细节,Linux 侧表现为
/dev/rpmsgX
字符设备,RTOS 侧映射为类似串口的 API。
无锁环形队列 / 虚拟通道
专利方案中,把“一条物理环队列”虚拟成多条逻辑通道,各核任务通过独立读写指针完成无锁通信,既省空间又避免上下文切换。