结论速览
- initramfs 本质就是一套用于 Linux 启动阶段的目录和文件。
rootfs.cpio.gz是打包产物:find列文件、cpio打包、gzip压缩,三件事各管一段。- 内核拿到 initramfs 后解压展开到 RAM,形成
/,然后寻找并执行/init。 - initramfs 运行期间就是根文件系统,掉电即消失;ext4 rootfs 装在 eMMC/SD/SSD 上,长期保存、由内核挂载。
- 两种放法:
CONFIG_INITRAMFS_SOURCE编进内核,或由 U-Boot 与 Kernel、DTB 一起加载到 RAM。
1. 本质
initramfs 本质上就是:
一套用于 Linux 启动阶段的目录和文件。
例如:
1 | rootfs/ |
这些最开始只是 PC 上的普通文件和目录。
2. 为什么会出现 rootfs.cpio.gz
可以把目录打包:
1 | cd rootfs |
其中:
1 | find |
因此:
1 | rootfs/ |
cpio 负责打包,gzip 负责压缩。
3. Kernel 如何使用 initramfs
Kernel 启动时获得 initramfs 后,会把里面的内容展开到 RAM。
过程:
1 | rootfs.cpio.gz |
所以运行后看到的是:
1 | / |
4. initramfs 和 ext4 rootfs 的区别
initramfs:
1 | 文件包 |
ext4 rootfs:
1 | eMMC / SD / SSD |
因此 initramfs 很适合:
1 | 系统 bring-up |
5. initramfs 可以放在哪里
有两种常见方式。
5.1 编译进 Kernel
通过:
1 | CONFIG_INITRAMFS_SOURCE |
直接把 rootfs 嵌进内核镜像。
5.2 由 U-Boot 单独加载
例如:
1 | Kernel |
分别加载到 RAM,再由 U-Boot 启动 Linux。
两种方式最终效果类似:
1 | Kernel 得到 initramfs |