如何解决使用 JasperE84/root-ro 脚本更改内核 switch_root
我目前正在使用稍微修改过的脚本 https://github.com/JasperE84/root-ro 从 squashfs 映像启动系统。它几乎按预期工作。
它确实从映像启动到新的只读文件系统,但是,它从“主”系统(即 initramfs 建立在其上的系统)中启动内核。我尝试使用 initramfs 中的 switch_root 命令,但我无法让它工作,实际上因为这个脚本创建了覆盖,我认为我根本不应该使用 switch_root。
有人可以帮助我提供有关如何引导到只读映像中的内核而不是构建 initramfs 的内核的想法或解决方案吗?
乌罗斯
解决方法
如果你想在squashfs文件内部使用内核,你需要a boot loader that can read squashfs files,或者你需要使用kexec在你的引导加载程序的内核上启动可以从第一个内核可以读取的任何文件系统读取并跳转到内核。
要详细说明 kexec 选项,您应该
- 内核和 initramfs 通常存储在公共文件系统的引导分区中
- initramfs 中的一个简单的 init 脚本,用于挂载 squashfs 文件,然后找到新内核
- 调用 kexec 切换到新内核
- 运行另一个 initramfs 再次挂载 squashfs,(因为它在 kexec 期间丢失)像示例中一样初始化覆盖层,并完成系统启动
switch_root
在第二个 initramfs 中可能仍然需要,但它只会更改用户空间的文件系统视图。它不会改变内核。
U-Boot 可以通过直接从 squashfs 文件加载初始内核来简化这一点,但我从未使用过它,也不知道它是否与 raspberry pi 兼容,所以我无法提出建议。>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。