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.

[参考译文] AM2431:SBL 不会在 HS-SBL FS 模式下启动应用程序

Guru**** 2524460 points
Other Parts Discussed in Thread: AM2431, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1275494/am2431-sbl-does-not-start-application-in-hs-fs-mode

器件型号:AM2431
主题中讨论的其他器件: UNIFLASH

我们最近重新设计了采用 AM2431A 微控制器的定制电路板、以便现在使用 AM2431B 微控制器。  在前一个电路板上、我们成功地将 SBL_SD 示例转换为 eMMC SBL、该 SBL 可以读取并引导刷写到 eMMC 引导分区的多核 appimage 文件。

当新电路板推出 AM2431B 微控制器时、我们将 SDK 更新为版本09_00_00_30、因为我们必须支持 HS_FS 操作。  我们多次浏览了迁移指南、最终成功构建并签署了 SBL 和应用程序。我们现在遇到了 SBL 看起来验证并加载多核映像的问题。 然而,一旦准备好启动应用程序,它似乎永远不会忘记 Bootloader_runSelfCpu()函数。

在 CCS 中调试 SBL 时、我暂停并查看了 SBL 似乎挂起时的调用堆栈。  它显示的内容如下:

安全切换似乎从不会成功完成、因为在发送 TISCI_MSG_SEC_TRANSITION 消息时从未收到响应。

我已经浏览过各种 TI 文档(SDK 用户指南、TISCI 用户指南等)并阅读了 TISCI 用户指南的安全板配置部分: https://software-dl.ti.com/tisci/esd/latest/3_boardcfg/BOARDCFG_SEC.html

目前还不清楚、如果有什么需要、我需要添加到 SBL 中以启用 SYSFW 的安全功能。  我已经浏览了 SDK 中的示例、但未找到任何与配置电路板安全性相关的示例。

