- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在coldfire板M5272C3上进行uclinux移植。现在我有从 RAM 运行的内核,并使用 romfs 作为我的根文件系统。我不清楚一些术语的含义以及何时使用它们......
请用最简单的方式解释一下:
问题1:initrd是什么?为什么我们需要它?
问题2:什么是虚拟磁盘?为什么以及在哪里我们需要这个?
问题3:initramfs是什么?为什么以及在哪里使用它?
Q4:ramfs是什么?为什么以及在哪里使用它?
另请参阅文档/引用书以深入了解这些术语......
谢谢福加特
最佳答案
一个ramdisk
仅指内存中的磁盘镜像。它是使用 ramfs
实现的内核中的VFS驱动。 ramdisk 的内容将在下次重新启动或重新启动时被删除。
我将为您提供有关 initrd
的详细信息和initramfs
接下来。
简单来说,initrd
和initramfs
指的是早期用户空间 root filesystem
(又名 rootfs
)这将让您在内存中运行一个非常小的文件系统。
文档位于 Documentation/filesystems/ramfs-rootfs-initramfs.txt
Linux 内核源代码树的一部分,它还会为您提供这些内容的详细描述。
什么是initrd
?
需要这种早期文件系统的一种常见情况是加载硬盘 Controller 的驱动程序模块。如果驱动程序存在于硬盘驱动器上,那就变成了先有鸡还是先有蛋的问题。将这些驱动程序作为早期 rootfs 的一部分有助于内核加载任何检测到的硬盘 Controller 的驱动程序,然后才能从硬盘驱动器挂载实际的根文件系统。此问题的另一个解决方案是将所有驱动程序模块内置到内核中,但这样会增加内核二进制文件的大小。这种文件系统镜像通常称为 initrd
。它是使用 ramfs
来实现的。或tmpfs
。它是使用环回 block 设备进行模拟的。
引导加载程序将内核镜像加载到一个内存地址,将 initrd 镜像加载到另一个内存地址,并告诉内核在哪里找到 initrd,将启动参数传递给内核,并将控制权传递给内核以使其继续启动过程。
那么它与 initramfs
有何不同?然后呢?
initramfs
与 initrd
相比,是一个更早期的文件系统它内置于内核中(当然由内核配置控制)。
据我所知,都是 initrd
和initramfs
由这个单一内核配置控制,但它可能在最近的内核中被更改。
config BLK_DEV_INITRD
我不会深入探讨如何构建您自己的 initramfs,但我可以告诉您它只是使用 cpio
存储文件的格式,可以使用 usr/Kconfig
进行配置在构建内核时。即使你没有指定自己的initramfs镜像,但是已经开启了对initramfs的支持,内核也会自动嵌入一个非常简单的initramfs
包含/dev/console
, /root
以及其他一些文件/目录。
此外还有一个较新的tmpfs
文件系统通常用于实现内存中文件系统。事实上,较新的内核实现了 initrd
使用tmpfs
而不是ramfs
.
更新:
刚刚偶然发现a similar question
This可能也有用
关于embedded - Initrd、Ramdisk、Initramfs、uclinux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15444917/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
运行 Ubuntu 18.04 LTS。我已将脚本放在以下位置: /usr/share/initramfs-tools/scripts/init-bottom/dothis dothis 设置为 +x
有些硬件设备需要用户空间支持,例如守护进程运行和处理不适合(太复杂或与策略相关)内核空间的交互部分。 一旦到达用户空间,运行此类守护进程就很容易了——您可以在热插拔事件后运行它们,不用太担心。 一旦
我的系统 (ARM32) 正在通过 U-Boot 启动 Linux。内核从 u-boot 获取 console=ttymxc1,115200 作为参数。然后它在 initramfs 中使用带有 swi
我在 SmartFusion2 上运行 uClinux,作为构建小型立方体卫星的大学团队的一部分。但是,我在 Linux 内核方面不是很有经验,这个问题让我难过了几天。我试图让 SmartFusion
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我正在coldfire板M5272C3上进行uclinux移植。现在我有从 RAM 运行的内核,并使用 romfs 作为我的根文件系统。我不清楚一些术语的含义以及何时使用它们...... 请用最简单的
我带来了一个RPi。现在使用 Raspbian 或其他哪个发行版? Raspbian 和其他发行版之间到底有什么区别。 http://elinux.org/RPi_Distributions 这些 z
我正在从 minimfs 编译 initramfs,但它在启动过程中无法检测到 init。我有 2 个 simlink,一个位于/init,另一个位于 sbin/init,均指向/sbin/init.
在运行 Linux 2.6.36 的嵌入式平台上,我偶尔会遇到一个问题,即根文件系统中的文件没有出现在我们的 initramfs cpio 文件中。 我正在从 cpio 列表文件构建 initramf
不知谁有过这样的经历。我们正在使用无盘 linux 服务器。在我们使用ramdisk之前,最近我们正在尝试用ramfs制作一个无盘服务器,我们成功地创建了rootfs镜像并启动了服务器。 那么这里的问
我有一 block 嵌入式主板,上面运行着 Linux。 Linux 是通过 uboot 启动的。完整的 Linux 镜像构建为 Initramfs。当系统启动时,我发现根 FS 是可读写的。我的理解
我想修改根设备节点作为 initramfs 脚本的一部分。我不想自己执行 switch_root(除非我必须这样做)。我想添加一个脚本,如果满足某些条件,它可以更改根设备。 我尝试了各种选项,例如读取
我在浏览 Linux 源代码时,在 initramfs 的第 400 行遇到了一段不熟悉的代码。 .我知道括号中的名称是 188 枚举中的状态。在我看来,这是一个默认数组设置函数指针(我可能是错的)。
据我所知,initrd 充当 block 设备,因此需要文件系统驱动程序(例如 ext2)。内核必须至少有一个内置模块用于检测 initrd 的文件系统。在这篇文章中,Introducing init
Linux 内核使用一种 ram 磁盘在早期引导阶段访问模块。出于好奇,我想了解我有一个问题:内核在此阶段必须可以访问包含 initramfs/initrd 的文件。这意味着内核必须支持适当的文件系统
我正在尝试使用 initramfs 作为 linux 内核引导的文件系统。我希望我的文件系统是最小的,所以我只使用没有 rootfs 的 initramfs。现在,一旦内核启动,它就会从 initra
使用gentoo规范为Thinkpad T430编译了内核 挂载空的 ext4 硬盘并在其上创建 boot/目录,将 bzImage 和 System.map 移入其中 使用“extlinux --i
我有这个与 initramfs 一起运行的 perl 脚本。我遇到了很多我不明白的小问题,这些问题肯定与 shell 有关。我要问的具体问题是: system("/sbin/e2fsck -f $de
我想通过编辑现有脚本或在已安装 CentO 的引导文件夹中的 initramfs 中添加新脚本来添加新的 ext3 分区。然后通过将新的 initramfs 镜像替换为其他已安装的 centos,只需
我是一名优秀的程序员,十分优秀!