1. 课程导论与实验环境总览
本课程以“从零观察内核启动”为核心目标,带领学员深入理解 Linux 内核从加电到用户空间初始化的完整路径。第一章作为全课程的总纲,首先梳理内核启动的关键阶段,然后介绍 QEMU 模拟器的核心价值,最后给出本课程实验环境的搭建总览,为后续章节的实战调试打下坚实基础。
1.1 Linux 内核启动流程概述
Linux 内核的启动过程可以划分为若干个逻辑阶段,每个阶段都有明确的入口函数和硬件依赖。理解这些阶段的划分,是后续分析启动日志、设置断点、跟踪执行流的前提。
核心观点: 内核启动的本质是“从实模式到保护模式、从汇编到 C 语言、从单核到多核、从内核态到用户态”的渐进式迁移。
下表总结了 Linux 6.1 内核启动的 6 个主要阶段及其关键特征:
| 阶段 | 入口/关键文件 | 模式 | 主要任务 |
|---|---|---|---|
| 1. 引导加载 | GRUB / UEFI | 实模式 | 加载 bzImage 到内存,跳转到 startup_32 |
| 2. 早期 32 位启动 | arch/x86/boot/compressed/head_64.S | 保护模式 | 解压内核,设置页表,跳转到 startup_64 |
| 3. 64 位内核入口 | arch/x86/kernel/head_64.S | 长模式 | 初始化 BSP,设置 IDT/GDT,调用 start_kernel |
| 4. 内核初始化 | init/main.c → start_kernel() | 长模式 | 初始化子系统(内存、中断、调度、时间等) |
| 5. 内核线程与驱动 | kernel_init() / do_basic_setup() | 长模式 | 加载驱动,挂载根文件系统,启动 init 进程 |
| 6. 用户空间初始化 | /sbin/init (systemd) | 用户态 | 执行系统服务,启动 shell 或图形界面 |
下面这张 SVG 流程图展示了从加电到用户空间的完整启动链路,每个节点对应一个关键阶段:
1.2 QEMU 模拟器简介
QEMU 是一款开源的机器模拟器与虚拟化器,在本课程中扮演“硬件实验室”的角色。与在真实硬件上调试相比,使用 QEMU 具有以下不可替代的优势:
- 可观测性: 通过
-d in_asm,int,cpu_reset等日志选项,可以实时输出每条指令的执行情况。 - 可控制性: 支持 GDB 远程调试,可以在任意指令位置设置断点,单步执行。
- 可重现性: 相同的 QEMU 版本和内核镜像,在任何宿主机上都能产生一致的启动行为。
- 零硬件成本: 无需开发板,一台普通 PC 即可模拟 x86_64、ARM、RISC-V 等多种架构。
调试提示: 本课程所有实验均使用 QEMU 的
-s -S 模式启动,即“启动后暂停等待 GDB 连接”,确保学员可以从第一条指令开始跟踪。
下表对比了 QEMU 与真实硬件在调试场景下的关键差异:
| 对比维度 | QEMU 模拟器 | 真实硬件 |
|---|---|---|
| 启动速度 | 较快(秒级) | 较慢(分钟级) |
| 断点数量 | 无限制(软件断点) | 受硬件调试寄存器限制 |
| 日志输出 | 支持指令级、MMU 级、中断级日志 | 需要 JTAG/SWD 调试器 |
| 快照/回放 | 支持 savevm/loadvm |
不支持 |
| 硬件外设 | 模拟常见设备(virtio、e1000、AHCI) | 真实物理设备 |
下面这张 SVG 图展示了 QEMU 模拟器与宿主机、内核镜像、GDB 调试器之间的交互关系:
1.3 实验环境搭建总览
本课程所有实验均基于以下统一环境,确保学员可以无缝复现每一步操作:
- 宿主机操作系统: Ubuntu 22.04 LTS (Jammy Jellyfish)
- QEMU 版本: 7.2.0(从源码编译或使用官方 PPA 安装)
- Linux 内核版本: 6.1 LTS(从 kernel.org 获取,使用默认 x86_64 配置)
- 根文件系统: Buildroot 生成的 initramfs,包含 busybox 和基本调试工具
- 调试工具链: GDB 12.1 + 内核 vmlinux 调试符号
版本一致性警告: 请务必使用与课程完全一致的版本组合(Ubuntu 22.04 + QEMU 7.2 + Linux 6.1)。不同版本之间的 QEMU 命令行选项、内核启动流程、GDB 调试接口可能存在细微差异,导致实验现象与课程描述不符。
下表列出了搭建实验环境所需的 5 个核心步骤,每个步骤将在后续章节中详细展开:
| 步骤 | 操作内容 | 预期产出 | 对应章节 |
|---|---|---|---|
| 1 | 安装 Ubuntu 22.04 并更新系统包 | 可用的宿主机环境 | 第 2 章 |
| 2 | 从源码编译 QEMU 7.2.0 | qemu-system-x86_64 可执行文件 |
第 3 章 |
| 3 | 下载并编译 Linux 6.1 内核 | arch/x86/boot/bzImage + vmlinux |
第 4 章 |
| 4 | 使用 Buildroot 制作 initramfs | rootfs.cpio.gz |
第 5 章 |
| 5 | 编写启动脚本并验证 QEMU 启动 | 内核启动日志输出到终端 | 第 6 章 |
下面这张 SVG 图以时间线形式展示了实验环境的搭建流程,每个节点代表一个关键产出物:
1.4 本章小结
本章从宏观上建立了课程的知识框架:
- 理解了 Linux 内核启动的 6 个阶段及其核心任务;
- 认识了 QEMU 模拟器在调试场景中的独特优势;
- 明确了本课程实验环境的版本组合与搭建步骤。