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:DSP 固件加载错误

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/666910/rtos-am5728-dsp-firmware-load-error

器件型号:AM5728

工具/软件:TI-RTOS

问题描述:
===========================

在使用 Remoteproc 在 dsp1上加载 DSP 固件期间、我获得了
以下错误:

[70.405992] remoteproc2:引导 FW 映像 dra7-dsp1-fw.xe66、大小5132952
[70.420358] omap_hwmod:mu0_dsp1:_wait_target_disable 失败
[70.426258] OMAP-iommu 40d01000.MMU:40d01000.MMU:版本3.0
[70.432209] OMAP-iommu 40d020.MMU:40d020.MMU:版本3.0
[70.446300] remoteproc2:错误的地址 da 0x40300000 mem 0x1d20
[70.451924] remoteproc2:无法加载程序段:-22


应用描述:
===========================

我已采用 TI 提供的大数据 IPC 示例。 我尝试在中使用此功能
我的项目。 该项目需要使用所有其他标准驱动程序
使用 PDK (i2c、UART、GPIO、osal)以及 am572x 电路板初始化
也是如此。 由于这是一个使用 cmem 的 IPC 示例、因此有一个如所示的资源表
好的。 我的应用具有典型的电路板初始化函数:

===========================
board_initCfg boardCfg;

boardCfg = Board_init_PINMUX_CONFIG |
Board_init_module_clock |
Board_init_uart_stdio;

board_init (boardCfg);
===========================

根据中的 TI PDK 文档
processors.wiki.ti.com/.../Processor_SDK_RTOS_Board_Support:
IO 延迟设置期间的代码/数据/堆栈必须位于本地内部存储器内-
特别是 OCM_RAM1。

因此、我对工程 cfg 文件进行了以下添加:

Program.sectMap["BOARD_IO_DELAY_DATA"]="OCMC_RAM1";
Program.sectMap["BOARD_IO_DELAY_CODE"]="OCMC_RAM1";

请注意、OCMC_RAM1位于地址:0x40300000。 Board_IO_DELAY_DATA 和
Board_IO_DELAY_CODE 成为需要分配/放置的程序段
在使用加载 DSP 固件(elf 文件)期间存储器中的某个位置
由 Linux 内核提供的 Remoteproc。 函数 rproc_elf_load_sires 读取
ELF 文件、对于每个段、尝试对对应的内核地址进行格式访问
使用 rproc_da_to_va 的器件地址。 此函数查找资源
执行此任务的表。 请注意,资源表没有任何条目
对于 OCMC_RAM1、因此出现了 rproc_elf_load_segments 错误。

那么、我如何解决这个问题呢? 我尝试向资源中添加 DEV_MEM 条目
以便 rproc_da_to_va 查找此 OCMC_RAM1地址、但该地址不起作用。

cfg 文件中没有 Board_IO_DELAY*段也不起作用。

当然,我不是第一个遇到这一问题的人。 看起来就像这里
我可能缺少的东西。 我们非常感谢您的任何帮助

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

    谢谢!

    我已经能够进一步缩小问题的范围。 我将我的 elf 文件与 pdk_path/packages/ti/drv/gpio/test 中提供的 LED_blink 应用程序生成的 elf 文件进行了比较。

    分析如下:

    • 示例应用链接到 pdk_path/packages/ti/board/lib/evmAM572x/C66/release 中的 ti.board.ae666。 此库存档文件包含一些 Board_IO_DELAY_DATA/代码函数、例如 BoardCtrlPadMux 和 boardPadGetSize 和 BoardCtrlPadIoDelayConfig。 请注意、这3个函数根本不会从应用程序中执行。 它们在 elf 文件 ti.board.ae666中作为可重定位段出现。
    • 在生成最终应用程序 elf 文件的最终链接阶段、这3个函数会被删除、因为它们在最终 elf 文件中不存在。 我认为这是因为它们根本没有被使用。
    • 我希望在我的实际项目中出现相同的行为、我尝试将大数据示例和这个简单的示例组合在一起。 但情况并非如此。 我看到大数据库 elf 文件和我的应用程序代码以相同的方式链接到 ti.board.ae666、但这3个函数在最终 elf 中也是如此。 此 elf 现在具有有效的 board_io_delay_code/data 段、因此如 前面所述、remoteproc 失败。
    • 我无法弄清在上述两种情况下正在进行哪些工作。

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

    您是否正在尝试在 DSP 代码中执行 pinmux? 如果是这种情况、您参考的文档仅适用于 RTOS 应用程序、不适用于 Linux-RTOS。 在进行 ARM/Linux 和 DSP/RTOS 通信时、Linux 是主设备。 Pinmux 应由 Linux 完成。 如果它仅支持 RTOS 的应用程序、那么是的、您需要调用 board_init 来设置 pinmux。

    如果您在 AM572x 引脚多路复用器方面需要帮助、请创建新主题。

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

    您已经有一段时间没有回复、我认为您的问题已经解决了。 如果是这种情况、请单击"已解决"按钮。

    如果您有其他问题、请提交新主题。 谢谢!

    雷克斯