1

在 U-Boot(来自 Denx)中,是否有可能在 SPL 部分中影响从 U-Boot 部分加载的 uImage 文件?

4

1 回答 1

1

对的,这是可能的。您提供的信息不多,所以我无法确切说明如何操作,但我会给您一个示例,使用存储多个图像的 NAND 磁盘在 am335x 板上可以做什么。

1) 查找您的开发板正在使用的引导脚本。通常它们位于./configs/yourboardname.h感兴趣的行应该类似于:

    #define CONFIG_EXTRA_ENV_SETTINGS \
<..>
    "nandsrcaddr=0x280000\0" \
    "nandimgsize=0x500000\0" \
    "nandboot=echo Booting from nand ...; " \
        "run nandargs; " \
        "nand read ${loadaddr} ${nandsrcaddr} ${nandimgsize}; " \
        "bootm ${loadaddr}\0" \
<...>

...转换为“将内核映像从nandsrcaddrNAND 上的位置复制到 ram 并尝试从那里运行它”。

2)由于环境变量存储在 NAND 中的静态位置,您可以轻松地在 SPL 中编写一个简单的函数,nandsrcaddr使用它的地址手动覆盖(我不会详细说明如何找到该地址,这取决于您的配置)。之后,重新计算 CRC 并写入。查看环境的结构 - struct environment_s

3) 为 SPLboard_init_r函数添加一个开关 ( ./common/spl/spl.c ),这样当满足某个条件时(在启动过程中按下按钮、跳线设置等),您的函数(参见 2)就会被调用,并且内核映像已更改。

于 2013-10-17T08:25:39.040 回答