为什么传统BIOS被淘汰了?UEFI的前世今生

1 阅读5分钟

为什么传统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 面临两个选择:

  1. 在 IA-64 上硬塞一个 x86 兼容模式(然后再跑传统 BIOS)
  2. 重新设计一套固件接口

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 位的柜号(220=1,048,5762^{20} = 1,048,576,刚好 1MB)。不管快递柜有多少个,他只能送到前 1MB 的柜子。而且他没有门禁卡——任何程序都可以随便翻任何柜子,包括别人的。

保护模式:快递员换了一台扫码枪,柜号可以写 32 位甚至 64 位(2322^{32} = 4GB,2642^{64} = 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 个分区,头尾各有一份备份。

维度MBRGPT
寻址位数32 位 LBA64 位 LBA
最大硬盘2.1TB18EB
最多分区4 个主分区128 个分区
冗余备份有(头尾各一份)
分区标识类型字节GUID

EFI 系统分区(ESP) 是 GPT 硬盘上一个特殊的小分区(通常 100-500MB),格式是 FAT32。它存放的是操作系统的 .efi 启动文件。

UEFI 固件开机后做的事:

  1. 初始化硬件
  2. 读 GPT 分区表,找到 ESP 分区
  3. 在 ESP 里找 .efi 引导文件(比如 Windows 的 \EFI\Microsoft\Boot\bootmgfw.efi
  4. 加载执行,交接给操作系统

所以 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 的消费级产品
2007UEFI 2.1 发布加入网络启动、HII 等实用功能
2011Windows 8 要求 UEFI + Secure Boot微软的推动力最大
2012UEFI 2.3.1 成为标准大部分新主板开始默认 UEFI
2020Intel 宣布 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 寻址:

232×512 bytes=2.19 TB2^{32} \times 512\text{ bytes} = 2.19\text{ TB}

超过 2.19TB 的部分,BIOS 根本看不见。而 UEFI 使用 GPT 分区表,有 64 位 LBA:

264×512 bytes=9.44 ZB2^{64} \times 512\text{ bytes} = 9.44\text{ ZB}

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 无法运行 BIOSIntel被迫创造 EFI
EFI 1.0 发布IntelUEFI 的雏形
UEFI Forum 成立行业联盟从独家到标准
Mac 采用 EFIApple消费级首次落地
Win8 要求 UEFIMicrosoft传统 BIOS 判死刑
Intel 终止 Legacy 支持Intel彻底关门

传统 BIOS 不是慢慢变老的,是被一系列"不得不"推着淘汰的。


下一篇预告

003. 开机按下电源键后到底发生了什么?

我们来一秒一秒拆解:从你按下电源按钮,到屏幕亮起的那个瞬间,CPU 到底经历了什么。


📌 本系列共 300 篇,从入门到芯片原厂 BSP 能耗优化

👨‍💻 作者:在职 BSP 开发工程师,持续更新中

🏷️ 标签:UEFI、BIOS、EFI、固件历史、Itanium、Secure Boot

📁 GitHub:UEFI-BSP-300