我有一个运行Yocto(Jethro)的自定义板,想运行一个u-boot命令,preboot。显然,用空格打破引导顺序并手动运行它。如何让它自动运行?更具体地说,默认情况下,启动命令序列在哪里?
编辑:另外,我知道我可以在运行时编辑环境。但是,我正在尝试将此更改构建到图像中,以便我可以分发它。
答案 0 :(得分: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脚本
无论您选择哪种方法,U-Boot中的bootcmd
变量都应保留您的启动脚本。
答案 1 :(得分:1)
一般的答案是默认运行bootcmd,如果有持久环境,你可以更改命令和'saveenv'以保存它。
答案 2 :(得分:1)
当你在uboot环境中时。输入printenv
,它将列出uboot使用的环境变量。
有一个变量名bootcmd
。目前,我的包含一堆if else命令。同样,在那里添加你喜欢的功能进行启动。
完成并测试后。使用saveenv
存储编辑
这是uboot的syntax。
编辑:
U-Boot允许在纯文本文件中存储命令或命令序列。使用
mkimage
工具,您可以将此文件转换为脚本映像,该映像可以使用U-Boot的autoscr
命令执行。 U-boot Scripting Capabilities
答案 3 :(得分:0)
修改上述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"