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

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

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

Q2:什么是ramdisk?为什么需要我们在哪里?

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

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

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

谢谢
og

最佳答案

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

接下来,我将为您提供有关initrdinitramfs的详细信息。

简单来说,initrdinitramfs都是指早期用户空间root filesystem(又名rootfs),它将使您在内存中运行非常小的文件系统。

Linux内核源代码树的Documentation/filesystems/ramfs-rootfs-initramfs.txt部分中的文档,还会为您提供这些内容的详细说明。

什么是initrd

需要这种早期文件系统的一种常见情况是加载用于硬盘控制器的驱动程序模块。如果驱动程序位于硬盘驱动器上,则将成为鸡与蛋的问题。将这些驱动程序作为此早期rootfs的一部分,可以帮助内核在从硬盘驱动器挂载实际的根文件系统之前,为所有检测到的硬盘控制器加载驱动程序。解决此问题的另一种方法是将所有驱动程序模块内置到内核中,但是您将以这种方式增加内核二进制文件的大小。这种文件系统映像通常称为initrd。使用ramfstmpfs实现。使用回送块设备对其进行仿真。

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

那么和initramfs有什么不同呢?

initramfs相比,initrd是一个更早的阶段的文件系统,该文件系统内置在内核中(当然,受内核配置控制)。

据我所知,initrdinitramfs都由单个内核配置控制,但是在最近的内核中可能已更改。

config BLK_DEV_INITRD


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

此外,还有一个更新的tmpfs文件系统,通常用于实现内存中的文件系统。实际上,较新的内核使用initrd代替tmpfs实现ramfs

更新:

刚巧偶然发现a similar question

This也可能有用

10-08 02:03