Featured image of post BIOS 与 UEFI:从历史到现代的引导之路

BIOS 与 UEFI:从历史到现代的引导之路

本文档详细说明BIOS与UEFI从历史到现代的引导之路,包括BIOS的黄金时代、UEFI的登场、对比小结、现实世界的选择与迁移、常见启动问题与排查技巧、高级自定义与扩展。

在计算机发展的历史长河中,启动固件扮演着至关重要的角色。从早期的 BIOS 到如今功能强大的 UEFI,它不断进化以满足硬件日益增长的性能、安全与管理需求。

缘起:BIOS 的黄金时代

1980 年代,IBM PC 推出 BIOS(Basic Input/Output System),它被刻录在主板 ROM 中,承担了计算机启动的三大要务:

  1. 自检(POST):检测 CPU、内存、显卡、键盘等硬件是否可用。
  2. MBR 加载与硬件中断接口:从硬盘第一个扇区(Master Boot Record,512 字节)读取初级 Bootloader,并通过 INT 13h/INT 10h 等中断调用提供统一硬件访问能力。

尽管 BIOS 架构简单、兼容性高,却在以下方面遇到瓶颈:

  • 磁盘容量限制:MBR 最多支持 2 TB,且最多 4 个主分区。
  • 固件更新困难:驱动代码写死在 ROM,无法灵活扩展或修补。
  • 图形与网络能力匮乏:仅提供最基础的文本界面与简单的 PXE 网络微码加载。

颠覆:UEFI 的登场

进入 21 世纪,Intel 发起了 UEFI(Unified Extensible Firmware Interface)联盟,旨在打造更灵活、可扩展、安全的启动环境。

  • GPT 分区支持:突破 TB 级存储限制,可管理数百个分区。
  • 模块化驱动:通过可加载的 .efi 驱动扩展硬件支持,无需刷 ROM。
  • 现代图形界面:支持 GUI、鼠标、多语言,用户交互更友好。
  • 安全与远程管理
    • 验证各阶段引导程序与操作系统签名,防止篡改与 Rootkit(Secure Boot)。
    • 内置 HTTP/FTP 客户端与 UEFI Shell,可远端更新或执行脚本。

UEFI 启动流程简述

  1. 固件并行初始化:多线程加载硬件驱动与固件组件。
  2. 扫描 ESP:读取 EFI 系统分区(FAT32 格式),查找 �EFI\ 路径下的 .efi 文件。
  3. 运行 Boot Manager:根据 NVRAM 存储的引导选项顺序执行 EFI 应用。
  4. 加载内核:EFI 应用(如 bootx64.efi)引导操作系统内核,并将控制权交给它。

对比小结

特性 BIOS + MBR UEFI + GPT
磁盘支持 ≤ 2 TB;最多 4 分区 理论上 ≥ 9.4 ZB;最多 128 分区
驱动与扩展 ROM 固化,不易更新 动态加载 .efi 模块,易升级
启动界面 文本或极简图形 丰富 GUI、鼠标、多语言支持
安全启动 不支持 支持签名验证,防篡改
网络功能 仅 PXE 简单引导 支持 HTTP/FTP,远程管理

现实世界的选择与迁移

  • 老旧设备 & 嵌入式系统:BIOS+MBR 因体积小、兼容性强依旧有效。
  • 现代 PC & 服务器:UEFI+GPT 标配,提升启动速度、安全性与大盘支持。
  • 双系统/多重引导:推荐统一 UEFI 模式,Windows 用 BCD,Linux 用 shim+GRUB EFI,以减少启动冲突。

迁移要点

  • BIOS → UEFI:备份数据,使用 Windows mbr2gpt 或 Linux gdisk 转换 GPT,创建 ≥100 MB 的 ESP,切换固件模式并重建引导。
  • UEFI → BIOS:将 GPT 转为 MBR(注意丢失 GPT 信息),重新写入传统 MBR 引导代码,调整固件为 Legacy 模式。

常见启动问题与排查技巧

  1. 无法识别 ESP
    • 检查分区类型:ESP 必须设置为 EF00(GPT)或 FAT32(MBR)。
    • 验证文件:确认 �EFI\BOOT\BOOTX64.EFI(或对应平台)存在。
  2. Secure Boot 报错
    • 关闭或配置:进入固件设置,临时禁用 Secure Boot,或导入正确的公钥(PK/KEK)。
  3. 引导选项丢失
    • 使用 efibootmgr(Linux)或 bcdedit(Windows)重新创建引导条目。
  4. 硬盘切换模式后无法启动
    • 检查控制器模式:IDE/RAID/AHCI 切换后需同步更新内核模块和驱动签名。

高级自定义与扩展

  • UEFI Shell 自动化:编写 .nsh 脚本,自动挂载分区、执行自检或远程下载固件更新。
  • 驱动注入:将厂商 .efi 驱动放入 ESP,可扩展对 NVMe、RAID 控制器等的原生支持。
  • 变量管理:利用 dmpstore(Shell)或 efivar 工具读写固件变量,实现自动化启动或日志收集。
  • 开放固件替代品:如 TianoCore(OVMF)、Coreboot,可根据需要定制体积与功能。
面朝大海,春暖花开。
使用 Hugo 构建
主题 StackJimmy 设计