工具与软件:
您好!
我对 Cortex-A 内核的引导时间很好奇、该内核具有将从 DDR 运行的裸机示例。 据我所知、从 UART 串行引导 SPL->DDR 的整个过程将需要相当长的时间作为确认需求。
我想了解从 USB 引导是否有助于缩短引导时间、以及在 DDR 中启动应用需要多长时间。
谢谢!
Dazong
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.
工具与软件:
您好!
我对 Cortex-A 内核的引导时间很好奇、该内核具有将从 DDR 运行的裸机示例。 据我所知、从 UART 串行引导 SPL->DDR 的整个过程将需要相当长的时间作为确认需求。
我想了解从 USB 引导是否有助于缩短引导时间、以及在 DDR 中启动应用需要多长时间。
谢谢!
Dazong
尊敬的 Dazong:
MCU+ SDK 不支持从 USB 介质进行引导。 它仅支持从 UART、NOR、NAND、eMMC 和 SD 卡介质引导。
Processor SDK 支持通过 USB DFU 引导、但它在 A53内核上引导 U-Boot 和 Linux。
3.1.2. USB 器件固件升级(DFU)—处理器 SDK AM62x 文档
此致、
Prashant
尊敬的 Dazong:
MCU+ SDK 支持在 A53上引导裸机应用程序。 但是、如前所述、MCU+ SDK 不支持 USB、因此我们只需使用 UART。
作为替代方案、您可以使用 OSPI 引导介质并利用以下 SoC 初始化方法。
通过这种方式、您可以使用 CCS 加载和运行 A53可执行文件。
此致、
Prashant
尊敬的 Dazong:
如果我们选择 Linux SPL、那么跳转到 DDR 中的裸机应用程序、这是可行的吗?[/QUOT]这是我想到的一个选项、但我必须确认它是否真正有效。
在继续之前、您能说明一下启动裸机应用程序的用例吗? 这是否属于测试阶段? 使用哪个 SDK 来开发该裸机应用程序?
我希望您能够在 A53内核上引导 U-Boot/Linux、并使用提供的工具适用于任何用例。
此致、
Prashant
Prashant、您好!
为了进行硬件验证、我们需要尽可能使用裸机。
有两种情况、一种是从 USB/UART 串行引导、另一种是从外部非易失性存储器(NVM)引导
由于从 UART 引导耗时太长、因此我认为、如果不支持裸机 USB 引导、我们可以采用 DFU 模式、即 Linux SPL 在 RAM 中运行+裸机应用程序在 DDR 中运行
从 NVM 引导时、我们需要采用裸机 SPL 和裸机应用程序的解决方案。
裸机 SPL 将初始化时钟、DDR、外部 NVM、将裸机从外部 NVM 复制到 DDR、然后跳转到 DDR 并执行应用。
我们尚不了解要使用哪个 SDK。
谢谢!
Dazong
尊敬的 Dazong:
感谢您的澄清。
从 NVM 启动时、我们需要一种采用裸机 SPL 和裸机应用的解决方案。
MCU+ SDK 中已有该示例。 您可以使用 SBL_OSPI 或 SBL_EMMC 分别从 OSPI 或 eMMC 引导您的应用。
此致、
Prashant
请随时向我们通报是否可以进行 DFU USB 启动、然后跳转至裸机应用程序、以及下载时间需要多长时间
您可以直接使用 SDK 进行操作。
1) 1)根据 SDK 文档中的步骤、使用相关的 defconfig 来构建 U-Boot 链
2)启动到 U-Boot 提示符后、您可以使用常用的 U-Boot 命令从您喜欢的任何介质(包括 USB DFU)加载裸机应用程序
3) 3)使用`go`命令启动应用程序
请注意、如果使用此方法、您可能需要确保在执行`go`命令的过程中关闭 MMU 并刷新缓存、方法是在此处添加此代码段、即填充要在`go`命令执行期间执行的函数挂钩:
$ git diff
diff --git a/arch/arm/mach-k3/common.c b/arch/arm/mach-k3/common.c
index fa8cd93d664..99e8f37ac37 100644
--- a/arch/arm/mach-k3/common.c
+++ b/arch/arm/mach-k3/common.c
@@ -214,6 +214,14 @@ void board_prep_linux(struct bootm_headers *images)
ROUND(images->os.end,
CONFIG_SYS_CACHELINE_SIZE));
}
+
+unsigned long do_go_exec(ulong (*entry)(int, char * const []),
+ int argc, char *const argv[])
+{
+ cleanup_before_linux();
+
+ return entry(argc, argv);
+}
#endif
void spl_enable_cache(void)
所有这些过程不应超过几秒钟、具体取决于您加载的应用程序类型及其大小。
如果需要更快、更优化的`、也可以直接将` tispl.bin `替换为裸机应用程序、并使用 USB DFU 加载它、完全跳过前面讨论的`u-boot.img`和任何` go 命令执行操作。 您只需要查看`tispl.bin`μ m 是如何构建到映像中的、然后用您自己的代码替换此代码。