第 9 章 · 02 引导链路:从上电到内核启动


第 9 章 · 02 引导链路:从上电到内核启动

本节摘要:计算机一上电,CPU 怎么开始跑?本节讲引导(boot)链路:BIOS/UEFI 固件 → 读引导扇区(bootloader)→ bootloader 把内核加载进内存 → 内核开始执行。这是造 OS 的第一关——让你的代码能在裸机上跑起来。理解引导,你就理解了「计算机怎么从无到有启动」。

内容来源:基于 OS 引导流程整理的导读。

学习目标

  1. 说清引导链路四步:上电 → 固件(BIOS/UEFI)→ bootloader → 内核。
  2. 理解 BIOS 与 UEFI 的差别(传统与现代固件)。
  3. 解释 bootloader 的职责(从磁盘读内核进内存,跳过去执行)。
  4. 理解这是「让裸机能跑你代码」的第一关。

一、学习价值:造 OS 的第一关

造 OS,你的第一个问题是「我的代码怎么在裸机上跑起来?」CPU 一上电,从一个固定地址(如 x86 的 0xFFFF0)开始执行——那里是主板的固件(BIOS/UEFI),不是你的代码。你要通过引导链路,一步步把执行权交给你的内核。这是造 OS 的「第一关」,跨过去你的代码才能在裸机上跑。

二、认知拆解:引导链路

1. 上电: CPU 从固定地址开始执行固件 2. 固件(BIOS/UEFI): - 硬件自检(POST)、初始化 - 按设置从某设备(硬盘/网络/U 盘)读"引导程序" 3. bootloader(引导程序, 如 GRUB): - 理解文件系统, 找到内核映像 - 把内核加载进内存 - (可选)切换 CPU 模式(实模式→保护模式/长模式) - 跳到内核入口地址 4. 内核: 开始执行, 初始化各子系统 ​

BIOS vs UEFI

  • BIOS(传统):从磁盘第一扇区(512 字节,「引导扇区」)读代码执行。512 字节太小,通常只够再加载更大的 bootloader。
  • UEFI(现代):不限于扇区,直接从 EFI 系统分区读 .efi 可执行文件。更灵活、支持更大磁盘(GPT)、更快。

bootloader 的关键职责

bootloader 处于「固件已跑完、内核还没开始」的中间地带。它干的事:理解文件系统找到内核、加载内核进内存、可能切换 CPU 模式(实模式只能寻址 1MB,要切保护模式才能用全部内存)、跳到内核入口。

三、上手第一步

造 OS 的传统入门:写一个 512 字节的引导扇区程序,让裸机打印 Hello。用汇编写,放在磁盘第一扇区,以魔数 0xAA55 结尾(BIOS 据此识别它是引导扇区)。QEMU 等模拟器可测,无需真机。

参考 xv6 或 OSDev wiki 的「Hello World bootloader」教程,作为第一步。

本节要点回顾

  1. 引导链路:上电 → 固件(BIOS/UEFI)→ bootloader → 内核。
  2. BIOS 读 512 字节引导扇区;UEFI 读 .efi 文件,后者更现代灵活。
  3. bootloader 干:找内核、加载进内存、切 CPU 模式、跳内核入口。
  4. 第一步:写 512 字节引导扇区打印 Hello(QEMU 测),参考 xv6/OSDev。

推荐上手顺序

  1. 用 QEMU + 汇编写 512 字节引导扇区,打印 Hello。
  2. 理解「实模式 vs 保护模式」(下一节)。
  3. 写更大的 bootloader,加载一个简单内核。
  4. 参考 xv6 的引导流程。

下一节讲中断与保护模式——隔离的基石。

作者与出处
原作者:灏天文库
来源:codecrafters-io
许可证:CC0-1.0
整理人: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: 灏天文库 转发
评论区 (0)
U