使用JasperE84/root-ro脚本更改内核switch_root



我目前正在使用一个稍微修改过的脚本https://github.com/JasperE84/root-ro用于从squashfs映像启动系统。它几乎如预期的那样工作。

它确实从映像引导到新的只读文件系统,然而,它从";主";系统,initramfs建立在它之上的系统。我尝试了initramfs中的switch_root命令,但我无法使其工作,实际上,由于这个脚本创建了覆盖,我认为我根本不应该使用switch_root。

有人能帮我提供一个想法或解决方案,告诉我如何引导到只读映像中的内核,而不是initramfs构建时使用的内核吗?

Uros

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

要详细说明kexec选项,您需要

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

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

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

相关内容

  • 没有找到相关文章

最新更新