Initrd,Ramdisk,Initramfs,uclinux

Pho*_*ish 3 embedded uclinux embedded-linux u-boot

我正在使用uclinux移植冷冻板M5272C3.现在我的内核从RAM运行,romfs作为我的rootfile系统.我不清楚他们的意思和使用时间.

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

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

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

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

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

有关这些术语的深入了解,请参阅文档/参考书....

谢谢Phogat

Tux*_*ude 7

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

我会给你详细介绍initrdinitramfs下一步.

简单来说,都initrdinitramfs指早期用户空间root filesystem(也就是rootfs),可以让你在运行内存一个很小的文件系统.

该文档存在于Documentation/filesystems/ramfs-rootfs-initramfs.txtlinux内核源代码树的一部分,它还可以为您提供这些内容的长度描述.

什么是initrd

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

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

那么它与initramfs那时有何不同?

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

据我所知,双方initrdinitramfs通过这个单一的内核配置控制,但它可能已在最近的内核被改变.

config BLK_DEV_INITRD
Run Code Online (Sandbox Code Playgroud)

我不会深入研究如何构建自己的initramfs,但我可以告诉你它只是使用cpioformat来存储文件,并且可以usr/Kconfig在构建内核时使用它进行配置.即使你不指定自己的initramfs镜像,但开启initramfs的支持下,内核会自动嵌入一个非常简单的initramfs包含/dev/console,/root以及一些其他的文件/目录.

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

更新:

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

也可能有用