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:引导加载程序映像解析问题

Guru**** 2391005 points
Other Parts Discussed in Thread: AM6442, UNIFLASH

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1499137/processor-sdk-am64x-bootloader-image-parsing-issue

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

工具/软件:

您好、

我将 AM6442入门套件板与 SDK 10.01.00.32一起使用、当前使用默认引导加载程序。 对于 appimage、我使用 hello world appimage.hf_fs 文件。 这是我的流程、我在 Bootloader_parseMultiCoreAppImage ()函数中遇到问题。 这是我的 ospi.cfg:  

#首先指向 sbl_uart_uniflash 二进制文件,它作为一个服务器来刷写一个或多个文件
-- flash-writer=sbl_prebuilt/am64x-sk/sbl_uart_uniflash.release.hs_fs.tiimage

#现在发送一个或多个文件到闪存或 flashverify 根据需要。 发送文件的顺序无关紧要

#对 OSPI PHY 调优攻击向量进行编程
--操作=flash-phy-tuning-data

#发送引导加载程序时、请确保闪存偏移为0x0。 ROM 期望引导加载程序位于偏移量0x0处
-file=sbl_prebuilt/sbl_ospi.Release.hs_fs.tiimage --operation=flash --flash-offset=0x0

#发送应用程序映像时,请确保以偏移0x80000 (默认值)或引导加载程序配置的任何偏移进行闪存
--file=./../examples/hello_world/am64x-sk/hello_world_am64x-sk_r5fss0-0_nortos_ti-arm-clang.appimage.hs_fs --operation=flash --flash-offset=0x80000
将路径视为正确。 我正在使用引导加载程序调试(在 main()中添加 loop_forever()) 、然后将其转到 Bootloader_parseMultiCoreAppImage ()、完成以下几项操作后、我观察到:
如果我使用"应用程序映像已签名 X509 "、我的引导加载程序会转到:
 
但是、如果我不使用 "应用程序映像已签名 X509 "、它将进入闪存读取:
我想了解更改此设置如何使引导加载程序完成从存储器读取到闪存读取的回调:
目前我使用的是不带签名 的,并获得以上 config->fxns->imgReadFxn 状态为0的状态(当我使用应用签名的映像时,我的控制流卡在 mem_read 函数内),但之后"mHdrStr.magicStr != bootloader_meta_hdr_magic_str"将状态设为-1并使该函数的引导加载程序流程出错。 我需要帮助解决此问题:
首先要了解 ospi.cfg 中的所有文件格式是正确的?
第二、memread 到 flashread 的变化是如何发生的?
这是否必须在 cfg 中为 appimage 使用另一个格式文件、因为当前的映像魔术头出现问题?
您能否共享运行的 cfg 和引导加载程序 tiimage 以及 hello world 映像?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ajay:

    Unknown 说:
    首先要理解 ospi.cfg 中的所有文件格式是正确的吗?

    我在配置文件中没有看到任何问题。

    Unknown 说:
    第二个 memread 到 flashread 的变化是如何发生的?

    通常在从 SoC 存储器(如 DDR)读取映像的情况下使用 MEM_imgRead。 我最后也在观察这一点、我认为对于 SBL_OSPI 应该是 Flash_imgRead、不知道为什么它会进入 Mem_imgRead、让我尝试在内部进行检查。

    这是否必须在 cfg 中为 appimage 使用另一格式文件、因为当前图像魔术头出现问题?

    因此、当您禁用"Application Image is X509 Signed"选项时、SBL 需要一个未签名的映像、这意味着.appimage 不是 hs_fs、因此会导致此故障。 如果您只是想绕过映像身份验证、我建议您改为选择"禁用应用程序映像身份验证"选项:

    启用此选项后、我认为您将能够引导应用程序映像。

    Unknown 说:
    您能否共享正在工作的 cfg 和引导加载程序 tiimage 以及 hello world 映像?

    我使用 MCU+SDK 中提供的默认映像、我假设您使用的是相同的映像。 如果没有、我建议您在不进行任何更改的情况下尝试使用默认映像进行引导、看看这是否有效。

    此致、

    会面。

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

    尊敬的 Ajay:

    以下是使用"Application Image is X509 Signed"选项时使用 Mem_imgRead 的原因。 如果启用了此选项、则 Bootloader_parseMultiCoreAppImage 会调用 Bootloader_verifyMulticoreImage API。 此 API 将应用映像复制到 RAM:

    由于映像已经在 RAM 中、因此该函数稍后会将引导介质从 OSPI 更改为存储器:

    这就是 config->Fxns->imgReadFxn 指向 Mem_imgRead 的原因。 如果您禁用了 Appimage 的身份验证、则会跳过 bootloader_verifyMulticoreImage API、因此在这种情况下、bootmedia 不会更改为 Mem、config->Fxns->imgReadFxn 指向 Flash_imgRead。

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

    尊敬的会议:

    感谢您的答复。 我曾尝试使用 ENABLE 以及禁用"Auth for Application Image"、两个命令都转到 Mem_Read、然后中止。 此处附加了中止前的屏幕截图。  

    我附加了我的 cfg、hello world 以及 ospi 引导加载程序文件夹(我现在仅使用默认设置进行尝试)。请从您的终端验证它是否可使用 SDK 10.01.e2e.ti.com/.../sbl_5F00_ospi_5F00_am64x_2D00_sk_5F00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.zipe2e.ti.com/.../hello_5F00_world_5F00_am64x_2D00_sk_5F00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.zip 对 AM6442电路板进行验证

    e2e.ti.com/.../custom_5F00_sbl_5F00_ospi.cfg

    请从您的终端验证您是否可以在终端上看到 Hello world。 这是我终端上的输出:

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

    尊敬的 Ajay:

    请告诉我以下细节:

    输入 Mem_imgRead 时、这些变量的值是什么:dst, memArgs->appImageBaseAddr、memArgs->curOffset 和 len

    请在 Memory Browser 中打开存储在 dst 和 appImageBaseAddr 中的地址、并在此共享该地址的屏幕截图、如下所示:

    您提到、在单步执行 memcpy 函数时就会遇到中止错误、您能否查看在单步执行 memcpy 后在内存浏览器中观察到的这2个地址的值。

    此致、

    会面。

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

    尊敬的会议:

    以下是上述变量的值:

    这些是 step over memcpy 之前、在 step over 其类似如下的内容之后的值:

    谢谢

    Ajay

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

    以下是 R0 (dst)和 R1 (len)寄存器的值(如果有任何帮助):

    如果您需要更多信息、请告诉我。

    谢谢

    Ajay

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

    是否有任何更新?

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

    尊敬的 Ajay:

    请允许我有时间回顾一下。

    此致、

    会面。

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

    当然谢谢