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.

[参考译文] PROCESSOR-SDK-AM64X:AM64x 因 Linux 问题加载远程内核应用程序

Guru**** 2563960 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1572031/processor-sdk-am64x-am64x-loading-remote-core-application-by-linux-issue

器件型号:PROCESSOR-SDK-AM64X
主题:SysConfig 中讨论的其他器件

工具/软件:

您好、

我尝试修改 R5F 内核上的 hello world 应用、使其不成功由 AM64x EVM 上的 Linux 加载。
以下是在重新启动 EVM 后发现的错误消息:
root@am64xx-EVM:~# dmesg | grep remoteproc
[  9.607769] platform 78000000.r5f:已为 Remoteproc 模式配置 R5F
[9.660685]  可提供 remoteproc remoteproc0: 78000000.r5f
[  9.669232] Remoteproc Remoteproc0:启动 78000000.r5f
[  9.669274] remoteproc remoteproc0:引导固件映像 am64-main-R5f0_0-fw、大小为 414840
[  9.678297] platform 78200000.r5f:已为 Remoteproc 模式配置 R5F
[  9.700809] remoteproc remoteproc0:错误的 phdr da 0x70080000 mem 0x14380
[9.700848]   Remoteproc Remoteproc0:无法加载程序段:–22

root@am64xx-EVM:~# cat /sys/class/remoteproc/remoteproc0/state
该维护周期

问题:
1.错误的原因是什么,如何解决?
2.我注意到另一个指向/usr/lib/firmware/ti-ipc/am64xx/ipc_echo_test_mcu1_0_release_strip.xer5f.signed.的 R5F0_0 符号链接 此文件的用途是什么? 是否需要对其进行更新才能运行远程核心应用程序?
root@am64xx-EVM:/# ls -l /lib/firmware
共计 26440 人
-rw-r--r-- 1 根根根  2040 年 3 月 9 日 2018 license.ibt_firmware
-rw-r--r-- 1 根根根根根根  2046 Mar 9 2018 license.iwlwifi_firmware
lrwxrwxrwx 1 root   77 2025年5月30日 am64-main-R5f0_0-fw ->/lib/firmware/ti-ipc/hello_world_am64x-evm_r5fss0-0_freertos_ti-arm-clang.out
lrwxrwxrwx 1 根根目录   79 Mar 9 2018 am64-main-R5f0_0-fw-sec ->/usr/lib/firmware/ti-ipc/am64xx/ipc_echo_test_mcu1_0_release_strip.xer5f.signed

以下是我执行的步骤:
从此页面构建和运行 Hello World:
software-dl.ti.com/.../GETTING_STARTED_BUILD.html

将 Linux IPC 添加到远程内核工程中:
dev.ti.com/.../add-linux-ipc.html

更新 linker.cmd 文件:
dev.ti.com/.../update-linker.html

修复此页面的“选项 2“中的外设冲突:
dev.ti.com/.../allocate-peripherals.html


