This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/AM5728:重建 IPC 和 IPC 示例

Guru**** 2539500 points
Other Parts Discussed in Thread: SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/631296/rtos-am5728-rebuilding-ipc-and-the-ipc-examples

器件型号:AM5728
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

您好!

我正在尝试从来源重建 IPC 和 IPC 示例。

当我使用随附的预构建库和软件包时:

TI-processor-sdk-rtos-am57xx-evm-04.01.00.06
TI-processor-sdk-linux-am57xx-evm-04.01.00.06
开箱即用。

对于我从来源构建的开发环境、请按照此处的说明表单操作:

processors.wiki.ti.com/.../IPC_Install_Guide_Linux  

(我还安装了 xdctools、cgt6000和编译的 SYSBIOS)

只要我不指定 CMEM_INSTALL_DIR、这就很好。 如果我提供了一个 CMEM_INSTALL_DIR (在上面提到的处理器 wiki 页面中列为可选)、则会失败:

/[.path.]/bin/arm-buildroot-linux-gnueabihf-gcc -DPACKAGE_NAME="TI\ IPC\"-DPACKAGE_TARNAME="TI-IPC\"-DPACKAGE_VERSION="3.0.0\"-DPACKAGE_STRING="TI\3.0_DHACKAGE_STRINES=-DPACKA1_DH_SH_DE=1-DHAVE_SYS_DREST_1 -DHAVEST_1 -DHAVE=TI_1 -DPACKAGE_1 -DH_SYS_DR_1 -DHAVE=TI_COMMENCE_1 -DPAC_DHAVE=1 -DHAVE_DHAVE=-DHAVEST_H_1   -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET=64 -I./../../hlos_common/include -D_GNU_SOURCE -Wall -pthread -I/[.path.]/share/ti-cmem/include -i[.path.]/build/linux-custom/include/generated/uapi -I./../../linux/include   `/../../linux/src/tests/GateMPApp.c -I./../../packages -D_LARGE_SOURCE -'-64_e'.tps.e_eMP./../../linux/src/tests/GateMPApp.c -out.e.e.e+-tps.out.e.e.e.e_out.e.e.e.e.e.e+`文件-tps.tps.g.e.e.e_out.e.e.e.e.emp.e.e.e.emp.e.e.e.e.e.e.e.e+-out.e.e.e.e.e.
make[2]:***没有规则使目标'/[.path.]/share/ti-cmem/src/cmem/api/.libs/libticmem.a 成为"GateMPApp"所需的目标'/[.path.]。  停下。

true、libticmem.a 不是由 cmem Makefile 生成的。 (构建 libticmem.la、而不是存档的.A 格式)。

没有 CMEM_INSTALL_DIR GateMPApp.c 的情况下不会生成、因此不会失败。

如果我只是省略 CMEM_INSTALL_DIR、则最终会安装 IPC、但编译 ex02_MessageQ 示例失败、其方法是:

未找到 IpcMemory.loadSegment

问题:

何时应指定 CMEM_INSTALL_DIR 变量?

ex02_MessageQ 编译错误是否与缺少 CMEM_INSTALL_DIR 参考相关?

从源创建 IPU 和 DSP 二进制文件的建议工作流程是什么?

此致、

