小编Gil*_*pie的帖子

linux如何知道rootfs在哪里?

我试图了解 linux 内核如何知道启动时所需的 rootfs 在哪里。

我读了这个文件:

https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt

感兴趣的部分说:

所有 2.6 Linux 内核都包含一个 gzip 压缩的“cpio”格式存档,在内核启动时将其解压缩到 rootfs 中……如果在将嵌入式 cpio 存档解压缩到其中后,rootfs 中不包含 init 程序,则内核将失败用于定位和挂载根分区的旧代码

我们的内核是 4.X,但我猜这仍然适用吗?这听起来像所有内核都有一个嵌入式“cpio”rootfs。

事实上,正如我们在上面读到的那样:

2.6 内核构建过程总是创建一个 gzipped cpio 格式的 initramfs 存档并将其链接到生成的内核二进制文件中。默认情况下,此存档为空...配置选项 CONFIG_INITRAMFS_SOURCE ... 可用于指定 initramfs 存档的源

这又引发了几个问题:

  1. 因此,如果我希望我的 rootfs 在 RAM 中,我需要设置CONFIG_INITRAMFS_SOURCE指向我的 rootfs(大概是 cpio 格式)。

但这不是意味着我的内核和 rootfs 现在是不可分割的吗?如果我想在不重建的情况下对 RootFS 进行小幅调整怎么办?如果我希望我的 rootfs 与内核分开存储怎么办?如何告诉内核我的 rootfs 的位置?

  1. 此外,如果我希望我的 rootfs 位于物理存储(如 eMMC、闪存驱动器等)而不是 RAM 中怎么办?

之前说过:

如果在嵌入的 cpio 归档文件被提取到 rootfs 之后,它不包含一个 init 程序,内核将使用旧代码来定位和挂载一个根分区

但是……怎么办?它如何知道在哪里可以找到 rootfs?如果它在 eMMC 上,我需要以某种方式告诉内核,对吗?

我使用的引导程序是 U-boot。我检查了 U-boot 环境变量,看看它是否以某种方式将 rootfs 位置作为引导参数传递给内核,但似乎并非如此...... …

linux-kernel root-filesystem

3
推荐指数
2
解决办法
7746
查看次数

标签 统计

linux-kernel ×1

root-filesystem ×1