为u-boot创建boot.scr

3

我使用Yocto为Freescale i.mx6 sabresd生成图像。在启动时,为了激活HDMI,我需要通过编辑bootargs来修改u-boot。我使用以下命令:

setenv mmcargs 'setenv bootargs console=ttymxc0,115200 root=/dev/mmcblk2p2 rootwait rw video=mxcfb0:dev=hdmi, 1920x1080M@60, if=RGB24'

我可以使用saveenv命令,以便在每次启动时无需手动输入该命令。但我想自动化这个过程,以便更轻松地部署。因此,我创建了一个名为boot.scr的文件。以下是boot.txt的内容:
setenv mmcargs 'setenv bootargs console=ttymxc0,115200 root=/dev/mmcblk2p2 rootwait rw video=mxcfb0:dev=hdmi, 1920x1080M@60, if=RGB24'
boot

我使用mkimage -A arm -T script -O linux -d boot.txt boot.scr创建了boot.scr。但是,在启动时,它会出现一个循环(boot使uboot重新加载配置,其中读取boot,因此它再次开始)。没有boot,就无法启动。我尝试了很多可能性:boot 0x120000000bootmbootz,带有许多选项,但什么都不起作用。
2个回答

3
很可能,您的引导失败是因为您从未加载过可以引导的内核。
在大多数情况下,如果bootcmd加载了一个boot.scr文件,则由您的boot.scr脚本来加载内核(假设您正在使用最新的iMX6内核,还包括设备树)。然后,您的脚本可以使用此内核启动,或者允许bootcmd继续使用已加载的内核进行引导序列。加载命令看起来会像这样:
loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}
loaduimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${uimage}

启动命令应该类似于:

run loaduimage; run loadfdt; bootm ${loadaddr} - ${fdt_addr}

您可能已经定义了一个mmcboot命令,它已经处理了这些问题。
我会从您的脚本中删除"boot"行,并且加载内核和设备树,然后运行bootm (或mmcboot) - 也就是在设置mmcarg之后尝试将上述三行添加到您的脚本中,您需要确保所有引用的变量都正确设置(即mmcdev,mmpart等)。

1

使用 shibley 的答案,我找到了一个更简单的方法:

run loadimage
run mmcboot

他说得对,mmcboot 负责内核的引导。但是在此之前我必须运行 loadimage(而不是loaduimage)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接