Raspberry pi 使用jasper84/root ro脚本更改内核开关\u根

Raspberry pi 使用jasper84/root ro脚本更改内核开关\u根,raspberry-pi,readonly,busybox,initramfs,Raspberry Pi,Readonly,Busybox,Initramfs,我目前正在使用一个稍微修改过的脚本从squashfs映像引导系统。它几乎像预期的那样工作 它确实从映像引导到新的只读文件系统,但是,它使用“主”系统(initramfs构建在其上的系统)的内核引导。我尝试使用initramfs中的switch\u root命令,但我无法让它工作,事实上,由于这个脚本创建了覆盖,我认为我根本不应该使用switch\u root 有人能帮我提供一个想法或解决方案,告诉我如何引导到只读映像中的内核,而不是使用initramfs构建的内核吗 Uros如果要在squash

我目前正在使用一个稍微修改过的脚本从squashfs映像引导系统。它几乎像预期的那样工作

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

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


Uros

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

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

  • 内核和initramfs通常存储在公共文件系统的启动分区中
  • initramfs中的一个简单init脚本,它将装载squashfs文件,然后查找新内核
  • 调用kexec切换到新内核
  • 运行另一个initramfs,再次装载squashfs(因为它在kexec期间丢失),像您的示例中那样初始化覆盖,并完成系统引导
switch\u root
在第二个initramfs中可能仍然需要,但它只会更改文件系统的用户空间视图。它不会改变内核


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

我越是考虑它,就越觉得我的方法不正确。我下一个解决方法是将initramfs引导选择/覆盖脚本分为两部分。第一部分-在主引导分区上,我应该检查并加载映像,然后使用switch\u root命令切换到它。然后在只读映像上,再次初始化将建立覆盖的initramfs根ro脚本。我现在不确定switch_root是否会进入映像的完全引导过程-它会在映像上启动initramfs吗?乌罗斯