RootFS(Root Filesystem,根文件系统)是 Linux 系统启动后挂载为 / 的文件系统,包含用户态程序、动态库、配置文件、系统服务和基础目录结构。
核心问题
Linux kernel 启动后只负责内核态资源管理和驱动,它还需要用户态环境来运行 init、shell、系统服务和应用程序。RootFS 解决的是“内核启动后进入哪个用户态世界”的问题。
没有可用 RootFS,内核即使启动成功,也会因为找不到 init、库文件、设备节点或挂载点而无法进入完整系统。
核心结构
RootFS 通常包含:
- 基础目录:
/bin、/sbin、/lib、/etc、/dev、/proc、/sys、/var、/tmp、/usr。 - init 系统:BusyBox init、systemd、OpenRC 或自定义 init。
- 动态库和运行时:C runtime、驱动用户态库、设备厂商库。
- 系统配置:网络、用户、服务、日志、挂载表和启动脚本。
- 设备与服务入口:udev/mdev、systemd unit、应用守护进程。
- 应用和工具:诊断工具、业务程序、升级程序和产测工具。
嵌入式系统中,RootFS 可以由 Buildroot、Yocto、Debian/Ubuntu base rootfs 或厂商 SDK 生成,也可以打包成 ext4、squashfs、ubifs、initramfs 等镜像格式。
工程用途
RootFS 是 设备 BSP 的用户态交付核心:
- 系统启动:提供
/sbin/init或等价入口。 - 驱动配套:放置 firmware、udev 规则、用户态库和设备权限配置。
- 产品服务:预装业务服务、日志策略、网络配置和升级程序。
- 调试维护:提供 shell、工具链、日志目录和远程访问能力。
- 量产镜像:决定默认账号、分区挂载、只读策略和恢复机制。
边界与常见坑
- RootFS 不等于内核:驱动是否可用主要由内核和设备树决定,RootFS 提供用户态配套。
- 能挂载不等于能启动:缺少 init、动态库、设备节点或权限配置都会导致启动失败。
- 只读 RootFS 需要状态分区:日志、配置、数据库和升级状态不能随意写进只读系统分区。
- 架构必须匹配:ARM32、ARM64、x86_64、软浮点/硬浮点、glibc/musl 不匹配都会运行失败。
- 厂商库和内核驱动要匹配:NPU、ISP、GPU、摄像头等用户态库常和内核驱动强耦合。
- rootfs 路径由启动参数决定:bootargs、分区 UUID、initramfs 和挂载脚本不一致会导致找不到根分区。