环路2.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    LO2、

    libticmem.a 应位于 ludev/src/cmem/api/.libs 下。 一些示例/测试用例使用 CMEM、因此需要 CMEM_INSTALL_DIR。 ex02_MessageQ 编译错误应该与缺少的 CMEM_INSTALL_DIR 引用无关。

    $ ls
    cmem.o libticme.a libticm.la libticme.lai libticme.so libticme.so.1 libticme.so.1.0.0

    您能否尝试像这样构建 cmem:
    $./configure --host=arm-linux-gnueabihf cc=/home/user/gcc-linaro-4.9-2015.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc --prefix=/home/user/ludev/generate
    $ make;sudo make install

    此致、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Garret、

    感谢您的回答。

    我设置了一个新的清理目录并安装了:

    Linux-4.9.41
    TI-CGT-6000
    TI-CGT-ARM
    TI-cmem
    TI-IPC (+示例)
    TI-SYSBIOS
    TI-xdctools

    我使用以下命令构建 cmem:

    ./configure --host=arm-linux cc=/data/ti/e2e/host/bin/arm-linux-gcc --prefix=/data/ti/e2e/ti-cmem-install
    进行;进行安装

    构建了 libticmem.a 和 libticmem.so。
    (我还构建了内核模块)

    要构建 IPC、我查看 了 www.ti.com/.../sprugo6e.pdf 、它看起来已经过时(2012?)。
    我按照 wiki 上的说明操作: processors.wiki.ti.com/.../IPC_Install_Guide_Linux

    我编辑 ti-ipc/products.mak (不是 UG 中所写的 IPC.mak)以匹配我的路径:

    软件仓库=/data/ti/e2e
    平台= DRA7XX
    destdir =/data/ti/e2e/ti-ipc-install
    toolchain_longname = ARM-Linux
    toolchain_install_DIR =$(depot)/host/
    toolchain_prefix =$(toolchain_install_DIR)/bin/$(toolchain_longname)-
    kernel_install_DIR =$(depot)/linux-4.9.41
    CMEM_INSTALL_DIR =$(depot)/ti-cmem
    XDC_INSTALL_DIR =$(depot)/ti-xdctools
    BIOS_install_DIR =$(depot)/ti-SysBIOS
    TI.targets.elf.c66 =$(depot)/ti-CGT-6000
    TI.targets.arm.elf.M4 =$(depot)/ti-cgT-arm

    使用以下工具为 Linux 编译:
    进行-f IPC-Linux.mak 配置
    制造

    我遇到了两个小问题:
    - Linux 内核头文件的包含路径需要一个 Linux 前缀(我添加了一个符号链接)
    -它从路径中选择 libticmem.a:$(CMEM_INSTALL_DIR)/src/cmem/api/.libs/libticmem.a 而不是$(CMEM_INSTALL_DIR)/lib (我现在已将 CMEM_INSTALL_DIR 指向 src dir)

    将-f IPC-BIOS.mak 全部生成

    这需要一段时间、因为编译器版本不兼容、它会编译目标.interfaces、.libs、测试并失败:
    我正在使用 SYSBIOS 6_46_05_55和 CGT-6000 8.1.4。

    详细信息:
    JS:"/data/ti/e2e/ti-xdctools/packages/xdc/cfg/Main.xs、第167行:错误:xdc.cfg.incompatible _target_version:当前目标"ti.targets.elf.c66"使用的编译器版本[]与用于构建以下软件包的目标的编译器版本不兼容;包 ti.targets.rts6000 [在/data/ti/e2e/ti-sysbios/packages/ti/targets/rts6000中]是使用目标"ti.targets.elf.c66"与编译器版本7.4.17]构建的。
    ;包 ti.sysbios.family.c64p [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/family/c64p 中]是使用编译器版本[7.4.17]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.KNL [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/knl 中/]是使用编译器版本[7.4.17]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.gates [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/gates 中/]是使用编译器版本[7.4.17]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.syncs [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/syncs 中/]是使用编译器版本[7.4.17]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.hal [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/hal 中/]是使用编译器版本[7.4.17]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios 中/]是使用编译器版本[7.4.17]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.family.c66 [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/family/c66中/]是使用编译器版本[7.4.17]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.xdcruntime [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/xdcruntime 中/]是使用编译器版本[7.4.17]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.堆[在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/heaps 中/]是使用编译器版本[7.4.17]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.family.shared.vayu [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/family/shared/vayu 中]是使用编译器版本[7.4.17]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.timers.dmtimer [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/timers/dmtimer 中]是使用编译器版本[7.4.17]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.rts.ti [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/rts/ti 中/]是使用编译器版本[7.4.17]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.family.c62 [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/family/c62中/]是使用编译器版本[7.4.17]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.utils [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/utils 中/]是使用编译器版本[7.4.17]中的目标"ti.targets.elf.c66"构建的。

    要继续、我指定了:
    环境['xdc.cfg.check.fatal']='fals';

    但这没有帮助。

    因此、我按照 SPRUEX3R.pdf 中看起来是最新的说明重建了 SYSBIOS。

    然后、我返回 IPC、它继续执行以下操作:

    JS:"/data/ti/e2e/ti-xdctools/packages/xdc/cfg/Main.xs、第167行:错误:xdc.cfg.incompatible _target_version:当前目标"ti.targets.elf.c66"使用的编译器版本[]与用于构建以下软件包的目标的编译器版本不兼容;包 ti.targets.rts6000 [在/data/ti/e2e/ti-sysbios/packages/ti/targets/rts6000中]是使用目标"ti.targets.elf.c66"和编译器版本8.1]构建的。
    ;包 ti.sysbios.family.c64p [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/family/c64p 中]是使用编译器版本[8.1.4]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.KNL [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/knl 中/]是使用编译器版本[8.1.4]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.gates [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/gates 中/]是使用编译器版本[8.1.4]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.syncs [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/syncs 中/]是使用编译器版本[8.1.4]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.hal [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/hal 中/]是使用编译器版本[8.1.4]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.deh [在/data/ti/e2e/ti-ipc/packages/ti/deh 中/]是使用编译器版本[8.1.4]中的目标"ti.targets.elf.c66"构建的。
    ;软件包 ti.sysbios [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios 中/]是使用编译器版本[8.1.4]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.family.c66 [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/family/c66中/]是使用编译器版本[8.1.4]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.xdcruntime [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/xdcruntime 中/]是使用编译器版本[8.1.4]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.堆[在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/heaps 中/]是使用编译器版本[8.1.4]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.family.shared.vayu [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/family/shared/vayu 中]是使用编译器版本[8.1.4]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.timers.dmtimer [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/timers/dmtimer 中]是使用编译器版本[8.1.4]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.rts.ti [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/rts/ti 中/]是使用编译器版本[8.1.4]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.family.c62 [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/family/c62中/]是使用编译器版本[8.1.4]中的目标"ti.targets.elf.c66"构建的。
    ;包 ti.sysbios.utils [在/data/ti/e2e/ti-sysbios/packages/ti/sysbios/utils 中/]是使用编译器版本[8.1.4]中的目标"ti.targets.elf.c66"构建的。

    因此、我尝试了一次干净的重建

    [...等待,去吃午餐...]

    所有文件均已完成:Fe Okt13 12:50:31 CEST 2017。

    :-)

    无法生成示例表单源:缺少包 ti.ipc.utils.genbundle。
    我复制了 ti-processor-sdk-RTOS 中的示例、并执行了以下操作:
    make clean;make XDC_INSTALL_DIR=/data/ti/e2e/ti-xdctools DRA7XX_Linux_elf all

    我启动内核,启动 lad 守护程序(新的固件二进制文件位于/lib/firmware/dra7-xxxx-fw.中)加载模块(cmemk、rpmsg_proto、virtio_rpmsg_bus、omap_remoteproc、remoteproc、 rpmsg_core)并获取以下消息:

    [190.887362] OMAP-rproc 588200.IPU:分配的保留存储器节点 ipu1_CMA@9d000000
    [190.895234] remoteproc remoteproc0:588200.IPU 可用
    [190.901374] OMAP-rproc 5502000.IPU:分配的保留存储器节点 ipu2_CMA@95800000
    [190.909350] remoteproc remoteproc1:5502000.IPU 可用
    [190.915704] OMAP-rproc 40800000.dsp:分配的保留存储器节点 dsp1_CMA@99000000
    [190.928134] remoteproc remoteproc2:40800000.dsp 现已推出
    [190.928486] remoteproc remoteproc1:加电5502000.IPU
    [190.928498] remoteproc remoteproc1:引导 FW 映像 dra7-ipu2-fw.xem4,大小为3830504
    [190.928591] OMAP-IMU 55082000.MMU:55082000.MMU:版本2.1
    [190.9399037] remoteproc remoteproc0:启动588200.IPU
    [190.9399049] remoteproc remoteproc0:引导 FW 映像 dra7-ipu1-fw.xem4,大小为3830504
    [190.939173] OMAP-iommu 588820.MMU:588820.MMU:版本2.1
    [190.979872] remoteproc remoteproc2:为40800000.dsp 加电
    [190.985587] remoteproc remoteproc2:引导 FW 映像 dra7-dsp1-fw.xe66、大小为4183048
    [190.986817] OMAP-rproc 588200.IPU:mbox_request_channel failed:-517
    [190.986823] remoteproc remoteproc0:无法启动 rproc 588200.IPU:-16
    [190.993901] OMAP-rproc 41000000.dsp:分配的保留存储器节点 dsp2_cma@9f000000
    [190.994011] removeproc remoteproc3:41000000.dsp 现已推出
    #[191.028732] OMAP-hwmod:mu0_dsp1:_wait_target_disable 失败
    [191.034632] OMAP-iommu 40d01000.MMU:40d01000.MMU:版本3.0
    [191.040599] OMAP-iommu 40d02000.MMU:40d02000.MMU:版本3.0
    [191.049878] OMAP-rproc 5502000.IPU:mbox_request_channel failed:-517
    [191.056471] remoteproc remoteproc1:无法启动 rproc 5502000.IPU:-16
    [191.068484] OMAP-rproc 40800000.dsp:mbox_request_channel failed:-517
    [191.075046] remoteproc remoteproc2:无法启动 rproc 40800000.dsp:-16
    [191.094572] OMAP-hwmod:mu1_dsp1:_wait_target_disable 失败
    [191.107507] OMAP-hwmod:mu0_dsp1:_wait_target_disable 失败
    [191.119400] remoteproc remoteproc3:为41000000.dsp 加电
    [191.125099] remoteproc remoteproc3:引导 FW 映像 dra7-dsp2-fw.xe66、大小为4039996
    [191.139807] OMAP-hwmod:mu0_dsp2:_wait_target_disable 失败
    [191.145701] OMAP-IMU 41501000.MMU:41501000.MMU:版本3.0
    [191.151622] OMAP-IMU 41500.MMU:41500.MMU:版本3.0
    [191.165661] OMAP-rproc 41000000.dsp:mbox_request_channel failed:-517
    [191.172248] remoteproc remoteproc3:无法启动 rproc 41000000.dsp:-16
    [191.190703] OMAP_hwmod:mu1_dsp2:_wait_target_disable 失败
    [191.203296] OMAP-hwmod:mu0_dsp2:_wait_target_disable 失败


    问题:
    -在哪里可以找到 IPC 的当前用户指南?
    -构建了 lad_dra7xx 守护程序,但未安装。 我应该手动复制它吗?
    -是否可以使用 C6000编译器8.1.4重建 SYSBIOS?
    重建示例:genbundle 应该来自哪里?
    从 ti-processor-sdk-rtos 中挑选示例是否安全? (例如编译器版本)
    -是否有方法并行化构建? 使用 make -j XX 是否安全?
    -什么导致内核消息"mbox_request_channel failed:-517"? 这是一个 devicetree 问题吗?

    此致、
    环路2.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Lo2、

    -在哪里可以找到 IPC 的当前用户指南?
    processors.wiki.ti.com/.../IPC_Users_Guide

    -构建了 lad_dra7xx 守护程序,但未安装。 我应该手动复制它吗?
    守护程序应该已经位于 Linux 文件系统中。 除非您修改了源代码、否则您不必安装它。

    -是否可以使用 C6000编译器8.1.4重建 SYSBIOS?
    不需要重新构建 SYSBIOS。 您是否尝试了推荐的编译器8.1.3: processors.wiki.ti.com/.../Processor_SDK_RTOS_Release_Notes

    重建示例:genbundle 应该来自哪里?
    您是否仍有错误的生成日志? genbundleTM

    从 ti-processor-sdk-rtos 中挑选示例是否安全? (例如编译器版本)
    是的。

    -是否有方法并行化构建? 使用 make -j XX 是否安全?
    我想您可以尝试在 Linux 场中构建。 但是、我们通常只需一次性完成构建、而不需要并行。

    -什么导致内核消息"mbox_request_channel failed:-517"? 这是一个 devicetree 问题吗?
    您运行的是哪一个示例? 使用预安装了 IPC 示例的默认文件系统启动 Linux 是否有问题?

    此致、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Garret、

    感谢您提供用户指南的链接。 然后、我必须为我们的文档转储快照。

    同时、我解决了我的问题:
    -我成功地构建了 lad_dra7xx 守护程序
    -我使用 CGT-6000版本8.1.4重新编译了 C6000的 SYSBIOS,似乎可以。
    -我已从 RTOS SDK 重建示例(同时我自己的测试代码)

    我花了一段时间(主要是阅读文档)才知道所有内容是如何组合在一起的。
    我仍然不会并行编译、但没关系。 正如您指出的、这不是您每天都要做的事情。 (一旦您进行了有效设置)

    关于 mbox 请求通道失败消息:这是一个器件树问题、因为我的电路板基于第三方模块、我必须修改模块的器件树。 mbox 设置错误。
    这也解释了它在 SDK 上的工作原因(尽管我在其中使用了预构建的二进制文件)。

    此致、
    环路2.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您提供更新的 Lo2。 我要将该线程标记为已关闭。

    此致、
    Garrett