一. 概述
1. 什么是IPC : ti ipc全称为 Inter-Processor Communication,即核间通信,与 linux 中的概念不同,ti 的ipc是用在不同 cpu间通信的软件包;而linux ipc指的是进程间通信。
2. ipc启动过程:AM5728 有两个Cortex A15,两个C66x DSP和两个ARM M4核。 A15通常运行HLOS,例如Linux / QNX / Android,DSP和M4运行RTOS。 在启动过程中,U-Boot 启动系统内核加载A15。A15来启动DSP和M4内核;启动过程如下
3. ipc软件框架:在linux内核启动DSP/M4时,需要两个关键驱动程序:remoteproc和 rpmsg,如下图所示, remoteproc 用来找到具体的cpu从核,rpmsg用来建立核间通信
二. 编译 ti ipc examples 和 执行examples的方法(主要介绍 linux端编译方法:)
1. 在 linux SDK目录中 Rules.make 中添加如下
export TI_RTOS_PATH=<RTOS_SDK_INSTALL_DIR> export IPC_INSTALL_PATH=<RTOS_SDK_IPC_DIR>
2. 在 linux SDK顶层目录执行 make ti-ipc-linux 和 make ti-ipc-linux-examples
在 processor_sdk_rtos_xx 目录 执行 source ./setupenv.sh 和 make ipc_bios
3. 编译出的可执行程序目录:
arm端: ipc_xx/examples/<device>/ex_xx/host/bin/debug/app_host
dsp端:ipc_xx/examples/<device>/ex_xx/dspx/bin/debug/xx.xe66
ipu端(M4):ipc_xx/examples/<device>/ex_xx/ipux/bin/debug/xx.xem4
4. 将编译出的可执行程序拷贝到 5728的根文件系统中,dsp端的可执行程序,会链接到
/lib/firmware 目录下,名称为 dra7-dsp1-fw.xe66 dra7-dsp2-fw.xe66。(ipu同理)
5. 将dsp的链接文件删除,重新链接。此处以 dsp1为例
rm /lib/firmware/dra7-dsp1-fw.xe66
ln -s /home/root/server_dsp1.xe66 /lib/firmware/dra7-dsp1-fw.xe66
6. 重新绑定dsp,来执行ipc demo
cd /sys/bus/platform/drivers/omap-rproc/
echo 40800000.dsp > unbind
echo 40800000.dsp > bind
成功启动的打印信息如下:
注:1. 编译时,linux 和 RTOS 的SDK版本号一定要对应,不然编译会出现稀奇古怪的错误
2. 查看dsp程序打印的方法:cat /sys/kernel/debug/remoteproc/remoteproc1/trace0
3. 增加linux 端打印的方法:export IPC_DEBUG=x (x代表打印等级,可为0,1,2)
三. ipc 底层移植方法
1. 编译linux内核和uboot。其中有两个关键的驱动程序需要选中,且编译成模块(M)
2. 使用buildroot构建根文件系统。
2. 安装内核和uboot。
sudo make linux_install
sudo make u-boot_install
3. 进入ipc_xx目录,安装ipc库。
make install prefix=<target filesystem>/usr
4. 将ipc 可执行程序拷贝到根文件系统。
a. 将app_host 和 server_dsp1.xe66拷贝到文件系统
b. 在/lib目录下,创建文件夹 mkdir firmware
c. 链接 dsp程序。ln -s /home/server_dsp1.xe66 /lib/firmware/dra7-dsp1-fw.xe66
5. 执行ipc守护进程 lad_dra7xx。在目录 /usr/bin/lad_dra7xx
注:1. 在安装uboot时,尽量不要复制粘贴uboot 来替换,会导致uboot起不来
2. 构建文件系统时,有个 dl 离线包,在 make xxx_defconfig 完成后,将自己的离线包替换生成的离线包,避免再次下载
3. lad_dra7xx,为ipc执行时的守护进程。如果不执行此程序,ipc就无法执行。
关于lad细节,可以参照 IPC_Install_Guide 和 http://software-dl.ti.com/processor-sdk-linux/esd/docs/latest/linux/Foundational_Components_IPC.html?highlight=lad