IPCF软件包包含共享内存上的通信驱动程序,支持自动存储、免费存储、西风和裸金属。
https://source.codeaurora.org/external/autobsps32/ipcf/ipc-shm/
HW和操作系统无关;HW抽象组件:抽象在各种HWIP模块(MSCM,INTC…);API。IPCF系统架构图如下:
非托管通道数据流:(类似于POSIXShM)缓冲区管理被禁用,并且应用程序拥有整个通道内存;例如:视频流或非关键数据交换。每个应用程序都拥有一半的通道内存。IPCF非托管通道数据流如下:

托管通道数据流:内存被分成缓冲区池,缓冲区管理由驱动程序控制;例如:CAN转发或flash更新。可以同时处理多个数据流。IPCF管理的通道数据流如下:

intercore interrupts (硬件通知)polling method (通过轮询发送和接收由用户管理)IPCF驱动程序通过中断合并技术减少了接收中断的开销,避免了风暴中断。当一个接收中断被触发时,该代码禁用该中断,处理接收FIFO中的所有缓冲区描述符,然后重新启用该中断。具体流程如下:

Linux IPCF共享内存内核驱动程序支持通过共享内存与运行在同一处理器的不同核心上的RTOS进行通信。该驱动程序伴随着一个示例应用程序,该应用程序也是一个树外内核模块,它演示了与RTOS应用程序的乒乓信息通信(更多细节请参阅示例目录中的自述文件)。驱动程序和示例应用程序被集成为NXP AutoLinuxBSP中的树外内核模块。这个Linux驱动程序的源代码发布在source.codeaurora.org上。
Linux内核git clone https://source.codeaurora.org/external/autobsps32/linux/
IPCF源码git clone https://source.codeaurora.org/external/autobsps32/ipcf/ipc-shm/
我这里内核使用的是bsp30.0版本的源码,下载后记得切换分支
git branch -a

IPCF为bsp30.0版本驱动git checkout -b remotes/origin/release/bsp30.0

目录结构如下,ipcf驱动和Linux内核源码目录在同一路径

export ARCH=arm64
export CROSS_COMPILE=aarch64-none-linux-gnu-
export PATH=$PATH:/home/zhang/linux/02_s32g274a/01_tools/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin
make -C ./ipc-shm/sample KERNELDIR=$PWD/linux modules
