我有能力从u-boot启动到几个分区:当前运行的内核/ rootfs,最后知道好的内核/ rootfs,以及工厂重置内核/ rootfs。
如果内核/ rootfs覆盖了自身的一部分然后不断重置,它是否能够恢复?我觉得像硬编码回退一样,因为bootcmd环境变量中的脚本有点像黑客。对此有共同的方法吗?
在bootcmd变量中,沿着以下行嵌套脚本:
setenv bootargs "root=/dev/mmcblk0p2 rdinit=/bin/kinit rw single"
setenv bootcmd_mmc "ext2load mmc 0:1 0x40000000 my_kernel.itb && bootm"
run bootcmd_mmc
setenv bootargs "root=/dev/mmcblk0p4 rdinit=/bin/kinit rw single"
setenv bootcmd_mmc "ext2load mmc 0:3 0x40000000 my_kernel.itb && bootm"
run bootcmd_mmc
setenv bootargs "root=/dev/mmcblk0p6 rdinit=/bin/kinit rw single"
setenv bootcmd_mmc "ext2load mmc 0:5 0x40000000 my_kernel.itb && bootm"
run bootcmd_mmc
答案 0 :(得分:0)
根据需求类型可以有多种选择。其中一个可以基于禁用自动引导和控制。如果启用了自动加载(自动引导)选项,则可能需要禁用它。检查bootdelay参数。如果将其设置为-1,则可以通过控制根据您的意愿进行更改来禁用自动引导。
如果您可能需要通过脚本尝试不同的配置 - 可以通过简单的方法修改u-boot环境中的bootcmd变量,以便它可以尝试通过更改使用/适用于您的主板的不同配置来启动用于启动的u-boot脚本。
但是,如果由于图像损坏导致启动失败,bootm可能非常有用。如果第一个图像或第二个图像的启动失败或两个图像文件都不存在,则以下命令允许通过tftp服务器加载图像。
bootm $imageone_addr || bootm $imagetwo_addr || tftpboot $addr $filename && bootm
另外,另一种方法是在每次重启时从一组最新图像加载备用图像,以便稳定版本保持不重新启动。