本节摘要:计算机一上电,CPU 怎么开始跑?本节讲引导(boot)链路:BIOS/UEFI 固件 → 读引导扇区(bootloader)→ bootloader 把内核加载进内存 → 内核开始执行。这是造 OS 的第一关——让你的代码能在裸机上跑起来。理解引导,你就理解了「计算机怎么从无到有启动」。
内容来源:基于 OS 引导流程整理的导读。
造 OS,你的第一个问题是「我的代码怎么在裸机上跑起来?」CPU 一上电,从一个固定地址(如 x86 的 0xFFFF0)开始执行——那里是主板的固件(BIOS/UEFI),不是你的代码。你要通过引导链路,一步步把执行权交给你的内核。这是造 OS 的「第一关」,跨过去你的代码才能在裸机上跑。
1. 上电: CPU 从固定地址开始执行固件 2. 固件(BIOS/UEFI): - 硬件自检(POST)、初始化 - 按设置从某设备(硬盘/网络/U 盘)读"引导程序" 3. bootloader(引导程序, 如 GRUB): - 理解文件系统, 找到内核映像 - 把内核加载进内存 - (可选)切换 CPU 模式(实模式→保护模式/长模式) - 跳到内核入口地址 4. 内核: 开始执行, 初始化各子系统
.efi 可执行文件。更灵活、支持更大磁盘(GPT)、更快。bootloader 处于「固件已跑完、内核还没开始」的中间地带。它干的事:理解文件系统找到内核、加载内核进内存、可能切换 CPU 模式(实模式只能寻址 1MB,要切保护模式才能用全部内存)、跳到内核入口。
造 OS 的传统入门:写一个 512 字节的引导扇区程序,让裸机打印 Hello。用汇编写,放在磁盘第一扇区,以魔数 0xAA55 结尾(BIOS 据此识别它是引导扇区)。QEMU 等模拟器可测,无需真机。
参考 xv6 或 OSDev wiki 的「Hello World bootloader」教程,作为第一步。
下一节讲中断与保护模式——隔离的基石。