UEFI vs Legacy BIOS:一张图看懂区别

🔥 UEFI/BSP 开发系列第 004 篇 | 难度:⭐ 入门

作者:BSP 开发工程师

系列目标:300 篇由浅入深,构建完整的 UEFI 固件知识体系


写在前面

前三篇我们知道了 UEFI 是什么、传统 BIOS 为什么被淘汰、以及从按下电源键到操作系统启动的完整流程。

但很多人心里还是有个模糊的感觉:

“UEFI 和传统 BIOS 到底哪里不一样?能不能一次性说清楚?”

今天这篇文章就一张图 + 一张表,把两者所有核心差异一网打尽。


一、终极对比图

===== Legacy BIOS =====                    ===== UEFI =====

+------------------+                       +------------------+
|    开机自检       |                       |  SEC (安全初始化)  |
|    POST          |                       +--------+---------+
+--------+---------+                                |
         |                                 +--------+---------+
+--------+---------+                       |  PEI (内存初始化)  |
|  16位实模式       |                       +--------+---------+
|  寻址空间 1MB     |                                |
+--------+---------+                       +--------+---------+
         |                                 |  DXE (驱动加载)    |
+--------+---------+                       |  64位 / 可寻址全部  |
|  INT 13h 读硬盘   |                       +--------+---------+
|  INT 10h 显示     |                                |
|  (软件中断调用)    |                       +--------+---------+
+--------+---------+                       |  BDS (启动选择)    |
         |                                 +--------+---------+
+--------+---------+                                |
|  MBR 引导扇区     |                       +--------+---------+
|  加载 bootloader  |                       |  ESP 分区          |
+--------+---------+                       |  加载 .efi 文件    |
         |                                 +--------+---------+
         v                                          v
+------------------+                       +------------------+
|  操作系统启动     |                       |  操作系统启动      |
+------------------+                       +------------------+

左边像个"一根筋"的流水线——自检完就中断调用,读 MBR,加载系统,完事。

右边像个"四阶段火箭"——每个阶段有明确分工,层层交接,最后精准送操作系统入轨。


二、灵魂对比表

对比项 Legacy BIOS UEFI
诞生年代 1981 (IBM PC) 2005 (UEFI 2.0)
CPU 运行模式 16 位实模式 32/64 位保护模式
可寻址空间 1 MB 全部(64位下理论 16 EB)
编程语言 汇编为主 C 语言为主
启动流程 POST -> INT -> MBR SEC -> PEI -> DXE -> BDS
硬件访问方式 INT 中断调用 Protocol 接口
分区表 MBR(最大 2.1 TB,4 个主分区) GPT(最大 18 EB,128 个分区)
启动文件位置 MBR 第一个扇区(512字节) ESP 分区的 .efi 文件
安全启动 Secure Boot(签名验证)
驱动模型 Option ROM(嵌在硬件里) UEFI Driver(标准化,可独立加载)
图形界面 蓝底白字文本模式 GOP 图形输出,支持鼠标操作
网络支持 基本没有(PXE 靠 Option ROM) 原生 TCP/IP 协议栈
可扩展性 极差(添加功能要改中断向量表) 模块化(加个 .efi 驱动就行)
多操作系统 需要第三方 bootloader 原生支持多启动项
开发门槛 要精通 x86 汇编 会写 C 就能入门
代码规模 几十 KB 几十 MB
启动速度 通常更慢(串行初始化) 可以更快(并行初始化)
固件更新 高风险(刷坏=板砖) Capsule Update(安全回滚)
规范组织 无(IBM 一家说了算) UEFI Forum(多家厂商联合制定)

看完这张表你会发现:Legacy BIOS 就像功能机,UEFI 就像智能手机。功能机能打电话就行,智能手机有操作系统、有 App Store、有生态。


三、几个容易混淆的点

1. UEFI 不是 BIOS 的"升级版"

很多人以为 UEFI 是在传统 BIOS 基础上改出来的。不是

UEFI 是 Intel 在 1998 年从零设计的全新架构(最初叫 EFI),和传统 BIOS 没有代码级的继承关系。它不是"BIOS 2.0",而是"替代 BIOS 的全新方案"。

就像 Android 不是 Symbian 的升级版,而是完全不同的操作系统。

2. "BIOS 设置界面"不代表用的是传统 BIOS

你按 F2/Del 进入的那个设置界面,现在 99% 都是 UEFI 固件提供的。只是大家习惯叫它"进 BIOS"。

真正的传统 BIOS 设置界面长这样:

+-----------------------------------------------+
|            Phoenix BIOS Setup Utility          |
|  Main  Advanced  Security  Boot  Exit          |
|-----------------------------------------------|
|                                               |
|  System Time    [14:30:25]                    |
|  System Date    [01/15/2008]                  |
|  IDE Channel 0  [WDC WD800JD-75MSA3]         |
|  IDE Channel 1  [None]                        |
|  System Memory  [512 MB]                      |
|                                               |
|  F1 Help  ESC Exit  Arrow Select  F10 Save    |
+-----------------------------------------------+

现在的 UEFI 设置界面可以有图形化 UI、鼠标操作、甚至 RGB 灯效设置。但大家还是习惯叫它"BIOS 设置"——就像我们现在还管微信语音叫"打电话"一样。

3. CSM 是什么?

你可能在主板设置里见过 CSM(Compatibility Support Module) 这个选项。

CSM 是 UEFI 固件里的一个"兼容模块"——它在 UEFI 环境下模拟传统 BIOS 的行为,让那些只认 Legacy BIOS 的老操作系统或老硬件也能启动。

