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.

[FAQ] TDA4VM: 如何使用 j721e RTOS SDK 在调试模式下编译 SBL?

Part Number: TDA4VM

问:

我尝试在调试模式下使用 BUILD_PROFILE=debug 标志编译 SBL,但编译失败并显示错误“gmake: *** No rule to make target 'sbl_mmcsd_img'.  Stop.”。

是否有方法在调试模式下编译 SBL?

  • 答:

    由于有限的 OCMC 具有内存限制,因此需要限制 SBL 的大小。通常情况下,OCMC 需要同时适合 SBL 和固件。在调试模式下编译通常会增加二进制文件的大小,并且存在超出可用内存的风险。这便是默认情况下针对 SBL 禁用调试模式的原因

    不过,有一些方法可用于在调试模式下编译 SBL

    • 启用调试模式

    您可以通过修改 <pdkInstallPath>\packages\ti\boot\sbl\ 位置的 sbl_component.mk 来启用调试模式。  请查看下面的补丁:

    1. patch
    2. patch

    使用以下命令保存和编译 SBL

    gmake BOARD=j721e_evm CORE=mcu1_0 BUILD_RPOFILE=debug sbl_{BootMode}_img

    其中 BootMode 可以是 uart、mmcsd、ospi、cust

    这种方法可以让您在调试期间完全控制 SBL,但在未来的版本中,如果 SBL 的大小由于某种原因而增加,那么这种方法可能会失效。这已在 j721e RTOS SDK 8.0 和 8.1 版本上进行了测试。

     

    • 在调试模式下编译特定组件

    与其在调试模式下编译完整的 SBL,您不如编译需要调试的特定组件并将其链接到 SBL,从而控制 SBL 的大小。最简单的方法是使用 BUILD_PROFILE 标志在调试模式下编译组件,然后将调试库重命名为发布库。

    例如,如果您要调试“board”:

    1. gmake board BOARD=j721e_evm CORE=mcu1_0 BUILD_PROFILE=debug
    2. 将 <pdkInstallPath>\packages\ti\board\lib\j721e_evm\r5f\debug 重命名为 <pdkInstallPath>\packages\ti\board\lib\j721e_evm\r5f\release
    3. 使用以下命令编译 SBL 映像

    gmake BOARD=j721e_evm CORE=mcu1_0 sbl_{BootMode}_img

     

    这种方法将控制 SBL 的大小,并让您能够更好地控制在调试模式下编译的组件,但您仍然无法单步执行 SBL 代码。

     

    • 删除编译器优化并重新编译特定组件

    这与之前的方法类似,但它也能让您控制 SBL 代码。您可以通过修改 <pdkInstallPath>\packages\ti\build\makerules\rules_ti_cgt_arm.mk 来删除编译器优化。请查看下面的补丁。

    1. patch
    2. patch

    删除编译器优化后,只需重新编译要调试的组件和 SBL 发布模式。这样,您能够在调试期间控制组件和 SBL。

    请确保在调试完成后恢复优化,因为它可能会影响您的应用的性能。