感谢您的帮助!

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

    您好 Matt、

    很高兴您找到了多核学院的网页。 “远程内核上的应用程序开发“部分将是我向您介绍的第一个部分。

    您的/lib/firmware 条目看起来是我期望的方式。

     此时、您可以忽略 am64-main-R5f0_fw-sec 链接。 作为一种安全措施、您可以对非 Linux 二进制文件签名、然后对系统进行配置、以便在代码未正确签名时不会加载代码。 我自己对芯片的安全元素没有太多的经验。

    当项目在 Linux 预期位置中没有有效的资源表时、我通常会看到“-22 =–22 =无效参数“错误。

    首先、我检查您的资源表

    1) 首先检查示例/中的位置 / / /ti-arm-clang/ .map

    .resource_table 是否位于 Linux 器件树文件中的“R5F 外部代码/数据存储器段“的开头? 请参阅多核 Academy >“分配存储器“、了解更多信息:
    https://dev.ti.com/tirex/explore/node?node=A__AczQXYYQuDrYh5SEg4bt3w__AM64-ACADEMY__WI1KRXP__LATEST

    2) 生成的资源表看起来是否正常? (假设通过在 SysConfig 设置中启用 Linux IPC 来自动生成资源表)

     示例/中提供了此内容 / / /ti-arm-clang/generated/ti_drivers_config.c > gRPMessage_linuxResourceTable

    您可以构建 ipc_rpmsg_echo_linux 示例、并与您在该 ti_drivers_config.c 文件中看到的资源表进行比较。

    此致、

    Nick

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

    您好 Matt、
    您好、Nick、

    正如我前一段时间在客户项目中看到的类似问题:

    从内核错误消息可以看出、hello_world 二进制文件链接到 MSRAM(地址范围 0x70000000)、但通过默认 AM64x EVM 的器件树不会在 MSRAM 中为 R5f 内核保留任何空间。

    您的设备树可能如下所示: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/arch/arm64/boot/dts/ti/k3-am642-evm.dts?h=ti-linux-6.12.y#n787

    在这种情况下、应用程序应链接到 0xa0100000 范围。

    如果要使用 MSRAM、可以将器件树修改为为为 R5f0-0 保留的存储器地址 0x70080000。

    当然、资源表也可能存在问题。 但我认为眼前的问题是 R5f 可执行文件使用的存储器区域与器件树之间不匹配。

    此致、

    Dominic

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

    您好、Nick 和 Dominic、

    感谢您发送编修。

    我检查了 hello_world.Debug.map 文件、发现.resourt_table (DDR_0) 存在并从 0xa0100000 开始;MSRAM(代码/数据存储器)从 0x70080000 开始。
     MSRAM          70080000  00040000 000235e0 0001ca20 RWIX
     ...
     DDR_0          a01000000 00001000 00000000     RWIX

    根据您的说明、似乎我必须更改默认 Linux 器件树、以匹配 hello_world 的内存分配:
    MAIN_r5fss0_core0_dma_memory_region:r5f-dma-memory@a0100000
      compatible =“shared-dma-pool";“;
      REG =<0x00 0xa01000000 0x00 0x10000>;
      无映射;
    };

    MAIN_r5fss0_core0_memory_region:r5f-memory@70800000
      compatible =“shared-dma-pool";“;
      REG =<0x00 0x70800000 0x00 0xf00000>;
      无映射;
    };

    这是正确的吗?
    此外、您能说明如何更改 Linux 器件树并将其加载到 SD 卡上、而无需构建 Linux 吗? 我可能最终需要构建 Linux、但此时只想做一些快速的原型设计工作。

    感谢您的帮助!

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

    您好 Dominic、
    感谢您的跳跃! 同意、这看起来很可能。

    您好 Matt、

    请参阅此主题、了解如何将 SRAM 区域添加到 Linux 器件树文件:
    PROCESSOR-SDK-AM64X:v10.01.10.04:遵循 AM64x Academy 时将 R5FSS0_0 SRAM 添加到器件树时出现问题

    对于未来的读者、  
    有关向 Linux 器件树文件添加 SRAM 区域的信息、请参阅多核 Academy >远程内核上的应用开发>分配存储器:
    https://dev.ti.com/tirex/explore/node?node=A__AXdlNVv-3hxEuToJ8O8ivg__AM64-ACADEMY__WI1KRXP__LATEST

    但我在该页面中所包含的补丁目前有一个拼写错误、这就是为什么我将 Matt 指向 e2e 线程、其中发现了拼写错误。

    此致、

    Nick

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

    您好 Matt、

    有关重新构建 Linux 器件树的问题、请参阅 Linux SDK 文档:
    https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/11_01_05_03/exports/docs/linux/Foundational_Components_Kernel_Users_Guide.html

    若要构建 Linux 器件树文件、请执行各部分
    编译器(导出路径)
    清理内核源
    配置内核>使用默认配置
    编译源代码>编译器件树二进制文件

    您可以跳过“编译内核“和“编译内核模块“

    然后将.dtb 文件复制到文件系统分区 boot/dtb 或 boot/dtb/ti 下的 SD 卡上(根据 SDK 版本、只需查看所有其他 dtb 文件的位置)。 通常、在复制到新的.dtb 文件之前、我通过重命名为 file.dtb.orig 来保存原始.dtb 文件。

    此致、

    Nick

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

    您好、Nick、

    感谢您的详细回答。 如果我再次遇到问题、我会尝试并联系。 谢谢!