将 initramfs 嵌入到现有内核中

5 linux kernel initrd

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

小智 -1

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

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

所以你不必问自己如何嵌入它的问题,而是如何更改它的问题,所以看看你的引导加载程序配置,通常你应该确定 3 件事(也主要按这个顺序)

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

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

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