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.

[参考译文] AM2434:转换为 MCELF 后出现问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1642653/am2434-problems-after-converting-to-mcelf

器件型号: AM2434

您好、

在迁移到 SDK V12 的过程中、我一直在努力迁移到 MCELF 格式。 我们有四个独立的程序,每个程序都在自己的内核上运行 — 从 SDK v8 到 V11、此程序是稳定的。

但是、我现在在从闪存加载时遇到目标崩溃(CPU 异常)问题。 从调试器运行时(也不使用 V11 SBL 以 RPRC 格式引导相同的二进制文件)、我根本看不到这一点。

我首先使用与调试 SBL 相同的方法来调试目标(等待循环)、然后逐步执行。 这一切都正常。

在单步执行代码时,我看到了存储器对齐异常 — 这就是系统不引导的原因。 然而,事实证明这是一个完整的红鲱鱼,但花费了我很多时间:

我最终注意到、从闪存引导或从调试探针引导之间存在很大差异(在一些区域中)。 崩溃周围区域中的散列指令是随机的 — 很明显程序存储器已损坏并且显然会导致崩溃。

为了证明存储器损坏、我从内核 0 (0x70080000、长度 0x70000 — 根据 linker.cmd) 下载了原始程序存储器、当时我使用调试探针运行与从闪存引导。 这证实了将会崩溃的地区的差异。

我双重双重检查了所有 linker.cmd 文件 — 所有程序和数据存储器都已正确分区。 此外,我从来没有这个问题与 pre-mcelf, v8 - V11 SDK。

因此、我有点无法继续执行下一步操作、除非现在恢复到 SDK V11。

有什么建议吗?

谢谢、Steve

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

    您好 Steve、

    我想知道您使用哪个命令/进程将应用程序二进制文件转换为 MCELF 格式、您能分享一下吗?

    此致、

    会面。

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

    尊敬的会议:

    我使用取自 SDK V12 示例工程的 mcelf 映像生成器脚本。 构建输出片段:

    Python C:/ti/mcu_plus_sdk_am243x_12_00_00_26/tools/boot/multicore-elf/genimage_am64x.py --core-img=4:../DAQ_Beckhoff _R5F0-0/Release_CLB/DAQ_Beckh_R5F0-0.out - core-img=5

    Python C:/ti/mcu_plus_sdk_am243x_12_00_00_26/source/security/security_common/tools/boot/signing/appimage_x509_cert_gen.py --bin Release_clb\\DAQ_system.mcelf --authtype 1 --key C:/ti/mcu_plus_sdk_am243x_12_00_00_26/source/security/security_common/tools/boot/signing/app_degenerateKey.pem --output Release_clb\\DAQ_system.mcelf.hs_fs

    Steve

    PS — 您的 Web UI 工具损坏 — 我会将其显示为代码。

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

    进度:我在 R5f0-0 (0x70080000-0x700EFFFF) 中查看应用程序的程序位置时调试 SBL、此时发生损坏 (0x70082EA0)。

    单步执行 SBL、即使在调用 Bootloader_parseAndLoadMultiCoreELF 之后、我也发现存储器发生了变化。

    进一步研究后、我发现 SBL 已将 MSRAM_1 设置为 0x7007007007000000、大小  为 0x20000 (V11 SBL 为 0x10000)。

    显然 、这是错误的、因为 0x70080000 是 R5f0-0 的标称起始位置。  这会将 SBL 的堆栈置于我刚刚加载的映像的中间。

    我现在正在研究如何使 SBL 能够放入允许的存储器中。

    Steve

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

    最后、解决方案非常简单。 我因此修改了 SBL 存储器分配:

    MSRAM_0: 0x70000100 大小为 0x5FF00

    MSRAM_1: 0x70060000 大小为 0x20000  

    现在、我的映像可以正常引导和运行。

    但是、我认为 这是 mcu_plus_sdk_am243x_12_00_00_26 中的一个严重错误。  找到真正的根本原因需要我花费很多时间 — 我怀疑其他人也会被抓住。

    因此、请更新 SDK 并尽快通知用户该问题。

    谢谢 Steve

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

    您好 Steve、

    感谢您尽一切努力测试此问题并指出这一点、这确实是一个错误、我将在下一个版本中在内部进行检查以修复此问题。

    此致、

    会面。