启动时运行u-boot命令

3
我有一个运行Yocto(Jethro)的自定义板,想要运行单个u-boot命令"preboot"。显然,通过按下空格键打断启动序列,并手动运行它是可行的。我该如何自动运行它?更具体地说,默认情况下启动命令序列在哪里?
编辑:此外,我知道可以在运行时编辑环境变量。但是,我正在尝试将此更改构建到镜像中,以便我可以分发它。
4个回答

3
当你处于uboot环境中时,输入printenv,它将列出uboot使用的环境变量。
有一个名为bootcmd的变量。目前,我的包含一堆if else命令。同样,添加您喜欢的函数以供启动。
完成并测试后,使用saveenv存储编辑内容。
这里是uboot的语法
编辑:
U-Boot允许在纯文本文件中存储命令或命令序列。使用mkimage工具,您可以将此文件转换为脚本映像,然后使用U-Boot的autoscr命令执行它。U-boot脚本能力

是的,那个方法可行,但那只是针对那个磁盘。我该如何自动将其构建到镜像中? - James Howard

2
通常情况下,您的U-Boot配方将为单个机器构建U-Boot。在这种情况下,我通常会修补已编译的默认U-Boot环境,以执行正确的操作。实现此目的的方法是:
 SRC_URI_machine += "file://mydefenv.patch"

你可以使用你自己的GIT树,这样做还有额外的好处,即使环境完全被破坏,你的系统可能仍能够启动并执行某些有用的操作。

另一种可能性是按照Charles在另一个答案中提出的建议,在离线环境下创建一个环境,并让U-Boot加载它,参见denx.de/wiki/view/DULG/UBootScripts

第三种可能性,我有时也会使用构建离线环境的方法(可能使用与上面链接中相同或类似的机制),然后在正常的闪存编程过程中将环境闪存。虽然大多数情况下我是在AT91上执行此操作,使用类似于at91 Sam-Ba TCL script的tcl脚本。

无论选择哪种方法,bootcmd变量在U-Boot中应该包含您的引导脚本。


1

最简单的修改方法是修改已经执行的bootcmd

除了打补丁,还可以在u-boot中覆盖命令。在与补丁文件放置在同一位置处创建一个文件,例如platform-top.h(它可能已经存在),并重写CONFIG_BOOTCOMMAND

结果将类似于:

/* ... */

/* replace the memory write with any other valid command */
#define CONFIG_BOOTCOMMAND "mw 0x1 0x1 && run default_bootcommand"

别忘了在您的 bbapend 文件中声明该文件 SRC_URI = "file://platform-top.h"


1
一般来说,默认情况下会运行bootcmd命令,如果存在持久化环境,您可以更改该命令并使用'saveenv'保存以保留更改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接