如何从失败的内核或rootfs中恢复?

时间:2015-09-23 00:26:44

标签: kernel embedded-linux bootloader reboot u-boot

我有能力从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

1 个答案:

答案 0 :(得分:0)

根据需求类型可以有多种选择。其中一个可以基于禁用自动引导和控制。如果启用了自动加载(自动引导)选项,则可能需要禁用它。检查bootdelay参数。如果将其设置为-1,则可以通过控制根据您的意愿进行更改来禁用自动引导。

如果您可能需要通过脚本尝试不同的配置 - 可以通过简单的方法修改u-boot环境中的bootcmd变量,以便它可以尝试通过更改使用/适用于您的主板的不同配置来启动用于启动的u-boot脚本。

但是,如果由于图像损坏导致启动失败,bootm可能非常有用。如果第一个图像或第二个图像的启动失败或两个图像文件都不存在,则以下命令允许通过tftp服务器加载图像。

bootm $imageone_addr || bootm $imagetwo_addr || tftpboot $addr $filename && bootm

另外,另一种方法是在每次重启时从一组最新图像加载备用图像,以便稳定版本保持不重新启动。