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.

[参考译文] TMDS64EVM:TMDS64EVM - NoRTOS 链接器错误

Guru**** 2893300 points

Other Parts Discussed in Thread: SYSCONFIG, TMDS64EVM

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1644588/tmds64evm-tmds64evm---nortos-linker-error

器件型号: TMDS64EVM
主题中讨论的其他器件: SysConfig

我将在一个基于 NoRTOS 的轻量级 TI 示例 R5F 工程基础上构建应用。 添加完所有代码文件后、在编译过程中尝试链接所有内容时收到以下错误:

构建目标:“ArmR5F_core0_stub.out“
调用:ARM 链接器
“c:/ti/ti_cgt_armllvm_4.0.3.LTS/bin/tiarmclang.exe /ti/mcu_plus_sdk_am64x_11_02_00_24/source/kernel/nortos/lib /ti/mcu_plus_sdk_am64x_11_02_00_24/source/board/lib -mcpu=cortex-r5 -mfloat-abi=hard -mfpu=vfpv3-d16 -mlittle-endian -dsOC_AM64X -dos_noRTOS -D_debug_=1 -g /ti/mcu_plus_sdk_am64x_11_02_00_24/source/drivers/lib /ti/mcu_plus_sdk_am64x_11_02_00_24/source/pru_io/lib /ti/ti_cgt_armllvm_4.0.3.LTS/lib  -lnortos.am64x.r5f.ti-arm-clang.debug.lib -ldrivers.am64x.r5f.ti-arm-clang.nortos.debug.lib -lboard.am64x.r5f.ti-arm-clang.nortos.debug.lib  
Makefile:192:目标“ArmR5F_core0_stub.out“的配置失败
“SYSCFG/linker.cmd“、第 74 行:错误#10099-D:程序将无法放入可用的存储器中、或者该段包含一个需要蹦床函数但该段无法为该段生成、或者该段包含填充函数的调用点。 “Group_4“段大小 0x2e9762 的对齐运行放置失败。  可用存储器范围:
  MSRAM    大小:0x140000  未使用:0x11eb80  最大孔:0x11eb78  
错误#10010:链接期间遇到错误;未构建“ArmR5F_core0_stub.out“
tiarmclang:错误:tiarmlnk 命令退出代码 1 失败(使用-v 查看调用)
gmake[1]:***[ArmR5F_core0_stub.out]错误 1
gmake:***【全部】错误 2.
Makefile:188:目标“全部“的配方失败

我使用 TI 工程导入随附的默认 SysConfig 文件(随附 — example_syscfg.txt )、因此将“文本“写入 MSRAM 的默认设置。 我所做的唯一更改是根据将“Region Size“参数扩展到 0x140000:“SysConfig“>“内存配置器“>“内存区域“>“ MSRAM 区域“>“区域大小(字节)“。

