Initrd,Ramdisk,Initramfs,uclinux

时间:2013-03-16 02:27:20

标签: embedded embedded-linux u-boot uclinux

我正在开发uclinux移植到coldfire板M5272C3上。现在我的内核从RAM运行,romfs作为我的rootfile系统。 我不清楚它们的含义和使用时间......

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

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

Q2:什么是ramdisk?我们为什么以及在哪里需要这个?

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

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

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

由于 Phogat

1 个答案:

答案 0 :(得分:7)

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和其他一些文件/目录。< / p>

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

<强>更新

偶然偶然发现了a similar question

This也可能有用