Kernel U-Boot:影响在SPL中加载哪个内核映像

Kernel U-Boot:影响在SPL中加载哪个内核映像,kernel,spl,u-boot,Kernel,Spl,U Boot,在U-Boot(来自Denx)中,是否有可能影响SPL部件中从U-Boot部件加载的uImage文件?是的,有可能。您提供的信息不多,因此我无法确切说明如何操作,但我将给您一个示例,说明如何在am335x板上使用存储多个映像的NAND磁盘执行操作 1) 查找您的板正在使用的引导脚本。通常它们位于./configs/yourboardname.h中。感兴趣的行应该类似于: #define CONFIG_EXTRA_ENV_SETTINGS \ <..> "nandsrc

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

是的,有可能。您提供的信息不多,因此我无法确切说明如何操作,但我将给您一个示例,说明如何在am335x板上使用存储多个映像的NAND磁盘执行操作

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" \
<...>
#定义配置额外环境设置\
“nandsrcaddr=0x280000\0”\
“nandimgsize=0x500000\0”\
“nandboot=从nand进行回显引导…”\
“运行nandargs;”\
“nand read${LOADDDR}${nandsrcaddr}${nandimgsize};”\
“bootm${loadaddr}\0”\
…这转化为“将内核映像从NAND上的
nandsrcaddr
位置复制到ram,并尝试从那里运行它”

2) 由于环境变量存储在NAND上的一个静态位置,您可以轻松地在SPL中编写一个简单的函数,使用它的地址手动覆盖
nandsrcaddr
(我不会详细介绍如何找到该地址,这同样取决于您的配置)。之后,重新计算CRC并将其写入。请参见environmentals的结构-
struct environment\u s


3) 在SPL
board\u init\r
函数(./common/SPL/SPL.c)中添加一个开关,这样当满足某个条件时(启动时按下按钮、跳线设置等),就会调用您的函数(参见2)并更改内核映像的地址。

是的,这是可能的。您提供的信息不多,因此我无法确切说明如何操作,但我将给您一个示例,说明如何在am335x板上使用存储多个映像的NAND磁盘执行操作

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" \
<...>
#定义配置额外环境设置\
“nandsrcaddr=0x280000\0”\
“nandimgsize=0x500000\0”\
“nandboot=从nand进行回显引导…”\
“运行nandargs;”\
“nand read${LOADDDR}${nandsrcaddr}${nandimgsize};”\
“bootm${loadaddr}\0”\
…这转化为“将内核映像从NAND上的
nandsrcaddr
位置复制到ram,并尝试从那里运行它”

2) 由于环境变量存储在NAND上的一个静态位置,您可以轻松地在SPL中编写一个简单的函数,使用它的地址手动覆盖
nandsrcaddr
(我不会详细介绍如何找到该地址,这同样取决于您的配置)。之后,重新计算CRC并将其写入。请参见environmentals的结构-
struct environment\u s


3) 在SPL
board\u init\r
函数(./common/SPL/SPL.c)中添加一个开关,这样当满足某个条件时(启动时按下按钮、跳线设置等),就会调用您的函数(参见2),并更改内核映像的地址。

非常感谢!我将深入研究这种方法,并找出如何编写此函数。我正在使用omap4430/60平台。我已找到与我的平台对应的头文件(包括(configs/omap4_common.h)。但是,我不知道如何动态地重新定义这些参数。据我所知,我的平台没有NAND内存。@PeterRussel,NAND不是必需的,我只是以它为例。您需要做的是将指针/标志等从SPL传递到U-Boot。您仍然可以从某些媒体引导系统,如果它是非只读的,则此任务变为琐碎。非常感谢!我将深入研究此方法并找出如何编写此函数。我正在使用omap4430/60平台。我已经找到与我的平台对应的头文件(包括(configs/omap4_common.h)。但是,我不知道如何动态地重新定义这些参数。据我所知,我的平台没有NAND内存。@PeterRussel,NAND不是必需的,我只是以它为例。您需要做的是将指针/标志等从SPL传递到U-Boot。您仍然可以从某些媒体引导系统,如果它是非只读的,则此任务变为琐碎的。