我有一个运行Yocto(Jethro)的自定义板,想要运行单个u-boot命令"preboot"。显然,通过按下空格键打断启动序列,并手动运行它是可行的。我该如何自动运行它?更具体地说,默认情况下启动命令序列在哪里?
编辑:此外,我知道可以在运行时编辑环境变量。但是,我正在尝试将此更改构建到镜像中,以便我可以分发它。
编辑:此外,我知道可以在运行时编辑环境变量。但是,我正在尝试将此更改构建到镜像中,以便我可以分发它。
printenv
,它将列出uboot使用的环境变量。bootcmd
的变量。目前,我的包含一堆if else命令。同样,添加您喜欢的函数以供启动。saveenv
存储编辑内容。mkimage
工具,您可以将此文件转换为脚本映像,然后使用U-Boot的autoscr
命令执行它。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中应该包含您的引导脚本。
最简单的修改方法是修改已经执行的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"