1

我目前正在使用稍微修改的脚本https://github.com/JasperE84/root-ro从 squashfs 映像引导系统。它几乎按预期工作。

它确实从映像引导到新的只读文件系统,但是,它从“主”系统(即在其上构建 initramfs 的系统)使用内核引导。我尝试使用 initramfs 中的 switch_root 命令,但我无法让它工作,实际上因为这个脚本创建了覆盖,我认为我根本不应该使用 switch_root。

有人可以帮助我提供有关如何引导到只读映像中的内核而不是构建 initramfs 的内核的想法或解决方案吗?

乌鲁斯

4

1 回答 1

0

如果您想squashfs 文件中使用内核,您需要一个可以读取 squashfs 文件的引导加载程序,或者您需要使用kexec在您的引导加载程序可以读取的内核上启动并从任何文件系统跳转到内核第一个内核可以读取。

要详细说明 kexec 选项,您将拥有

  • 内核和 initramfs 通常存储在通用文件系统的引导分区中
  • initramfs 中的一个简单的 init 脚本,它将挂载 squashfs 文件,然后找到新内核
  • 调用 kexec 切换到新内核
  • 运行另一个 initramfs 再次挂载 squashfs,(因为它在 kexec 期间丢失)像您的示例一样初始化覆盖,并完成引导系统

switch_root在第二个 initramfs 中可能仍然需要,但它只会更改用户空间的文件系统视图。它不会改变内核。

U-Boot 可以通过直接从 squashfs 文件加载初始内核来简化这一点,但我从未使用过它,也不知道它是否与树莓派兼容,所以我无法提出建议。

于 2021-06-18T03:11:18.690 回答