IPC模块介绍
IPC(Inter-Processor Communication)模块是用于多核之间的通信,支持同构核和异构核之间的通信,软件上基于buffer-ring进行共享内存的管理,硬件上基于MailBox实现核间中断。IPCF具有多路通道,大数据传输,适用多种平台的特点。RPMSG基于开源协议框架,支持Acore与VDSP的核间通信。
IPCF软硬件组件框图
Acore与MCU之间的核间通信,Acore侧主要使用IPCFHAL,MCU侧使用IPCF,其中IPCFHAL是基于IPCF封装了一层接口,用于用户态与内核态的数据传递。

IPC典型使用场景

IPC典型应用场景有OTA模块、诊断模块、规控、CANHAL等。
IPC实例分配方案
IPC Acore侧实例编号范围为[0-34],分别用于Acore与MCU通信的实例[0-14]、Acore与VDSP通信的实例[22-24]、Acore与BPU通信的实例[32-34],其余实例做其它私有用途。Acore与MCU通信可使用实例[0-8],实例[4-6]默认为客户预留,若用户不需要CANHAL、规控等业务,可以自行修改配置文件。S100中AOCRE与MCU的IPC通信情况可以查阅 MCU IPC使用指南 中的IPC 使用情况章节。
Acore侧配置实例方法
Acore侧配置实例可通过设备树文件配置,配置路径为:
source/hobot-drivers/kernel-dts/drobot-s100-ipc.dtsi
source/hobot-drivers/kernel-dts/include/drobot_s100_ipc.h
设备树配置信息如下(仅供参考):
ipcfhal_cfg: ipcfhal_cfg {
status = "okay"; #节点状态,不需要改动
compatible = "hobot,hobot-ipcfhal"; #节点属性,不可改动
/****************instance--num_chans--num_bufs--buf_size****************/
ipc-ins = <&ipc_instance0 8 8 0x2000>, #(Acore&MCU)用于CANHAL
<&ipc_instance1 8 8 0x1000>, #(Acore&MCU)用于规控
<&ipc_instance2 2 8 0x800>, #(Acore&MCU)用于规控
<&ipc_instance3 8 8 0x1000>, #(Acore&MCU)用于crypto
<&ipc_instance4 8 8 0x1000>, #(Acore&MCU)空闲,用户可自行配置
<&ipc_instance5 8 8 0x1000>, #(Acore&MCU)空闲,用户可自行配置
<&ipc_instance6 8 8 0x1000>, #(Acore&MCU)空闲,用户可自行配置
<&ipc_instance7 8 8 0x1000>, #(Acore&MCU)透传uart,spi,i2c等外设和运行mcu侧cmd应用
<&ipc_instance8 8 8 0x1000>, #(Acore&MCU)部分空闲,用户可自行配置
<&ipc_instance9 2 5 0x400>, #(Acore&MCU)私有实例,内部预留
<&ipc_instance10 1 5 0x200>, #(Acore&MCU)私有实例,内部预留
<&ipc_instance22 8 8 0x1000>, #(Acore&VDSP)VDSP预留,暂未对客户开放
<&ipc_instance23 8 8 0x1000>, #(Acore&VDSP)VDSP预留,暂未对客户开放
<&ipc_instance24 8 8 0x1000>; #(Acore&VDSP)VDSP预留,暂未对客户开放
};