我正在开发coldfire板M5272C3上的uclinux移植。现在,我的内核从RAM中运行,romfs作为我的根文件系统。我不清楚有几个术语是什么意思,什么时候使用它们.
请以最简单的方式解释我:
Q1: initrd是什么?我们为什么要这么做?
Q2:什么是ramdisk?我们为什么和在哪里需要这个?
Q3: initramfs是什么?我们为什么和在哪里用这个?
Q4:什么是ramfs?我们为什么和在哪里用这个?
此外,请参阅文件/参考书对这些术语的深入了解.
谢谢菲加特
发布于 2013-03-16 03:05:53
ramdisk只是指内存中的磁盘映像.它是使用内核中的ramfs VFS驱动程序实现的。在下一次重新启动或电源循环时,将删除ramdisk的内容。
接下来,我将向您详细介绍initrd和initramfs。
简单地说,initrd和initramfs都是指一个早期的用户空间root filesystem (又名rootfs),它允许您在内存中运行一个非常小的文件系统。
的Documentation/filesystems/ramfs-rootfs-initramfs.txt部分提供了文档,这也将为您提供对这些文件的长度描述。
什么是initrd ?
需要这样一个早期文件系统的一个常见情况是为硬盘控制器加载驱动程序模块。如果司机在硬盘上,那就成了鸡与蛋的问题.将这些驱动程序作为这个早期阶段rootfs的一部分,可以帮助内核在从硬盘上挂载实际根文件系统之前,为任何检测到的硬盘控制器加载驱动程序。解决此问题的另一个解决方案是将所有驱动程序模块内置到内核中,但是您将以这种方式增加内核二进制文件的大小。这种文件系统映像通常称为initrd。它是使用ramfs或tmpfs实现的。使用回环块装置对其进行仿真。
引导加载器将内核映像加载到内存地址,initrd映像加载到另一个内存地址,并告诉内核在哪里查找initrd,将引导参数传递给内核,并将控制传递给内核,让内核继续启动过程。
那么,它与initramfs 有什么不同呢?
initramfs是一个比initrd更早的文件系统,它是内置到内核中的(当然是由内核配置控制的)。
据我所知,initrd和initramfs都是由这个单独的内核配置控制的,但是它可以在最近的内核中进行更改。
config BLK_DEV_INITRD我不会深入研究如何构建您自己的initramfs,但我可以告诉您,它只是使用cpio格式来存储文件,并且可以在构建内核时使用usr/Kconfig进行配置。即使您没有指定您自己的initramfs映像,但打开了对initramfs的支持,内核也会自动嵌入一个非常简单的initramfs,其中包含/dev/console、/root和其他一些文件/目录。
此外,还有一个更新的tmpfs文件系统,它通常用于实现内存中的文件系统。实际上,较新的内核使用tmpfs而不是ramfs来实现ramfs。
更新:
只是碰巧碰上了a similar question
This也可能是有用的
https://stackoverflow.com/questions/15444917
复制相似问题