是否有文档从始至终介绍如何设置安全性的过程、或者其他方面是否会导致此问题?

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

    您好、 

    让我检查一下、然后回来给您。

    此致、
    Aakash

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

    只需检查一下您是否能够找到有关该问题的任何信息。  我继续寻找解决方案、但尚未找到任何解决方案。

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

    您好、Jim、

    在上一个电路板上,我们成功地将 SBL_SD 示例转换为 eMMC SBL,该 SBL 可以读取并引导刷写到 eMMC 引导分区的多核 appimage 文件。

    SBL SD 是否能正常工作、或者您会看到类似的 SBL SD 行为。 您也可以在 TI-EVM 上测试此情况。 SBL-SD 流程已针对 HS-SD 进行了测试 FS、我怀疑这应该失败了。

    [quote userid="531651" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1275494/am2431-sbl-does-not-start-application-in-hs-fs-mode 不清楚是否需要添加到 SBL 中来启用 SYSFW 的安全功能。  [/报价]

    实际上、SYSFW 始终启用安全功能。 只有在 SecHandOver 之后、才会失去安全功能。

    此致、
    Aakash

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

    我们的 TI-EVM 板上有一个 GP 芯片、因此我无法 FS 在其上测试 HS-EVM 模式。  我们的定制板上没有 SD、因此我们不能选择 SBL SD、我们也不能测试它。

    您提到在 SecHandOver 之后、SYSFW 将失去安全功能。  如调用堆栈所示、我们的问题是 SBL 永远不会完成 SecHandOver。  它似乎滞留在等待对 TISCI_MSG_SEC_TRANSITION 消息的响应。

    我们需要了解导致发送响应的原因以及有关如何解决问题的更多详细信息。

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

    您好、Jim、

    由于我们已经 移到09.00、我们已提取对 GP 器件的所有支持、我们将继续仅支持 HS-RTM FS 器件、即器件的 RTM 版本。 从 SDK 的角度来看、支持的最后一个 GP 版本是08.06版本。

    您可以在发行说明中找到详细信息。

    此致、
    Aakash

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

    你误解了我之前的回应。  我知道您不再支持 GP 器件。  这就是我们必须重新旋转定制板以使用修订版 b AM2431并移动到 SDK 的9.00版本。  在您之前的答复中、您说过以下内容:

    SBL SD 是否能正常工作、或者您会看到类似的 SBL SD 行为。 您也可以在 TI-EVM 上测试此情况。

    我只是说、我们一年前购买的 TI-EVM 电路板、当我们开始使用 AM2431进行开发时、包含版本 A (GP)微控制器、因此我无法 FS 在其中测试 HS-EVM 代码。

    我们已经多次阅读了版本说明和迁移指南以及其他文档 TI 文档(SDK 用户指南、TISCI 用户指南等)、但无法获得 SBL 来完成 SecHandOver 功能。  这就是引导我首先发布我的问题的原因。

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

    您好、Jim、

    现在我了解了。 您确实有一个最新的器件、而该器件实际上是 FS 器件、因此您会遇到此问题。 您能确认启动模式吗? 您是否使用以下启动模式?

    此致、
    Aakash

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

    是的、这就是我们要使用的引导模式。

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

    Jim、

    我有很多问题。 eMMC 引导模式仅在以下情况下引导原始映像:SBL SD 希望 SD 卡支持根文件系统并相应地加载文件。

    • 移植到底是如何完成的? 您使用了哪个 SBL 示例?
    • 您在 eMMC 中放置了哪个图像? 您是否尝试在系统中使用 loop_forever 并查看映像引导是否成功运行?

    此致、
    Aakash

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

    我们修改了 sbl_sd_am243x-evm_r5fss0-0_nortos_ti-arm-clang 示例、以从 eMMC 而不是 SD 卡读取文件。

    我们编写了一个实用程序、用来创建一个文件、该文件包含一个 R5映像、一个 M4映像和多个 PRU 映像。  标头指定文件中包含的每个图像的长度以及每个图像开始的文件中的偏移量。

    使用 SDK 指南中所述的 uart_uniflash.py Python 脚本、我们将 eMMC SBL 刷写到 eMMC 中的地址0、并将组合文件刷写到地址0x80000。

    eMMC SBL 启动时、它会打开地址为0x80000的组合文件、一次读取一个映像、将映像写入相应的处理器、然后启动每个映像。

    在我们之前使用 AM2431A 的 GP 版本的定制电路板上、此过程成功了。  我们能够验证这一点、因为 R5上运行的映像会在定制板上运行诊断并将输出发送到控制台端口。  控制台输出通过电缆发送到 PC、并显示在 PC 的终端仿真窗口(Putty)中。

    正如我在原始文章中提到并在调用堆栈图像中显示的、在我们使用 AM2431B 的新自定义电路板上、该过程中的一切都正常工作、直到 SBL 尝试启动 R5映像。  它卡住了、等待对 TISCI_MSG_SEC_TRANSITION 消息的响应。

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

    我决定尝试一个更简单的例子来看看我是否可以让它正常工作。  我构建了 hello_world_am243x-evm_r5fss0-0_nortos_ti-arm-clang 示例、然后使用 uart_uniflash.py 脚本将其刷写到 eMMC 中的地址0x80000。  我还修改了我的 eMMC SBL、以便简单地启动、从位置0x80000读取图像、将其加载到 R5、然后启动 R5。

    不幸的是、它仍然卡在同一个地方、等待对 TISCI_MSG_SEC_TRANSITION 消息的响应。  我们现在想知道这个问题是否必须在启动 R5时使 M3不能正确复位。  对这个理论还有什么看法吗?

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

    您好、Jim、

    在  TISCI_MSG_SEC_TRANSITION 调用之前、是否有任何其他 TISCI API 调用可以工作?
    您能否在秒切换调用之前尝试调用类似 TISCI_MSG_VERSION 的 API?

    此致、

    卡维塔




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

    我在调用 Bootloader_runSelfCpu ()之前调用了 Sciclient_getVersionCheck (),它确实正确返回。  然后调用 Bootloader_runSelfCpu()函数,该函数不会返回。  我将一些 DebugP_log ()调用放入代码中,这是出现在控制台窗口中的输出:

      正在启动 EMMC 引导加载程序...
      开始从 eMMC 读取文件
      正在加载应用程序
      图像加载已完成,正在切换到应用程序...
      正在加载 CSL_CORE_ID_R5FSS0_0
      调用 Sciclient_getVersionCheck +++添加了新函数调用

      DMSC 固件版本9.0.7--v09.00.07 (Kool Koala)
      DMSC 固件版本0x9
      DMSC ABI 版本3.1

      调用 Bootloader _runSelfCpu <+++代码永远不会错过这个调用

    当我暂停 CCS 并查看堆栈转储时、我会看到以下内容(与本线程前面所发布的内容相同):

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

    检查是否还有其他想法。 我们发现,如果我们的应用程序正在运行,并且它调用 Bootloader_socCpuResetReleaseSelf ()来重新启动自身,则与上面所示的相同堆栈转储存在完全相同的问题。

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

    您好、Jim、

    您能否分享使用的电路板配置值?
    "切换情况_msg_sendor"和"切换情况_to_host_id"值设置为什么?

    尊重,

    卡维塔

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

    我在 SDK sources\drivers\sciclient\sciclient_default_boardcfg\am243x\sciclient_defaultBoardcfg_security.c 文件中看到以下设置:

       /*安全配置*/
       .sec_delcift_cfg ={
           .subhdr ={
               .magic = TISCI_BOARDCF_SEC_CHEST_CFG_MAGIC_NUM、
               .size = sizeof (struct tisci_boardcfg_sec_cumption)、
           }、
           .citovery_msg_sender = TISCI_HOST_ID_MAIN_0_R5_0、
           .handshift_to_host_id = TISCI_HOST_ID_MAIN_0_R5_0:
           .rsvd ={0、0、0、0}、
       }、

    这就是您要找的器件吗?  上面的块是 gBoardConfigLow_SECURITY 结构的一部分。  我们没有采取任何具体措施来更改这些值、我也不知道如何判断它们是否被正常使用。  我在 gBoardConfigLow_SECURITY 结构定义中注意到这一点:

    const 结构 tisci_boardcfg_sec gBoardConfigLow_security
    __attribute__((aligned(128), section (".boardcfg_data")) =

    在 SDK 文件 sources\drivers\sciclient\include\sciclient_board_cfg.h 中、我注意到每个函数头文件中都有以下注释:

             用户需要在
              默认配置的链接器文件、该文件需要存在
              存储在 OCMRAM 中。 如果用户提供定制的 board_cfg、则必须将数据
              可用于 OCMRAM。

    我在我们的项目链接器文件中没有看到此部分定义、但我在构建项目时没有收到任何错误或警告。  我是否应该预计会生成错误、或者这是否意味着未使用 gBoardConfigLow_SECURITY 结构或它指向无法正确访问的位置?