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 中断全关,跑死机了就是黑屏。
- 界面丑陋:蓝底白字,纯键盘操作。用户交互体验基本为零。
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,一刷全刷。
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 启动的四个核心阶段:SEC → PEI → DXE → BDS。每个阶段都有明确的分工。后面几章,我会带你逐个阶段深入,包括代码怎么跑、数据怎么传、驱动怎么加载。