UEFI与EDK2最通俗的理解
🔥 UEFI/BSP 开发系列第 001 篇
难度:⭐ 入门
作者:BSP 开发工程师
系列目标:300 篇由浅入深,构建完整的 UEFI 固件知识体系
写在前面
你有没有想过一个问题——
你按下电脑的电源键,到看见 Windows 桌面,这中间发生了什么?
大部分人的回答是:"开机呗。"
没错,但"开机"这两个字背后,藏着一整个你从来没见过的软件世界。这个世界不属于 Windows,不属于 Linux,甚至不属于任何操作系统。
它叫 固件(Firmware)。
而今天这篇文章要聊的 UEFI 和 EDK2,就是这个隐藏世界的"操作系统"和"开发框架"。
一、先搞清楚:固件是个啥?
如果把电脑比作一栋大楼——
- 硬件(CPU、内存、硬盘)= 钢筋水泥,是建筑的物理结构
- 操作系统(Windows/Linux)= 物业管理公司,负责日常运营
- 固件(BIOS/UEFI)= 装修队 + 验房师
在物业公司入驻之前,必须有人先把水电通了、检查一下墙壁有没有裂缝、确认电梯能不能用。这就是固件干的活。
💡 一句话理解固件:操作系统启动之前运行的那段程序,就是固件。
固件住在主板上一块叫 SPI Flash 的小芯片里(通常只有 16~32MB),断电也不会丢失。你每次开机,CPU 醒来第一件事,就是去读这块芯片里的固件代码。
二、BIOS:上古时代的装修队
在 UEFI 出现之前,负责"装修"的是一位叫 BIOS 的老师傅(Basic Input/Output System)。
BIOS 从 1981 年 IBM PC 开始干活,一干就是 30 多年。它的工作流程大概是这样的:
CPU 上电 → 跑 BIOS → 检测硬件 → 找到硬盘 → 跳到 MBR → 启动 OS
BIOS 老师傅有几个致命的问题:
| 问题 | 具体表现 |
|---|---|
| 只能用 16 位实模式 | 就像让一个成年人穿幼儿园的鞋,CPU 明明是 64 位的,BIOS 只用 16 位 |
| 只能访问 1MB 内存 | 你电脑有 32GB 内存,BIOS 只能看到前 1MB |
| 硬盘限制 2.1TB | 因为 MBR 分区表只有 32 位寻址,超过 2.1TB 就认不出来 |
| 没有标准驱动模型 | 每换一个硬件就得重写一堆代码 |
| 安全性约等于零 | 谁都可以篡改启动流程 |
用现在的话说,BIOS 就是**"屎山代码的祖宗"**。
30 年的历史包袱,各种补丁套补丁,连 Intel 自己都受不了了。
三、UEFI:新时代的项目经理
2005 年,Intel 联合一帮大佬(AMD、微软、苹果、联想、Dell...)成立了一个叫 UEFI Forum 的组织,发布了 UEFI 规范。
UEFI 的全称是 Unified Extensible Firmware Interface(统一可扩展固件接口)。
注意这个名字——它不是一个软件,不是一个产品,而是一份 规范(Specification)。
就像 HTTP 是一份协议,规定了浏览器和服务器怎么对话。 UEFI 是一份规范,规定了固件和操作系统之间怎么对话。
BIOS vs UEFI,差距在哪?
| 维度 | BIOS(传统) | UEFI(现代) |
|---|---|---|
| CPU 模式 | 16 位实模式 | 32/64 位保护模式 |
| 可用内存 | 1MB | 全部内存 |
| 硬盘支持 | MBR,≤2.1TB | GPT,≤18EB(没打错,EB) |
| 启动速度 | 慢 | 快(支持并行初始化) |
| 驱动模型 | 无 | 有标准驱动模型 |
| 安全启动 | 无 | Secure Boot |
| 界面 | 蓝底白字/灰底黑字 | 可以有鼠标、图形界面 |
| 可扩展性 | 极差 | 模块化设计,灵活扩展 |
如果 BIOS 是"装修队的包工头凭经验干活",那 UEFI 就是"有国际标准、有施工规范、有验收流程的正规装修公司"。
四、EDK2:UEFI 的官方装修工具箱
有了 UEFI 规范,谁来写实际的代码呢?
答案是 EDK2(EFI Development Kit 2)。
EDK2 是由 TianoCore 社区维护的开源项目,托管在 GitHub 上:github.com/tianocore/e…
打个比方——
- UEFI 规范 = 建筑设计图纸(告诉你房子应该长什么样)
- EDK2 = 官方推荐的施工工具箱 + 参考样板间
EDK2 提供了:
- 基础框架代码 — 启动流程的骨架(SEC/PEI/DXE/BDS 各阶段)
- 标准库 — 字符串操作、内存管理、设备IO 等
- 参考驱动 — PCI、USB、NVMe、网络等通用驱动
- 构建工具 — 把源码编译成固件镜像的一整套工具链
- UEFI Shell — 一个运行在固件环境里的"命令行"
真正的商用 BIOS 不会只用 EDK2 的代码。芯片原厂(Intel、AMD)会在 EDK2 基础上加自己的硅平台代码,BIOS 厂商(Insyde、AMI、Phoenix)会再加一层商用框架,OEM(Dell、联想、HP)再加一层定制。
最终你电脑里的 BIOS 大概长这样:
┌──────────────────────┐
│ OEM 定制(Dell/联想) │ ← 品牌特色功能
├──────────────────────┤
│ BIOS 厂商框架(Insyde) │ ← 商用增值功能
├──────────────────────┤
│ 芯片原厂代码(Intel) │ ← 硬件初始化秘方
├──────────────────────┤
│ EDK2 开源框架 │ ← 行业标准基础
└──────────────────────┘
五、为什么你该了解 UEFI?
如果你是程序员
UEFI 是距离硬件最近的软件层。理解它,你对整个计算机系统的认知会提升一个维度。
- 面试官问"操作系统是怎么被加载的",你能从 CPU Reset Vector 讲起
- 调试蓝屏/启动问题时,你知道问题可能出在固件层
- 写驱动、做虚拟化、搞安全的同学,UEFI 是绕不过的知识
如果你想进芯片原厂
Intel、AMD、高通、联发科……每一家芯片公司都需要 BSP(Board Support Package)工程师。这个岗位的核心工作就是:让芯片上电后能正确初始化,并启动操作系统。
薪资水平嘛……懂的都懂 💰
如果你只是好奇
知道了 UEFI,你就能理解:
- 为什么安装 Windows 要选"GPT + UEFI"而不是"MBR + Legacy"
- 为什么装双系统时启动项会冲突
- 为什么某些主板设置里有"Secure Boot"选项
- 为什么固件更新(BIOS Update)有时候能救活一台电脑
六、总结:一张图看懂
你按下电源键
│
▼
CPU 从 SPI Flash 读取固件
│
▼
┌─────────────────────────────────────┐
│ UEFI 固件(基于 EDK2) │
│ │
│ SEC → PEI → DXE → BDS │
│ 安全初始化 → 内存初始化 → 驱动加载 → 找OS │
│ │
│ Secure Boot 验证 → 确认OS没被篡改 │
└─────────────────────────────────────┘
│
▼
启动操作系统(Windows / Linux / macOS)
│
▼
你看到桌面,开始摸鱼 🐟
下一篇预告
002. 为什么传统BIOS被淘汰了?UEFI的前世今生
我们来聊聊 BIOS 到 UEFI 的演变历史,以及那些年 Intel 踩过的坑。
📌 本系列共 300 篇,从入门到芯片原厂 BSP 能耗优化 👨💻 作者:在职 BSP 开发工程师,持续更新中 🏷️ 标签:UEFI、EDK2、固件开发、BIOS、BSP、芯片原厂