如何在设备启动时重置内核?

时间:2016-10-05 13:10:53

标签: linux linux-kernel debian u-boot dd

如何在设备启动时替换rootfs分区的内容?
我正在使用带有剥离debian版本的pine64(1GB)并且编写了一个工厂重置脚本,该脚本将在设备运行时替换rootfs分区中的所有文件?驻留恢复文件可以是tar或img文件 我已经尝试了两种方法

  1. dd从图像到设备分区的分区 sudo dd if=pine-debian.img skip=*start of rootfs partition* seek=*start of rootfs partition* of=/dev/mmcblk0
  2. 将压缩内容解压缩到/目录 sudo tar -C / -zxvf pine-debian.tar.gz
  3. 在两种方法之后,系统可以识别任何命令,甚至不是ls。任何帮助将不胜感激如何解决这个问题。如何在设备运行时替换fs内容?

1 个答案:

答案 0 :(得分:1)

理想情况下,您应该有两个分区,每个分区都有一个rootfs副本。您可以使用dd编写当前未使用的分区,然后更新引导加载程序配置以指向刚写入的分区作为根。 swupdate支持这种双库方案,但它只对U-Boot提供原生支持;如果您使用不同的引导加载程序,则必须添加脚本来执行交换。

如果确实需要就地覆盖,则无法直接覆盖分区,因为该文件系统当前正在使用中。 Untarring也会失败,因为某些文件当前正在使用 - 特别是libc。您可以尝试将--unlink-first选项添加到untar命令中,但我不确定它是否有效。

另外两个选择:

  1. 使用Debian软件包升级,而不是覆盖完整的rootfs。它们具有安装前和安装后脚本,可以使升级安全。
  2. 切换到(临时,小)RAM内根文件系统以执行升级。此根文件系统应该只包含busybox和执行升级的脚本。您可以终止所有进程,然后将pivot_root执行到临时rootfs,也可以使用kexec --initrd=...启动进入内存的根文件系统。