TI-IPC_rpmsg_char_zerocopy

rpmsg_char_zerocopy

作为TI-AM62X系列提供的两种核间通信方式中的一种,rpmsg_char_zerocopy采用DMA方式,直接共享内存,核间并不频繁的传递消息内容,而是直接传递块地址,来一次发送大量消息,在数据量大的情况下占据优势。

linux脚本编译

  1. 获取项目源码 : git clone git://git.ti.com/rpmsg/rpmsg_char_zerocopy.git
  2. 配置TI_SDK : wget https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-PvdSyIiioq/09.01.00.08/ti-processor-sdk-linux-am62xx-evm-09.01.00.08-Linux-x86-Install.bin
  3. 执行下载好的SDK文件 : ./ti-processor-sdk-linux-am62xx-evm-09.01.00.08-Linux-x86-Install.bin
  4. 进入SD安装目录:cd cd ti-processor-sdk-linux-am62xx-evm-09.01.00.08/
  5. 复制dma_buf_phys.h头文件到交叉编译环境中:cp board-support/linux-<version>/include/uapi/linux/dma_buf_phys.h linux-devkit/sysroots/aarch64-linux/usr/include/linux
  6. Source SDK环境:source /linux-devkit/environment-setup
  7. 进入项目目录:cd /home/fl/ti/mcu_plus_sdk_am62x_08_03_00_07/examples/drivers/ipc/ipc_rpmsg_zerocopy/rpmsg_char_zerocopy ,并阅读该目录下README.md内容
  8. README.md中设备树相关内容与M4F固件相关,后面详细讲述。
  9. 进入linux脚本项目目录:cd linux
  10. 生成配置文件: autoreconf --install
  11. 根据当前编译器环境执行配置文件:./configure --host=aarch64-linux-gnu-gcc
  12. 生成脚本:make
  13. 生成的脚本在src目录下

M4F固件编译

  1. 配置SDK+MCU 8.03:wget https://downloads.ti.com/ccs/esd/tirex/zips/mcu_plus_sdk_am62x_08_03_00_07/all/mcu_plus_sdk_am62x_08_03_00_07__all.zip
  2. 配置sysconfig1.12.0:wget https://software-dl.ti.com/ccs/esd/sysconfig/sysconfig-1.12.0_2406-setup.run
  3. 配置TI_Clang1.3.1:wget https://software-dl.ti.com/codegen/esd/cgt_public_sw/ARM_LLVM/1.3.1.LTS/ti_cgt_armllvm_1.3.1.LTS_linux-x64_installer.bin
  4. 创建项目目录:cd /home/fl/ti/mcu_plus_sdk_am62x_08_03_00_07/examples/drivers/ipc; mkdir ipc_rpmsg_zerocopy
  5. 获取项目源码:git clone git://git.ti.com/rpmsg/rpmsg_char_zerocopy.git
  6. 进入rtos目录:参阅REMADE.md
  7. 设置MCU_SDK路径 :export MCU_PLUS_SDK_PATH=${HOME}/ti/mcu_plus_sdk_am62x_08_03_00_07
  8. 编译生成M4F固件 :gmake -s -C am62x-sk/system_freertos all,编译过程中可能遇到问题,需要修改代码中的uint_16t在这里插入图片描述
  9. 生成的.out在rpmsg_char_zerocopy/rtos/am62x-sk/m4fss0-0_freertos/ti-arm-clang/目录下
  10. 在该过程中选取和README.md中一样的SDK版本和sysconfig版本,因为其他版本会出现错误,说没有BGA包,关于BGA包的地方可在sysconfig文件中找到,更高版本的sysconfig文件中没有该包,同时该项目只能使用make进行编译,在CCS中导入时,会遇到BUG,说版本不匹配,可能的原因是当前CCS版本过高,尚未降低CCS版本以匹配该项目。
    在这里插入图片描述
  11. CCS导入问题解决:进入rpmsg_char_zerocopy/rtos/am62x-sk/m4fss0-0_freertos/ti-arm-clang/目录下vim example.projectspec文件,根据自己SDK版本将所有的下列字符修改为对应版本,我这里使用的AM62X系列的版本,所以修改为AM62X
    在这里插入图片描述

固件及设备树移植

  1. 固件移植方法很简单,以通用M4F固件移植方式移植即可,但是该固件版本较低,尚不支持运行时更新固件状态。
  2. 设备树移植参考ipc_rpmsg_zerocopy/rpmsg_char_zerocopy/README.md中内容
  3. 由于我们使用的米尔的开发板,故设备树文件修改如下图所示
    在这里插入图片描述
    在这里插入图片描述
  4. 重新编译设备树,更新开发板设备树。README.md中提到需要更新kernel和modules,但是我仅更新设备树文件一样可以打开该驱动。
  5. 设备树,M4F固件,脚本文件均更新后,在板子上进行测试。
  6. 测试时会出现一个问题,M4F的消息没有回传,查看M4F固件代码,如下图,能够发现有个函数在M4F不能够起作用,会卡死此处,于是注释掉该函数。在这里插入图片描述
    在这里插入图片描述
  7. 最终能够得到正确测试结果
    在这里插入图片描述

小结

该项目存在的两个问题

  1. .当SDK环境相关库文件适配成功rpmsg_char_zerocopy脚本后,可能会导致当前SDK环境编译出来的另一套核间通信机制rpmsg_char_simple脚本出问题哦(可能是同名库文件,但是其中内容有差异)。
  2. rpmsg_char_zerocopy的M4F固件只能在MCU_SDK8.03下编译,不知道后续版本更新会不会支持
  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值