【发布时间】:2021-09-21 20:04:26
【问题描述】:
我有 2 个图像存储在闪存中的预定义地址中,这些图像是根据我可以在启动时测试的某些标准加载的。
有人可以建议一种使用 uboot 的工具(如 bootm 等)以编程方式启动任一映像的方法吗?或者指出这个过程的一个例子。
提前致谢。
【问题讨论】:
标签: u-boot
我有 2 个图像存储在闪存中的预定义地址中,这些图像是根据我可以在启动时测试的某些标准加载的。
有人可以建议一种使用 uboot 的工具(如 bootm 等)以编程方式启动任一映像的方法吗?或者指出这个过程的一个例子。
提前致谢。
【问题讨论】:
标签: u-boot
我假设你用来加载图像的任何方法都需要一个地址,所以在运行它之前设置它。 bootcmd为主入口,boot与run bootcmd基本相同。
setenv flashload 'fooload $imageflashaddr $loadaddr'
setenv setimageflashaddr 'if something; then setenv imageflashaddr xxx ; else setenv imageflashaddr yyy; fi'
setenv bootcmd 'run setimageflashaddr && run flashload && bootm $loadaddr'
u-boot 非常灵活;有很多方法可以做到这一点。这使用环境变量。您也可以从 C 代码或运行时加载的脚本文件执行此操作。
如果你想用C代码来做,你可以编辑你的板子的C文件(通常在board/vendor_name/board_name.c。你可以定义一个board_late_init()(还有其他的钩子,但是这个通常是一个很好的起点). 您可以使用env_get() 和env_set() 设置您的地址,以便您的bootcmd 从不同的地方加载。
【讨论】: