从 U-Boot 到 Linux 启动,卡在哪一步?

很多嵌入式 Linux 学习者在移植系统时,常遇到一个典型断层:U-Boot 已经能正常引导内核镜像,但控制台打印出 "VFS: Cannot open root device" 或直接进入 panic 状态后便停滞不前。这通常不是因为内核编译错了,而是对根文件系统(rootfs)的结构、挂载原理以及启动初期的初始化流程缺乏清晰认知。许多学员止步于使用现成的根文件系统镜像,一旦需要定制或排查启动故障,便无从下手。

这门课程聚焦于解决这一具体能力缺口。它不泛泛而谈 Linux 文件系统理论,而是直接从 U-Boot 传递给内核的参数入手,拆解根文件系统在嵌入式环境中的实际形态。你会清楚理解 ext3、jffs2、cramfs 等格式在嵌入式场景下的适用边界,以及为什么在实际工程中,我们往往需要自己动手制作根文件系统,而不是依赖现成的发行版。建议读者在学完内核编译后再进入此模块,以确保对启动流程有整体把握。

动手构建与调试:从裸机到可用 shell

课程的核心价值在于“手搓”根文件系统。你将跟随步骤,亲手制作一个基于 ext3 格式的简易 rootfs,并掌握通过 NFS 网络挂载方式启动该系统的方法。这意味着在开发阶段,你无需反复烧录存储介质,即可快速迭代文件系统内容,这是嵌入式移植中极为高效的调试手段。课程将详细演示如何准备交叉编译工具链、配置 minimal rootfs,以及编写必要的 init 脚本。

更重要的是,课程深入剖析了启动链中最容易被忽视的环节:linuxrc 的作用与配置。许多学习者知道要创建 init 进程,却不清楚系统在挂载根文件系统后,究竟是如何找到并执行第一个程序的。通过解析 VFS(虚拟文件系统)接口以及 rootfs 中必须包含的设备节点、库文件和目录结构,你将填补“内核已启动,但用户空间未就绪”这一关键知识盲区。资料包提供了构建脚本和配置文件样本,建议对照源码理解每一步命令的含义,而非直接复制运行。

学完能独立做什么?

完成本部分学习后,你将具备以下独立实操能力:能够根据目标硬件性能,选择合适的根文件系统格式并动手制作;能够配置 U-Boot 环境变量,通过 NFS 或 Flash 两种方式成功挂载自定义根文件系统;能够排查因缺少关键设备节点、动态链接库或 init 脚本错误导致的启动失败问题;能够解释 VFS 在 Linux 启动过程中的核心调度作用,以及 linuxrc 与 init 进程的协作机制。后续可进一步学习根文件系统优化与定制,以应对更复杂的业务需求。

课程目录

1 2.18.1.根文件系统概述 (38:05)
2 2.18.2.根文件系统的形式 (24:30)
3 2.18.3.自己制作ext3格式的根文件系统 (28:51)
4 2.18.4.nfs方式启动自制简易文件夹形式的rootfs (38:49)
5 2.18.5.到底什么是linuxrc (28:25)
6 2.18.6.rootfs中还应该有什么 (22:18)
7 2.18.7.VFS简介 (23:11)