问:
我尝试在调试模式下使用 BUILD_PROFILE=debug 标志编译 SBL,但编译失败并显示错误“gmake: *** No rule to make target 'sbl_mmcsd_img'. Stop.”。
是否有方法在调试模式下编译 SBL?
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.
问:
我尝试在调试模式下使用 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 来启用调试模式。 请查看下面的补丁:
使用以下命令保存和编译 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”:
gmake BOARD=j721e_evm CORE=mcu1_0 sbl_{BootMode}_img
这种方法将控制 SBL 的大小,并让您能够更好地控制在调试模式下编译的组件,但您仍然无法单步执行 SBL 代码。
这与之前的方法类似,但它也能让您控制 SBL 代码。您可以通过修改 <pdkInstallPath>\packages\ti\build\makerules\rules_ti_cgt_arm.mk 来删除编译器优化。请查看下面的补丁。
删除编译器优化后,只需重新编译要调试的组件和 SBL 发布模式。这样,您能够在调试期间控制组件和 SBL。
请确保在调试完成后恢复优化,因为它可能会影响您的应用的性能。