NXP视频:S32G-VNP-RDB2参考设计的IPCF支持_NXP 半导体
IPCF通信原理:
ipc-shm的操作:比如cpu1要给cpu2传输数据:
- cpu1就先把数据拷贝到共享内存空间,然后再设置一个标志,cpu2检测到这个标志就会触发中断,并且在中断读取共享内存空间的数据。
- 当cpu2读写完这个数据之后,就会同步到cpu1的内存,并将状态改为可读写状态,同步到cpu1.
消息队列;环形,buffer descripter来维护两个OS之间的通信。
OS1上的内存池(共享内存):OS1发送的时候ipc_shm_acquire_buf()【即从共享内存拿一片数据】,然后发送数据【往共享内存写数据】,并同步到这片内存到OS2的共享内存。
产生中断通知对端OS。
OS2收到中断:拷贝OS1调用ipc_shm_acquire_buf()操作的共享内存的数据,释放这片共享内存pc_shm_release_buf(),并同步到OS1的共享内存。
-
编译ipcf源码,编译生成驱动
- 下载源码
git clone https://source.codeaurora.org/external/autobsps32/ipcf/ipc-shm
make 生成ko,然后通过insmod 加载这个ko驱动到kernel, 在调用ipcf的接口。
- 查看 readme.txt,如下操作测试
Running the application
=======================
1. If sample was built manually, copy ipc-shm-dev.ko and ipc-shm-sample.ko in
rootfs2. Boot Linux: see section "How to boot" from Auto Linux BSP user manual.
3. Insert IPCF kernel modules after Linux boot::
insmod /lib/modules/`uname -r`/extra/ipc-shm-dev.ko
insmod /lib/modules/`uname -r`/extra/ipc-shm-sample.ko4. Clear the kernel log::
dmesg -c > /dev/null
5. Send 10 ping messages to remote OS and display output from kernel log::
echo 10 > /sys/kernel/ipc-shm-sample/ping
dmesg -c6. Repeat previous step with different number of messages
7. Unload the modules::
rmmod ipc-shm-sample ipc-shm-dev