UEFI 固件
|
+-- 正常 UEFI 启动路径
|     ESP -> .efi 文件 -> 新系统
|
+-- CSM 模拟 Legacy 路径
      INT 13h -> MBR -> 老系统

Intel 从第 12 代酷睿开始已经逐步移除 CSM 支持。 所以如果你还在用 Windows 7 + MBR 分区……该升级了。

4. Secure Boot 到底验证什么?

Secure Boot 是 UEFI 独有的安全机制。简单说就是:

每个要加载的 .efi 文件都必须有合法的数字签名,没签名或签名不对的一律拒绝执行。

启动流程中的签名验证:

[UEFI 固件] --加载--> [bootmgfw.efi]
                      签名: Microsoft
                      验证: db 数据库中有 Microsoft 的公钥
                      结果: PASS, 允许执行

[UEFI 固件] --加载--> [可疑bootkit.efi]
                      签名: 无 / 伪造
                      验证: 找不到匹配的公钥
                      结果: REJECT, 拒绝执行

这就是为什么装 Linux 双系统时,有时需要关闭 Secure Boot 或者手动导入发行版的签名密钥。


四、小白补课:INT 中断调用是什么?

传统 BIOS 时代,所有硬件操作都通过**软件中断(INT)**来完成。

你可以把中断理解为"打电话":

程序: "喂,BIOS 吗?我要读硬盘第一个扇区"
BIOS: "好的,等一下"(去操作硬盘控制器)
BIOS: "读好了,数据放在这个地址了"

具体操作:
  MOV AH, 02h      ; 功能号: 读扇区
  MOV AL, 01h      ; 读 1 个扇区
  MOV CH, 00h      ; 柱面号 0
  MOV CL, 01h      ; 扇区号 1
  MOV DH, 00h      ; 磁头号 0
  MOV DL, 80h      ; 第一块硬盘
  MOV BX, 7C00h    ; 数据放到这个地址
  INT 13h          ; 打电话给 BIOS!

常见的 BIOS 中断号:

中断号 功能
INT 10h 显示服务(文字、图形)
INT 13h 磁盘服务(读写扇区)
INT 15h 系统服务(内存信息等)
INT 16h 键盘服务
INT 19h 启动加载

这套机制在 16 位实模式下工作得很好。但它有几个致命缺陷:

  1. 只能在 16 位实模式下调用——操作系统切到 32/64 位后就用不了了
  2. 没有标准化——每家 BIOS 厂商的实现可能有微妙差异
  3. 无法扩展——想添加新功能?改中断向量表?太危险了

UEFI 用 Protocol 替代了 INT:

Legacy BIOS:                UEFI:
INT 13h -> 读硬盘           BlockIo Protocol -> ReadBlocks()
INT 10h -> 显示文字          GOP Protocol -> Blt()
INT 15h -> 查内存            MemoryMap -> GetMemoryMap()

Protocol 是类型安全的 C 语言函数指针表,可以在任何 CPU 模式下调用,支持热插拔和动态发现。


五、一个现实问题:为什么还有人用 Legacy 模式?

既然 UEFI 这么好,为什么 Legacy 模式到今天还没完全消失?

  1. 老系统兼容:一些工控设备、医疗设备跑的还是 Windows XP / 嵌入式 Linux,它们只认 MBR + Legacy 启动
  2. 老硬件:2012 年之前的显卡、RAID 卡可能没有 UEFI 驱动(只有 Option ROM)
  3. 习惯:很多老运维"Legacy 一把梭"用了十几年,“能跑就不改”
  4. 特殊场景:部分虚拟化环境(旧版 QEMU)默认用 SeaBIOS(传统 BIOS 实现)

但趋势不可逆——Intel 已经在推动全面 UEFI,CSM 正在退出历史舞台。


六、从 BSP 工程师角度看两者的区别

如果你是 BSP 开发工程师,两者最大的区别在于开发体验

维度 Legacy BIOS 开发 UEFI/EDK2 开发
语言 80% 汇编 + 20% C 95% C + 5% 汇编
调试 串口打印 + 逻辑分析仪 串口 + 源码级调试器
编译 厂商私有构建系统 EDK2 标准构建(build命令)
模块 一坨代码揉在一起 每个功能是独立模块(.inf)
复用 基本不可能 跨平台复用(同一驱动适配多个芯片)
规范 口口相传 UEFI Spec + PI Spec 白纸黑字

写 Legacy BIOS 像修老城区的地下管道——图纸没有、标准混乱、牵一发动全身。写 UEFI 像搭乐高——每块积木有标准接口,拼在一起就能用。


七、总结

一句话总结:Legacy BIOS 是 1981 年的产物,16 位、1MB、汇编、中断调用、MBR、没安全机制。UEFI 是 2005 年的重新设计,64 位、全地址空间、C 语言、Protocol、GPT、Secure Boot。

记住这三个最核心的区别

  1. CPU 模式:16 位实模式 vs 64 位保护模式
  2. 硬件交互:INT 中断 vs Protocol 接口
  3. 分区方案:MBR (2.1TB) vs GPT (18EB)

其他所有差异(安全启动、驱动模型、图形界面、可扩展性……)都是从这三个核心区别衍生出来的。


下一篇预告

005. 什么是固件?它和软件、硬件的关系

固件到底算硬件还是软件?为什么固件工程师总觉得自己不被理解?


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

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

🏷️ 标签:UEFI、Legacy BIOS、对比、CSM、Secure Boot、INT、Protocol

📁 GitHub:UEFI-BSP-300

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