UEFI与EDK2最通俗的理解

5 阅读6分钟

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.1TBGPT,≤18EB(没打错,EB)
启动速度快(支持并行初始化)
驱动模型有标准驱动模型
安全启动Secure Boot
界面蓝底白字/灰底黑字可以有鼠标、图形界面
可扩展性极差模块化设计,灵活扩展

如果 BIOS 是"装修队的包工头凭经验干活",那 UEFI 就是"有国际标准、有施工规范、有验收流程的正规装修公司"。


四、EDK2:UEFI 的官方装修工具箱

有了 UEFI 规范,谁来写实际的代码呢?

答案是 EDK2(EFI Development Kit 2)。

EDK2 是由 TianoCore 社区维护的开源项目,托管在 GitHub 上:github.com/tianocore/e…

打个比方——

  • UEFI 规范 = 建筑设计图纸(告诉你房子应该长什么样)
  • EDK2 = 官方推荐的施工工具箱 + 参考样板间

EDK2 提供了:

  1. 基础框架代码 — 启动流程的骨架(SEC/PEI/DXE/BDS 各阶段)
  2. 标准库 — 字符串操作、内存管理、设备IO 等
  3. 参考驱动 — PCI、USB、NVMe、网络等通用驱动
  4. 构建工具 — 把源码编译成固件镜像的一整套工具链
  5. 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、芯片原厂