3

我正在冷火板 M5272C3 上进行 uclinux 移植。现在,我的内核从 RAM 运行,并使用 romfs 作为我的根文件系统。我不清楚几个术语的含义以及何时使用它们....

请以最简单的方式向我解释:

Q1:什么是initrd?为什么我们需要那个?

Q2:什么是内存盘?为什么以及在哪里需要这个?

Q3:什么是initramfs?我们为什么以及在哪里使用它?

Q4:什么是 ramfs?我们为什么以及在哪里使用它?

另请参阅文档/参考书以深入了解这些术语....

谢谢 Phogat

4

1 回答 1

7

Aramdisk仅指内存中的磁盘映像。它是使用ramfs内核中的 VFS 驱动程序实现的。ramdisk 的内容将在下次重新启动或重启时被擦除。

接下来我将给你详细initrd介绍initramfs

简单来说,initrd和都initramfs指代早期用户空间root filesystem(aka rootfs),它可以让您在内存中运行非常小的文件系统。

出现在 linux 内核源代码树的一部分的文档Documentation/filesystems/ramfs-rootfs-initramfs.txt,它也会给你一个关于这些是什么的详细描述。

是什么initrd

需要这种早期文件系统的一种常见情况是为硬盘控制器加载驱动程序模块。如果驱动器存在于硬盘驱动器上,这将成为一个先有鸡还是先有蛋的问题。将这些驱动程序作为早期 rootfs 的一部分有助于内核加载任何检测到的硬盘控制器的驱动程序,然后才能从硬盘驱动器挂载实际的根文件系统。此问题的另一个解决方案是将所有驱动程序模块都内置到内核中,但是您将通过这种方式增加内核二进制文件的大小。这种文件系统映像通常称为initrd. 它是使用ramfs或实现的tmpfs。它使用环回块设备进行模拟。

引导加载程序将内核映像加载到一个内存地址,将 initrd 映像加载到另一个内存地址,并告诉内核在哪里可以找到 initrd,将引导参数传递给内核,并将控制权传递给内核以使其继续引导过程.

那么它与initramfs那时有什么不同呢?

initramfsinitrd与内置在内核中(当然由内核配置控制)相比,它是一个更早阶段的文件系统。

据我所知,两者initrd都由initramfs这个单一的内核配置控制,但在最近的内核中它可能已经改变了。

config BLK_DEV_INITRD

我不会深入探讨如何构建自己的 initramfs,但我可以告诉你它只是使用cpio格式来存储文件,并且可以usr/Kconfig在构建内核时使用它进行配置。即使您没有指定自己的 initramfs 映像,而是打开了对 initramfs 的支持,内核也会自动嵌入一个非常简单initramfs的包含/dev/console/root以及其他一些文件/目录。

此外,还有一个更新的tmpfs文件系统,通常用于实现内存中的文件系统。事实上,较新的内核initrd使用 usingtmpfs而不是ramfs.

更新:

刚刚偶然发现了一个类似的问题

也可能有用

于 2013-03-16T03:05:53.707 回答