initramfs一种在 Linux 系统启动初期被加载到内存中的临时根文件系统
initramfs(Initial RAM Filesystem)是一种在 Linux 系统启动初期被加载到内存中的临时根文件系统,它在内核启动后、挂载真正的根文件系统(如 /dev/mmcblk0p2, /dev/ubi0_5, NFS 等)之前使用。
·
initramfs(Initial RAM Filesystem)是一种在 Linux 系统启动初期被加载到内存中的临时根文件系统,它在内核启动后、挂载真正的根文件系统(如 /dev/mmcblk0p2, /dev/ubi0_5, NFS 等)之前使用。
一、简单理解
它的作用就像是一个“引导垫脚石”——帮助 Linux 内核在启动后完成一些必要操作,比如:
- 加载设备驱动(比如挂载 UBI、EXT4、FAT 等所需模块);
- 扫描分区表、识别存储设备;
- 解密根文件系统(如果启用了加密);
- 找到并挂载真正的根文件系统;
- 最终把控制权交给真正的
/sbin/init或系统管理器。
二、启动流程(简化版)
- Bootloader(如 U-Boot)加载 Linux 内核 和 initramfs 到内存;
- 内核启动,并挂载
initramfs(而不是真实的根文件系统)为临时根; - 执行
initramfs里的/init脚本:- 初始化基本设备(如挂载
/proc,/sys,/dev) - 加载额外驱动(如 mmc、ubi、网络)
- 探测和挂载真正的根文件系统
- 初始化基本设备(如挂载
- 切换根(pivot_root 或 switch_root)到真实根文件系统
- 启动真实系统的
/sbin/init
三、 与 initrd 区别?
| 特性 | initrd | initramfs |
|---|---|---|
| 格式 | 压缩的 ext2/ext3 镜像 | cpio 打包的文件系统镜像 |
| 挂载方式 | 作为块设备挂载 | 解压到内存并直接使用 |
| 内核处理方式 | 需要挂载 | 解包后在内存中作为根目录使用 |
| 支持压缩格式 | 通常 gzip | 支持 gzip、lzma、xz、lz4 等 |
| 更现代 | 否 | 是,Linux 2.6 起取代 initrd |
四、文件生成位置
当你使用 buildroot、yocto、或手动编译 Linux 时,initramfs 通常生成为:
initramfs.cpio.gz- 或编译进内核(
CONFIG_INITRAMFS_SOURCE)
五、 一个典型 initramfs /init 脚本内容示例:
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devtmpfs none /dev
# 加载必要模块
modprobe ubi
modprobe ubifs
# 挂载真正的根文件系统
mount -t ubifs /dev/ubi0_0 /new_root
# 切换到真正的根文件系统
exec switch_root /new_root /sbin/init
六、 总结
| 优点 |
|---|
| 模块化启动,灵活适配各种根文件系统 |
| 支持动态加载驱动或识别硬件 |
| 在嵌入式系统中极其常用 |
理解和掌握 initramfs 可以帮助我们处理:
- 动态挂载 UBI 分区
- 替换 rootfs、logo 分区
- 自定义开机流程等问题
更多推荐



所有评论(0)