根据映射文件显示的内容(还附加了.map 输出的顶部 — memory_map.txt) 、MSRAM 区域足够大、可以容纳我正在构建的代码、因此我不确定我是否理解链接器错误实际上在抱怨什么。 有人能帮助我理解吗?

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

    您好、

    这是内存分配问题。 程序大小大于分配的存储器、因此链接器在将二进制文件放置在不够的可用存储器中时抛出错误。

    如错误消息“Group_4“部分(大小为 0x2e9762)的 run placement with alignment failed(对齐的运行放置失败)。  可用存储器范围:
      MSRAM    大小:0x140000  未使用:0x11eb80  最大孔:0x11eb78“

    程序的 Group_4 需要存储器 0x2e9762、但可用存储器范围为 0x11eb80、 较小。 请尝试增加存储器大小并告知我们结果。

    此致、

    Tushar

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

    根据原始 POST、MSRAM 的区域大小已设置为图 1 中所示的最大允许值。在此链接中: AM64x MCU+ SDK:存储器映射布局、并且不适合(结束地址= 0x701BFFFF)。 因此、在这种情况下、MSRAM 似乎不是一个可行的选择、对吧?

    是否可以设置 SysConfig 工具以改为在 DDR(或至少其中的一部分)中加载可执行代码? 您能否解释一下如何进行此操作、以及在进行此转变时还需要考虑哪些其他设置/初始化或其他注意事项?  如果可执行代码从 DDR 运行、则是访问共享存储器还是任何其他 RAM 地址?  

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

    是的、您可以将代码放在 DDR 存储器区域中。

    请参阅 memory_Configurator、 了解如何通过 SysConfig 工具配置存储器区域。

    此致、

    Tushar

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

    我对存储器配置器进行了以下修改:

    1. 在 SysConfig 的 Memory Region 区域中创建了一个“DDR“条目、起始地址为 0x80000000、大小为 0x20000000
    2. 更新了 SysConfig 小节区域中的条目、使“代码和只读数据“、“数据段“和“存储器段“小节放置在 DDR 中。

    当我连接到 R5F 内核 0 时、在控制台中收到以下消息:

    MAIN_Cortex_R5_0_0:GEL 输出:器件类型为 GP
    MAIN_Cortex_R5_0_0:GEL 输出:从 R5 或 A53 运行
    MAIN_Cortex_R5_0_0:GEL 输出:器件类型为 GP
    MAIN_Cortex_R5_0_0:GEL 输出:从 R5 或 A53 运行
    MAIN_Cortex_R5_0_0:GEL 输出:从 R5 运行
    MAIN_Cortex_R5_0_0:GEL 输出:

    R5 连接后未初始化 DDR。

    转至菜单“Scripts“->“AM64 DDR Initialization“->“AM64_DDR_Initialization_ECC_Disabled“以初始化 DDR。

    尝试运行脚本“AM64_DDR_Initialization_ECC_Disabled“、出现以下消息:

    MAIN_Cortex_R5_0_0:GEL 输出:已执行 DDR 编程。
    MAIN_Cortex_R5_0_0:GEL 输出:DDR 初始化 GEL 脚本将被跳过...

    在加载.out 文件时、我在加载过程中收到以下错误:

    MAIN_Cortex_R5_0_0:文件加载程序:验证失败:地址 0x802E9760 处的值不匹配请验证目标存储器和存储器映射。
    MAIN_Cortex_R5_0_0:GEL:file:c:\repos\tmds64evm\ArmR5F_core0_stub\Debug\ArmR5F_core0_stub.out:发生数据验证错误、文件加载失败。

    查看映射文件、 如果 DDR 中加载“.text“的第一个地址是被引用的地址 0x802E9760。  错误之前、“.bss“、“.sysmem“和“.stack“段被分配至地址空间 0x80000000 到 0x802E9760。

    如何继续? 我进行了几次电源循环并重建、并尝试重新加载几次、结果相同。

    由 SysConfig 更改生成的链接器附加的:

    e2e.ti.com/.../4705.linker_5F00_cmd.txt

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

    还请分享更新后的*。map 文件以供审核。

    此致、

    Tushar

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

    随附。

    e2e.ti.com/.../empty_5F00_pru_5F00_io.Debug.map.txt

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

    您是否还可以确认、您是否启用了从 DDR 存储器区域执行代码?

    此致、

    Tushar

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

    是、可以确认:

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

    配置看起来正常。 您是否可以提供任何示例代码来在我们这边复制问题以进一步调试?

    请提供重现此问题的步骤。

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

    我不能 — 这是我无法从公司发出的专有代码。 是否有关于如何加载到 DDR 的详细说明? 必须采取某种措施来正确初始化存储器? MSRAM 太小、无法满足我的程序要求、因此我要尝试的下一步是 DDR。 如果您对要使用的存储器有其他建议(FLASH?) 通过尝试加载的步骤、我也对其他想法持开放态度。 我只需将此程序加载到电路板并运行、而不管使用的存储区域/器件是什么。

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

    我在这里附加了一个从 DDR 存储器区域 (.text、.rodata、.data、.bss、.sysmem、 .stack) 时、请将其与您的应用工程进行比较并检查是否存在差异。

    如果这对我们有帮助、请告诉我们。

    Project - empty_am64x-evm_r5fss0-0_nortos_ti-arm-clang.zip

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

    我提供的示例使用 SDK v11.00。 出现该错误的原因可能是 SDK 版本不匹配、因为您可以看到旧 SDK 中缺少的符号很少。

    共享示例旨在提供相应配置工程的参考。

    默认为空示例默认情况下没有任何 DDR 条目。 您需要在存储器配置器工具中对其进行配置。

    如果您仍然遇到问题、请告诉我。

    此致、

    Tushar

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

    您发送给我的 zip 文件包含 MPU 中的 DDR、并在存储器配置器中创建存储器区域和部分。  

    在任何情况下、在更正编译错误但正确设置路径后、我都成功地加载了您的示例。 然后我立即尝试加载我的项目,它完全加载,没有错误。 所以、无论您演示工程执行什么操作、都将 DDR 置于我可用的状态。  

    您的空工程是否会运行某种 GEL 脚本? 我的工程基于一个 RF5 NoRTOS 示例工程构建、但必须手动添加 DDR 内存配置。 您的工程已经具有这些定义、因此工程的其他一些功能是否允许将 DDR 加载到其中并从中运行?

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

    在运行二进制文件之前、无需加载/运行 GEL 序列。 我们只需在 SysConfig 中适当地设置 DDR MPU 区域、还需要在存储器配置器工具中添加 DDR 存储器区域才能使用该区域。

    我在上面提供的示例也是 R5F NORTOS 工程和其他示例也应该起作用。

    此致、

    Tushar

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

    在比较这两个工程之间的设置后、我设法将工程加载到 DDR 中并进行循环操作。 我的 MMU 设置与我的区域结束地址的定义位置存在一些不一致的情况。 感谢您的支持。

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

    尊敬的 Seth:

    感谢您的确认。 关闭此主题。

    此致、

    Tushar