【问题标题】:Run u-boot command at startup启动时运行 u-boot 命令
【发布时间】:2016-09-10 21:51:58
【问题描述】:

我有一个运行 Yocto (Jethro) 的定制板,并且想运行一个 u-boot 命令 preboot。显然,用空间打破引导顺序并手动运行它是可行的。如何让它自动运行?更具体地说,默认情况下,启动命令序列在哪里?

编辑:另外,我知道我可以在运行时编辑环境。但是,我正在尝试将此更改构建到图像中,以便分发它。

【问题讨论】:

    标签: u-boot yocto


    【解决方案1】:

    当你在 uboot 环境中时。输入printenv,会列出uboot使用的环境变量。

    有一个变量名bootcmd。目前,我的包含一堆 if else 命令。同样,在此处添加您的首选功能以进行引导。

    在它完成和测试之后。使用saveenv 存储编辑

    这是 uboot 的 syntax。

    编辑:

    U-Boot 允许将命令或命令序列存储在纯文本文件中。使用mkimage 工具,您可以将此文件转换为可以使用U-Boot 的autoscr 命令执行的脚本映像。 U-boot Scripting Capabilities

    【讨论】:

    • 是的,这行得通,但那只是那个磁盘。如何自动将其构建到图像中?
    【解决方案2】:

    通常,您的 U-Boot 配方将为单台机器构建 U-Boot,在这种情况下,我通常只需修补已编译的默认 U-Boot 环境以执行正确的操作。这是通过

    实现的
     SRC_URI_machine += "file://mydefenv.patch"
    

    或者(甚至更好)使用你自己的 git 树。这还有一个额外的好处,即您的系统可能能够启动并获得一些有用的东西,即使环境会完全损坏。

    另一种可能性是像查尔斯在对另一个答案的评论中建议的那样做,离线创建一个环境,并让 U-Boot 加载它,请参阅denx.de/wiki/view/DULG/UBootScripts

    第三种可能性,我有时也使用过,是离线构建环境(可能使用与上面链接中相同或相似的机制),以及在正常闪存编程过程中闪存环境.不过,大部分时间我都是在 AT91 上完成的,使用类似于 at91 Sam-Ba TCL script 的 tcl 脚本

    无论您选择哪种方法,U-Boot 中的bootcmd 变量都应该保存您的启动脚本。

    【讨论】:

      【解决方案3】:

      一般的答案是 bootcmd 是默认运行的,如果有持久化环境,你可以更改命令和 'saveenv' 使其保留。

      【讨论】:

        【解决方案4】:

        修改上述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" 中公开该文件

        【讨论】:

          猜你喜欢
          • 2019-04-03
          • 1970-01-01
          • 2018-12-31
          • 2020-12-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-25
          相关资源
          最近更新 更多