1. UEFI 概述:从 BIOS 到 UEFI 的演进之路

大家好,我是你们这门课的老朋友。今天咱们聊聊 UEFI 的起源、它跟传统 BIOS 到底差在哪,以及为什么现在整个固件圈都在往 UEFI 迁移。

说实话,我入行那会儿,大家还在跟 Legacy BIOS 死磕。那时候调一个 USB 键盘的初始化,能折腾一整天。后来第一次接触 UEFI,给我的感觉就是——嗯,这才像个现代操作系统的启动方式。

1.1 传统 BIOS 的困境

传统 BIOS,全称 Basic Input/Output System。它从 1981 年 IBM PC 诞生就开始用了。你想想看,一个 40 多年前的设计,到现在还在跑,不出问题才怪。

我总结了几条 BIOS 的硬伤:

  • 16 位实模式:只能访问 1MB 地址空间。为了加载大内核,得搞什么 A20 Gate、实模式到保护模式切换,代码写得跟杂技似的。
  • MBR 分区表:最大支持 2.2TB 硬盘。现在随便一个固态都 4TB 了,MBR 根本不够用。
  • 中断向量表:所有硬件操作靠 INT 中断。扩展性差,加个新设备就得改 BIOS。
  • 单线程、无保护:BIOS 执行期间,CPU 中断全关,跑死机了就是黑屏。
  • 界面丑陋:蓝底白字,纯键盘操作。用户交互体验基本为零。
⚠ 避坑提醒:我曾经在一个老项目上,因为硬盘容量超过 2TB,BIOS 死活认不全。最后只能换 UEFI 方案。所以如果你还在用 MBR + BIOS,趁早规划迁移。

1.2 UEFI 的诞生与发展

UEFI 的前身是 Intel 的 EFI(Extensible Firmware Interface),最早用在 Itanium 架构上。2005 年,UEFI 论坛成立,把 EFI 标准化成了 UEFI。

我个人觉得,UEFI 最大的贡献不是技术本身,而是它定义了一个开放、可扩展的固件接口标准。什么意思呢?就是操作系统、驱动、工具都可以基于这个标准来开发,不用再跟各家 BIOS 厂商的私有接口死磕。

时间 里程碑
1998 年 Intel 启动 EFI 项目,用于 Itanium
2005 年 UEFI 论坛成立,EFI 1.10 转为 UEFI 2.0
2012 年 Windows 8 强制要求 UEFI + Secure Boot
2017 年 UEFI 2.7 发布,支持 HTTP Boot、NVDIMM
2021 年 UEFI 2.9 发布,强化安全与虚拟化支持

你看,从 2005 年到现在,UEFI 一直在迭代。我手头维护的一个项目,从 UEFI 2.3 一路升到 2.8,每次升级都能感受到生态在变好。

1.3 UEFI 与传统 BIOS 的核心对比

咱们直接上对比表,一目了然:

对比项 传统 BIOS UEFI
处理器模式 16 位实模式 32/64 位保护模式 + 长模式
寻址空间 1MB 理论无限制(64 位)
分区表 MBR(最大 2.2TB) GPT(最大 9.4ZB)
启动方式 INT 19h 引导扇区 EFI 应用程序(.efi 文件)
驱动模型 Option ROM,无标准接口 EFI Driver Model,标准接口
用户界面 文本菜单,纯键盘 图形界面,支持鼠标/触摸
网络支持 基本无 UEFI Network Stack(IPv4/IPv6)
安全启动 无 Secure Boot(签名验证)
扩展性 差,依赖厂商私有接口 好,开放标准,可加载驱动

说白了,BIOS 是 80 年代的设计,UEFI 是 21 世纪的设计。你想想看,现在谁还用 16 位的 CPU?谁还用 1MB 内存?所以 UEFI 取代 BIOS 是必然的。

1.4 UEFI 的核心优势

我挑几个最实用的优势,结合项目经验聊聊:

  • GPT 分区表:支持超大硬盘。我之前给一个存储服务器做固件,硬盘阵列 48TB,用 GPT 一点问题没有。
  • Secure Boot:防止恶意软件在启动阶段注入。Windows 8 之后强制要求,Linux 也支持了。
  • 图形界面:用户可以在 UEFI 设置里用鼠标点来点去,体验好很多。
  • 网络启动:支持 PXE、HTTP Boot、iSCSI。远程部署系统非常方便。
  • 驱动模型:UEFI 驱动可以在固件层加载,不用进 OS。比如 NVMe 驱动,UEFI 里就能认盘。
  • 模块化设计:UEFI 固件由多个模块组成,可以单独更新、替换。不像 BIOS,一刷全刷。
💡 个人经验:我建议你在做 UEFI 开发时,多利用它的模块化特性。把驱动、协议、应用分开编译,调试起来会轻松很多。

1.5 UEFI 的未来趋势

UEFI 不是终点,它也在进化。我个人关注的几个方向:

  • 安全增强:UEFI Secure Boot 会越来越严格,未来可能要求所有启动组件都签名。
  • 虚拟化支持:UEFI 正在融入更多虚拟化特性,比如 UEFI 启动虚拟机、UEFI 与 Hypervisor 的交互。
  • 云原生固件:UEFI 开始支持 HTTP Boot、RESTful API,未来固件可能像云服务一样管理。
  • Rust 语言:UEFI 社区开始尝试用 Rust 写固件模块,内存安全更有保障。
  • 统一固件接口:UEFI 正在向 ARM、RISC-V 等架构扩展,不再局限于 x86。

嗯,这里要注意:UEFI 虽然强大,但也不是银弹。它的复杂度比 BIOS 高很多,开发门槛也更高。这也是为什么我开这门课——帮你把 UEFI 的坑都踩一遍,你就不用再踩了。

1.6 UEFI 启动流程全景图

下面这张图,是我自己画的 UEFI 启动流程概览。你先把整体脉络记住,后面每一章都会展开细讲。

UEFI 启动流程全景图 UEFI 启动流程全景图 SEC 安全验证阶段 PEI 早期初始化 DXE 驱动执行环境 BDS 启动 SEC 阶段 • 上电复位入口 • 验证 Boot Guard • 设置临时栈 • 跳转到 PEI PEI 阶段 • CPU/芯片组初始化 • 内存初始化 • 传递 HOB 列表 • 发现 FV 固件卷 DXE 阶段 • 加载 DXE 驱动 • 枚举 PCI 设备 • 安装协议 • 准备启动设备 BDS 选择 启动 设备 加载 OS TSL / OS 启动

这张图展示了 UEFI 启动的四个核心阶段:SEC → PEI → DXE → BDS。每个阶段都有明确的分工。后面几章,我会带你逐个阶段深入,包括代码怎么跑、数据怎么传、驱动怎么加载。

📌 核心要点:UEFI 不是 BIOS 的简单升级,而是一次彻底的架构重构。它用模块化、标准化、安全化的设计,解决了 BIOS 40 多年积累的顽疾。作为固件工程师,掌握 UEFI 已经是必备技能。