Embedded Initrd、Ramdisk、Initramfs、uclinux

Embedded Initrd、Ramdisk、Initramfs、uclinux,embedded,embedded-linux,u-boot,uclinux,Embedded,Embedded Linux,U Boot,Uclinux,我正在coldfire板M5272C3上进行uclinux移植。现在,我有一个从RAM运行的内核,其中romfs是我的根文件系统。 我不清楚一些术语的含义以及何时使用它们 请以最简单的方式向我解释: 什么是initrd?为什么我们需要它 什么是ramdisk?为什么我们需要这个 问题3:什么是initramfs?为什么和在哪里使用这个 Q4:什么是ramfs?为什么和在哪里使用这个 此外,请参阅文件/参考书,以深入了解这些术语 谢谢 PhogatAramdisk仅指内存中的磁盘映像。它是使用内核

我正在coldfire板M5272C3上进行uclinux移植。现在,我有一个从RAM运行的内核,其中romfs是我的根文件系统。 我不清楚一些术语的含义以及何时使用它们

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

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

什么是ramdisk?为什么我们需要这个

问题3:什么是initramfs?为什么和在哪里使用这个

Q4:什么是ramfs?为什么和在哪里使用这个

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

谢谢
Phogat

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

接下来,我将向您提供有关
initrd
initramfs
的详细信息

简单地说,
initrd
initramfs
都是指早期阶段的用户空间
根文件系统
(又称
rootfs
),它允许您在内存中运行非常小的文件系统

linux内核源代码树的一部分中提供的文档,还将为您提供这些代码的详细描述

什么是
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
实现
initrd

更新:

只是碰巧碰上


也可能有用

我确实知道这些初始RAM磁盘背后的一般想法以及为什么需要它们。总之,需要加载模块。这是唯一的原因吗?内核是否也使用用户空间助手脚本(来自这个临时文件系统)来加载模块?控制权是如何从这个临时文件系统转移到我的实际文件系统的?毕竟,文件系统映像本身只是(或者可能只是)一个常规的cpio归档文件,它的数量会减少一点。我相信它本身没有任何智慧。因此,我想这一智能必须转移到内核。你能详细解释一下吗?“ramdisk…是用ramfs实现的”——这是不正确的,并且与你提到的Linux文档相矛盾。在整个帖子中,你不恰当地将ramdisk(或rd)等同于ramfs。