将 initramfs 嵌入到现有内核中

将 initramfs 嵌入到现有内核中

是否可以将 initramfs 映像嵌入到现有内核中而无需重新编译整个内核?我没有资源来做这件事。

答案1

initramfs 可以在构建时嵌入到内核中(当然,这可以从 menuconfig 中选择 rootfs 树来实现)。并且在某些特定情况下很有用。只需注意,一旦嵌入,最终二进制文件中任何专有的 rootfs 工具都可能破坏 GPL。但除非您的 initramfs 只包含一些 busybox 内容,否则不应该有任何问题。

答案2

通常没有人会将 initramfs 映像集成到内核中,据我所知,这是不可能的(不根据概念重写代码)至少这不是有意的。

initrd 始终是一个单独的数据流(文件),与内核一起加载以帮助启动,它是可选的,但几乎总是包含在现代 gnu/linux 发行版中

所以你不必问自己如何嵌入它的问题,而是如何改变它,所以看看你的引导加载程序配置,通常你应该识别 3 件事(也大多按此顺序)

  • 内核映像(引导你的启动器到内核映像(大多数情况下是一个文件)并将其加载到 RAM 中
  • 命令行(一个字符串,也写入 RAM 中,以便内核访问和使用它(就像在操作系统中提供参数,但在操作系统之外只是写入和调用(汇编代码)))(这个东西大多数时候都有一些 root=/dev/xy ro 什么选项
  • initrd 映像(初始 ramdisk 的可选映像,在内核进入 ram 之后加载,然后内核将其用作虚拟磁盘,主要用于(但例如,有完全在其中运行的实时系统)在找到并安装根文件系统之前协助启动(如磁盘速度慢且不稳定(磁盘顺序、scsi 内容、从网络启动、文件系统加密、如果 fsck 失败则恢复紧急 shell,...等)

所以要回答你的问题,你不需要,如果你的引导加载程序无法直接使用 initrd 并且你不能替换它,只需用它来加载另一个引导加载程序(例如,非常古老的东西仍然可以将 grub 作为内核加载),否则只需在你的引导加载程序配置中更新单独的 initrd 文件的路径。

顺便说一句,如果您使用 grub2,请不要直接编辑配置,它是由 update-grub 使用 /etc/default/grub 和 /etc/default/grub.d/ 中的数据生成的,在 grub legacy 上您仍然可以直接在启动分区上编辑 menu.lst,但是 grub2 对此来说太复杂了,您仍然可以直接编辑内容,但它很可能会在之后被覆盖,所以这不是一个好主意...

相关内容