为什么传统BIOS被淘汰了?UEFI的前世今生
🔥 UEFI/BSP 开发系列第 002 篇 | 难度:⭐ 入门
作者:BSP 开发工程师
系列目标:300 篇由浅入深,构建完整的 UEFI 固件知识体系
写在前面
上一篇我们聊了 UEFI 和 EDK2 是什么。这一篇,我们来聊聊为什么——
为什么用了 30 年的 BIOS,说不用就不用了?
这个问题的答案,藏在一段跌宕起伏的技术演化史里。涉及 Intel 的一次"被迫创新"、一台服务器的内存上限、以及一个差点胎死腹中的开源项目。
一、BIOS 的黄金年代:1981-2000
1981 年,IBM 推出第一台 PC(IBM 5150)。这台电脑用的 CPU 是 Intel 8088,主频 4.77MHz,内存 16KB 起步。
在那个年代,BIOS 的设计完全够用:
- CPU 工作在 16 位实模式,最大寻址 1MB — 那时候谁能用到 1MB?
- 硬盘最大用 MBR 分区表,支持到 2.1TB — 那时候硬盘才 10MB
- 启动流程简单粗暴:上电 → 检测硬件 → 加载 MBR → 跳转执行
这就像一个小区只有 10 户人家的时候,保安大叔拿个本子手动登记就够了。
BIOS 干了 20 年,相安无事。直到 2000 年前后,事情开始变了。
二、Intel 的一次"被迫创新"
故事要从 Intel 的一款处理器说起——Itanium(安腾)。
安腾是啥?
1990 年代末,Intel 和 HP 联合设计了一款面向服务器市场的 64 位处理器,代号 Itanium。它用的不是 x86 架构,而是全新的 IA-64 架构。
Intel 当时的野心很大:用 IA-64 取代 x86,统一服务器和桌面市场。
但问题来了——
BIOS 跑不动 Itanium
传统 BIOS 是为 x86 实模式设计的。IA-64 架构根本不支持 16 位实模式!
这就好比你设计了一辆新能源汽车,结果发现加油站只能加汽油。
Intel 面临两个选择:
- 在 IA-64 上硬塞一个 x86 兼容模式(然后再跑传统 BIOS)
- 重新设计一套固件接口
Intel 选了方案 2。于是,EFI(Extensible Firmware Interface) 诞生了。
所以 UEFI 的前身 EFI,最初不是为了"改善用户体验",而是因为 Intel 的新 CPU 根本没法跑传统 BIOS。
三、EFI 1.0:Intel 的独角戏(2000-2005)
2000 年,Intel 发布了 EFI 1.0 规范。
EFI 1.0 的设计理念非常超前:
- 运行在 保护模式(32/64 位),不再受 1MB 内存限制
- 支持 GPT 分区表,硬盘容量上限从 2.1TB 飙升到 18EB
- 有标准的 驱动模型,硬件厂商可以写跨平台驱动
- 支持 C 语言开发(BIOS 主要用汇编)
小白补课:什么是保护模式?
想象 CPU 是一个快递员,内存是一排排快递柜。
实模式:快递员只背了一本小本本,上面只能写 20 位的柜号(,刚好 1MB)。不管快递柜有多少个,他只能送到前 1MB 的柜子。而且他没有门禁卡——任何程序都可以随便翻任何柜子,包括别人的。
保护模式:快递员换了一台扫码枪,柜号可以写 32 位甚至 64 位( = 4GB, = 16EB)。而且每个柜子都有门禁——操作系统给每个程序分配了各自的柜子范围,A 程序不能翻 B 程序的柜子,翻了直接报警(段错误 / 蓝屏)。
为什么 CPU 上电后是实模式?因为 x86 CPU 要向后兼容 1978 年的 8086 处理器。8086 就是 16 位的,只有实模式。每次 CPU 上电,它都先"装作"自己是 1978 年的老古董,然后由固件代码把它切换到保护模式。
传统 BIOS 一辈子都待在实模式——它在实模式下完成所有硬件初始化,然后直接跳到 MBR 引导代码,由操作系统的 bootloader 切换到保护模式。
UEFI 则在很早的阶段(PEI 后期)就切换到了保护模式/长模式(64 位),之后所有初始化都在保护模式下进行——能访问全部内存,能跑 C 语言编译的 64 位代码。
小白补课:GPT 和 EFI 分区是什么?
先澄清一个容易混淆的点:GPT 是分区表格式,和 CPU 模式无关。理论上实模式也能读 GPT,只是传统 BIOS 的代码从来没实现过 GPT 支持——它只认 MBR。
MBR(Master Boot Record) 是一种分区表格式,藏在硬盘的第一个扇区(512 字节)里。其中用 4 个 16 字节的条目描述分区,每个条目用 32 位记录起始位置和大小:
硬盘第一个扇区 (512 bytes):
+-------------------+
| 引导代码 (446 B) | <-- 传统BIOS跳到这里执行
+-------------------+
| 分区表 (4x16 B) | <-- 最多4个主分区, 每个用32位LBA
+-------------------+
| 魔数 0x55AA (2 B) |
+-------------------+
GPT(GUID Partition Table) 是 UEFI 规范定义的新格式,用 64 位 LBA 寻址,最多 128 个分区,头尾各有一份备份。
| 维度 | MBR | GPT |
|---|---|---|
| 寻址位数 | 32 位 LBA | 64 位 LBA |
| 最大硬盘 | 2.1TB | 18EB |
| 最多分区 | 4 个主分区 | 128 个分区 |
| 冗余备份 | 无 | 有(头尾各一份) |
| 分区标识 | 类型字节 | GUID |
EFI 系统分区(ESP) 是 GPT 硬盘上一个特殊的小分区(通常 100-500MB),格式是 FAT32。它存放的是操作系统的 .efi 启动文件。
UEFI 固件开机后做的事:
- 初始化硬件
- 读 GPT 分区表,找到 ESP 分区
- 在 ESP 里找
.efi引导文件(比如 Windows 的\EFI\Microsoft\Boot\bootmgfw.efi) - 加载执行,交接给操作系统
所以 ESP 就像一个公告栏——UEFI 固件开机后去公告栏找"谁要启动",然后加载对应的 .efi 文件。Windows、Linux、macOS 各自在公告栏上贴了自己的启动入口。
听起来很美好,但现实很骨感。
EFI 的尴尬处境
| 问题 | 原因 |
|---|---|
| 没人用 | Itanium 处理器市场惨淡,x86 服务器照样卖得好 |
| 只有 Intel 一家 | AMD、微软、OEM 厂商没参与,生态起不来 |
| 太超前 | 2000 年的硬盘才几十 GB,谁需要 18EB 的支持? |
| 和 x86 割裂 | EFI 给 IA-64 设计,x86 用户无感 |
Itanium 后来被 AMD 的 x86-64(AMD64)按在地上摩擦。Intel 不得不也推出 x86-64(EM64T)来应对。
IA-64 逐渐边缘化,但 EFI 活了下来——因为 Intel 发现,EFI 的设计理念确实比传统 BIOS 好太多了。
四、UEFI Forum 成立:从独角戏到群演(2005)
Intel 意识到,EFI 要想推广,不能自己一个人玩。
2005 年,Intel 联合 AMD、微软、苹果、Dell、HP、联想等巨头,成立了 UEFI Forum(统一可扩展固件接口论坛)。
EFI 也正式改名为 UEFI——多了个 "U"(Unified,统一的),表示这不再是 Intel 一家的私有规范。
UEFI Forum 的成立是个转折点。几个关键事件:
| 时间 | 事件 | 意义 |
|---|---|---|
| 2006 | 苹果 Mac 开始采用 EFI | 第一个大规模使用 EFI 的消费级产品 |
| 2007 | UEFI 2.1 发布 | 加入网络启动、HII 等实用功能 |
| 2011 | Windows 8 要求 UEFI + Secure Boot | 微软的推动力最大 |
| 2012 | UEFI 2.3.1 成为标准 | 大部分新主板开始默认 UEFI |
| 2020 | Intel 宣布 2020 年后不再支持 Legacy BIOS | 给传统 BIOS 判了死刑 |
苹果的助攻
2006 年苹果从 PowerPC 转向 Intel,同时把固件从 Open Firmware 换成了 EFI。这让 EFI 第一次出现在了消费者面前。
虽然用户感知不强(Mac 开机还是那个苹果 Logo),但这给了行业一个信号:EFI 是可以在真实产品上跑的。
微软的致命一击
真正让传统 BIOS 退出历史舞台的,是微软。
2011 年,微软宣布 Windows 8 认证要求:
- 新电脑必须支持 UEFI
- 必须开启 Secure Boot
OEM 厂商要想预装 Windows,就必须用 UEFI。这一刀下去,传统 BIOS 在消费级市场基本宣告死亡。
五、传统 BIOS 到底败在哪?
不是败在某一个点,而是全面落后。
1. 硬盘容量之墙
2010 年前后,机械硬盘开始突破 2TB。传统 BIOS 使用的 MBR 分区表只有 32 位 LBA 寻址:
超过 2.19TB 的部分,BIOS 根本看不见。而 UEFI 使用 GPT 分区表,有 64 位 LBA:
9.44 ZB = 9,440,000,000 TB。人类目前产生的所有数据加起来都没这么多。
2. 安全性之痛
传统 BIOS 没有任何签名验证机制。任何恶意软件只要修改了 MBR 的前 446 字节,就能在操作系统启动前插入恶意代码——这就是所谓的 Bootkit(引导区病毒)。
著名案例:
- TDL4(2010)—— 感染了 450 万台电脑
- FinSpy bootkit —— 商用间谍软件
UEFI 的 Secure Boot 通过密码学签名验证,从根本上解决了这个问题。
3. 启动速度之差
传统 BIOS 的启动流程是纯串行的:POST 自检 → 逐个检测硬件 → 加载 MBR → 跳转。
UEFI 支持并行初始化——多个硬件可以同时初始化。现代笔记本从按电源键到进入系统只需 3-8 秒,传统 BIOS 时代通常需要 15-30 秒。
4. 可维护性之殇
传统 BIOS 的代码大量用汇编语言编写,30 年的补丁叠补丁,代码质量已经惨不忍睹。
UEFI/EDK2 全部用 C 语言,有标准的模块化架构,有单元测试框架,支持现代化的开发流程。
六、UEFI 版本演进时间线
1998 Intel 开始 EFI 项目 (为 Itanium)
|
2000 EFI 1.02 发布
|
2002 EFI 1.10 发布 (加入驱动模型)
|
2005 UEFI Forum 成立, EFI -> UEFI
|
2006 UEFI 2.0 发布 / 苹果Mac采用EFI
|
2007 UEFI 2.1 (网络栈、HII)
|
2008 TianoCore EDK2 开源
|
2011 UEFI 2.3.1 / Win8要求UEFI+SecureBoot
|
2013 UEFI 2.4 (HTTP Boot)
|
2015 UEFI 2.5
|
2017 UEFI 2.7 (IORT, SDEI)
|
2019 UEFI 2.8
|
2020 Intel宣布终止Legacy BIOS支持
|
2021 UEFI 2.9
|
2023 UEFI 2.10 (最新)
七、一个反直觉的事实
很多人以为"UEFI 比 BIOS 新,所以更好"。
但其实 UEFI 的核心设计理念在 1998 年 就定型了——比很多人想象的早得多。它不是某一天突然冒出来的新技术,而是用了 20 多年 才逐步取代传统 BIOS。
技术好不好是一回事,生态能不能推起来是另一回事。EFI/UEFI 的故事告诉我们:
技术的成功 = 30% 技术本身 + 70% 生态推动力
没有微软"Windows 8 必须 UEFI"这一刀,传统 BIOS 可能还要再苟活十年。
八、总结
| 里程碑 | 推动者 | 意义 |
|---|---|---|
| Itanium 无法运行 BIOS | Intel | 被迫创造 EFI |
| EFI 1.0 发布 | Intel | UEFI 的雏形 |
| UEFI Forum 成立 | 行业联盟 | 从独家到标准 |
| Mac 采用 EFI | Apple | 消费级首次落地 |
| Win8 要求 UEFI | Microsoft | 传统 BIOS 判死刑 |
| Intel 终止 Legacy 支持 | Intel | 彻底关门 |
传统 BIOS 不是慢慢变老的,是被一系列"不得不"推着淘汰的。
下一篇预告
003. 开机按下电源键后到底发生了什么?
我们来一秒一秒拆解:从你按下电源按钮,到屏幕亮起的那个瞬间,CPU 到底经历了什么。
📌 本系列共 300 篇,从入门到芯片原厂 BSP 能耗优化
👨💻 作者:在职 BSP 开发工程师,持续更新中
🏷️ 标签:UEFI、BIOS、EFI、固件历史、Itanium、Secure Boot
📁 GitHub:UEFI-BSP-300