1. UEFI起源与背景:从BIOS到UEFI的必然之路
1.1 传统BIOS的局限性——它真的老了
说实话,我在2005年刚入行做固件时,BIOS已经显得力不从心了。你想想看,BIOS的设计理念还停留在1980年代——16位实模式、1MB地址空间、512字节的主引导记录。这些限制在当年是合理的,但到了21世纪,简直是在给硬件工程师上枷锁。
传统BIOS有几个硬伤,我列一下:
- 16位实模式:只能访问1MB内存,启动时得切来切去,效率极低
- MBR分区表:最大支持2.2TB磁盘,现在随便一块SSD就超过这个数
- 中断向量表:硬件资源全靠硬编码,扩展性差到离谱
- 无标准驱动接口:每个OS都得自己写一套底层驱动,兼容性全靠运气
- 启动慢:轮询检测硬件,一个一个试,浪费时间
核心痛点:BIOS的16位实模式+1MB地址空间,是它最大的天花板。我在一个老项目中遇到过,为了在BIOS阶段访问4GB内存,不得不反复切保护模式,代码写得跟杂技似的——这根本不是长久之计。
1.2 Intel的安腾困境——压死骆驼的最后一根稻草
说到UEFI的起源,就绕不开Intel的安腾(Itanium)处理器。我记得2001年左右,Intel雄心勃勃地推安腾,想取代x86统治服务器市场。结果呢?BIOS成了绊脚石。
安腾是64位架构,但BIOS只支持16位。Intel发现,要在BIOS上支持安腾,得打无数补丁,改得面目全非。说白了,BIOS的架构根本撑不住64位处理器的启动需求。
Intel当时面临两个选择:
- 继续修修补补BIOS,搞出一堆兼容性问题
- 推倒重来,设计一个全新的固件接口
他们选了第二条路。这就是Intel Boot Initiative(IBI),后来改名为EFI(Extensible Firmware Interface)。
一个小插曲:我当年读EFI 1.0规范时,觉得这玩意儿太超前了——C语言编程接口、动态协议、GUID表……跟BIOS那套汇编+中断完全是两个世界。但说实话,当时没多少人看好它,都觉得Intel在瞎折腾。
1.3 UEFI论坛的成立——从Intel独舞到行业标准
EFI 1.0在2002年发布,但只有Intel自己在用。其他厂商不买账——凭什么你Intel定标准?
Intel也意识到,固件接口这种基础设施,必须由行业共同维护。于是在2005年,Intel联合微软、AMD、Phoenix、Insyde等公司,成立了UEFI论坛(Unified EFI Forum)。
UEFI论坛的成立,意味着EFI从一个Intel私有项目,变成了开放标准。我参加过几次UEFI论坛的Plugfest,那种感觉就是——大家终于坐下来,认真讨论怎么把启动这件事做好。
| 时间 | 事件 | 说明 |
|---|---|---|
| 2002年 | EFI 1.0发布 | Intel主导,仅支持安腾 |
| 2005年 | UEFI论坛成立 | Intel、微软、AMD等联合 |
| 2006年 | UEFI 2.0发布 | 首个统一规范,支持x86、x64、安腾 |
| 2010年后 | UEFI逐步取代BIOS | Windows 8强制要求UEFI安全启动 |
1.4 UEFI 2.0规范发布——真正的转折点
2006年,UEFI 2.0规范正式发布。这版规范意义重大——它不再只是Intel的玩具,而是真正面向全行业的固件标准。
UEFI 2.0带来了几个关键特性:
- 64位运行时:彻底告别16位实模式,支持64位CPU和内存寻址
- GPT分区表:支持2TB以上磁盘,理论上可达9.4ZB
- 安全启动(Secure Boot):防止恶意软件在启动阶段注入
- 网络启动:原生支持PXE,不需要额外ROM
- 驱动模型:UEFI驱动可以在固件层加载,OS不需要重复开发
注意:UEFI 2.0虽然强大,但兼容性是个大坑。我曾经在一个项目中,UEFI固件启动Windows 7时蓝屏,查了三天才发现是UEFI的某些协议实现不规范。所以,规范是规范,实现是实现——这两者之间往往有差距。
1.5 UEFI vs BIOS:一张图看懂差异
下面这张SVG图,把BIOS和UEFI的核心差异画出来了。我建议你仔细看看,尤其是地址空间和分区表这两列——这是最本质的区别。
1.6 我的个人体会
做固件这么多年,我最大的感受是:技术债迟早要还。BIOS撑了20多年,最后被安腾逼到墙角,不得不换。UEFI也不是完美的,但它至少解决了BIOS最根本的问题——架构太老。
我记得2012年做第一个UEFI项目时,光是理解Protocol和Handle就花了两周。但一旦上手,你会发现UEFI的设计比BIOS优雅太多了——C语言、模块化、动态绑定,这才是现代固件该有的样子。
给新人的建议:如果你刚开始学UEFI,别急着看代码。先把UEFI 2.0规范的前三章读透——那里定义了UEFI的核心概念:System Table、Boot Services、Runtime Services、Protocols。这些基础打牢了,后面学什么都快。