为什么我需要 initramfs?

gpu*_*guy 19 startup initramfs linux-kernel

我发现如果我选择jffssd作为文件系统(而不是initramfs),内核大小将非常小(1.4 MB 与initramfs3.4 MB 相比)。这意味着initramfs需要相当大的空间。所以如果可以的话,我会完全删除它,因此内核会非常小,这正是我想要的。

我脑海中浮现的基本问题是:为什么我需要initramfs?没有任何初始文件系统,Linux 内核不能启动吗?

我的最终应用程序只会进行计算和通信 - 根本没有存储。所以没有文件系统的操作系统是有意义的——至少对我的应用程序来说是这样。

Gil*_*il' 12

initramfs 的大小增加不是由于 ramfs 驱动程序(它只有几 kB,并且无论如何都需要其他东西),而是 initramfs 本身。initramfs 包含组装和挂载真正的根文件系统所必需的程序。

Initramfs 使/引导系统变得更加容易,并且在某些情况下是可能的(例如加密)。强烈建议将其保留在具有大量可热插拔外围设备的 PC 式硬件上。另一方面,在没有任何 initramfs 的情况下启动嵌入式设备很有意义,内核只支持为其构建的特定硬件配置。

内核当然需要引导到文件系统:必须有某种方式让它加载您想要运行的任何应用程序。如果你不打算运行任何东西,那么你最好保持机器的电源关闭。

如果您不想使用 initramfs,只需告诉您的引导加载程序不要通过它。也不包括一个在内核构建的输出,当然-这是如何发生,如果在所有的建筑-和引导程序相关的:例如,vmlinux并且bzImage不包括initramfs中(他们分别是原始和压缩的内核),但是uImage(对于 U-Boot)会同时打包内核和 initramfs(如果有的话)。

(从技术上讲,正如mikeserv 所指出的,总是有一个 initramfs——但默认情况下,它是一个空的 134 字节存档。你所看到的,并想要摆脱的是一个由您的构建过程和包含的工具,然后用于挂载根文件系统。)

请注意,initramfs 可以是制作没有持久数据的单应用程序系统的合理方法:将所有应用程序放入 initramfs,引导并保留它。这样可以更轻松地组织持久存储或引导映像(您只需要内核和 initramfs,它们可以捆绑在一起)。然而,这种方法有缺点:initramfs 中的所有数据都将永久存储在 RAM 中,并且您无法轻松修改启动映像中的文件,您必须重建存档。

  • @mikeserv 你有一个,是的。但是一个空的 initramfs 是花生。它不必被**使用**(这要求它包含足够的程序来挂载真正的根,这在典型的嵌入式系统中以不可忽略的方式增加了大小)。 (2认同)

小智 8

LFS

initramfs 的唯一目的是挂载根文件系统。initramfs 是一组完整的目录,您可以在普通根文件系统上找到这些目录。它被捆绑到一个单独的 cpio 存档中,并使用多种压缩算法之一进行压缩。

...

在 LFS 环境中使用 initramfs 的主要原因只有四个:从网络加载 rootfs,从 LVM 逻辑卷加载它,在需要密码的地方使用加密的 rootfs,或者为了方便将 rootfs 指定为标签或 UUID。其他任何事情通常都意味着内核没有正确配置。

...

对于大多数发行版,内核模块是拥有 initramfs 的最大原因。在一般发行版中,存在许多未知因素,例如文件系统类型和磁盘布局。在某种程度上,这与 LFS 正好相反,LFS 系统功能和布局是已知的,并且通常会构建自定义内核。在这种情况下,很少需要 initramfs。

另一个来源www.kernel.org

除此之外,还有很多 Linux 系统喜欢不使用 initramfs 的路由器。