欢迎光临
我们一直在努力

从 512 字节到 32MB:固件五十年演进史,一篇讲透 BIOS 与 UEFI 的恩怨

按下电源键到操作系统内核运行之间,有一段没有操作系统的"真空期"。接管这段真空期的程序,叫固件(Firmware)。

固件不是一成不变的:它从焊死在 ROM 里的一小块自检代码,演进为今天可以联网更新、运行签名应用、掌管安全信任链的 UEFI。理解这段演进史不是怀旧,而是为了回答三个开发与运维现场高频出现的问题:

  • 为什么 2020 年后的新主板不再支持传统 BIOS?
  • 为什么 GPT 磁盘在老电脑上无法引导?
  • 为什么有些机器关了 Secure Boot 反而装不上系统?
  • 这篇文章把固件 50 年的演进拆成三条主线:存储介质怎么变、BIOS 为什么必须死、UEFI 凭什么接班。读完这三问的根因,你自己就能推出来。


    一、从 ROM 到 Flash:固件的"身体"变了三次

    固件是"活在芯片里的程序",它的能力边界长期由存储介质决定。固件史的前半部,就是存储介质从"不可改写"走向"自由更新"的历史。

    1. PROM/EPROM 时代(1970s–1980s):改一个字节,照 20 分钟紫外灯

    最早的 PC BIOS 烧录在 PROM(可编程只读存储器)里,出厂即定型。随后的 EPROM 略微松绑——允许紫外线整片擦除。注意是"整片":想改一个字节,也得把芯片拔下来、照 20 分钟紫外灯、再用编程器重写。那个时代的 BIOS 升级等于物理换芯片,普通用户绝无可能。

    今天看来这是缺点,在当时却是安全资产:没有任何病毒能改写一块紫外线擦除的芯片。

    2. EEPROM / Flash 时代(1990s):CIH 病毒的黑暗注脚

    电可擦除 ROM(EEPROM)把"紫外线 + 编程器"简化为"一条写命令",NOR Flash 随即成为 BIOS 的标准载体:按扇区电擦写、随机读取、断电保持。

    代价在 1998 年到来——CIH 病毒利用 BIOS 可写的特性直接覆写固件,让主板"变砖"。这是历史上第一次,固件从"最可信的代码"变成了"可被攻击的目标"。此后二十年固件安全的全部课题(Secure Boot、BIOS 刷写风险、固件校验),都是这段历史的续集。

    3. SPI Flash 大容量时代(2000s 至今):容量膨胀不是为了自检代码

    现代主板的固件普遍存放在一颗 8 引脚的 SPI NOR Flash 芯片里,容量从早期的 512KB 一路膨胀到 16MB、32MB。

    膨胀的原因不是自检代码变多了,而是 UEFI 带来的"新住客":

    • 图形化设置界面的资源
    • Secure Boot 的证书数据库(db / dbx)
    • 网卡、RAID 卡的 Option ROM
    • 甚至一整个 UEFI Shell

    对开发者 / 运维的实际意义

    • 刷写失败可恢复。SPI Flash 可以用编程器(CH341A 一类的十几元工具)夹在芯片上离线重写——这是"BIOS 刷坏变砖"的标准救援路径,也是"双 BIOS 芯片"设计(主备两颗,刷坏自动切换)的由来。
    • 固件可被恶意持久化。rootkit 写进 SPI Flash 后,重装系统、换硬盘都无法清除。高安全场景要求校验固件哈希,或使用可拔插固件芯片。
    • 固件体积验证。下载 BIOS 更新包时核对文件大小、校验哈希,是防刷错包的第一道闸。

    二、BIOS 的四宗罪:一个被冻结在 1981 年的契约

    BIOS(Basic Input/Output System)随 1981 年 IBM PC 5150 诞生。它给自己定的职责至今写在教科书里:

    上电自检(POST)→ 枚举可引导设备 → 加载引导扇区 → 提供一套中断调用,让操作系统不必直接摸硬件。

    这四件事在 1981 年都成立。问题在于,它们被"冻结"在了 1981 年的硬件假设上——此后四十年 PC 硬件突飞猛进,BIOS 的契约一字未改。

    局限一:16 位实模式与 1MB 内存墙

    BIOS 把 CPU 置于实模式(Real Mode):16 位寄存器、无内存保护、任何代码都能访问任何地址。实模式寻址上限 20 位(段地址 × 16 + 偏移),即 1MB 内存空间——其中还要扣掉 640KB 常规内存和各类保留区。

    后续的 A20 地址线、保护模式切换都是"打补丁"。BIOS 只能在交出控制权之前替你准备一点扩展内存信息(如 INT 15h 的内存映射查询),真正的模式切换要靠引导程序自己完成——Windows 的 bootmgr、GRUB 的内核加载阶段,都内嵌着一套"从实模式爬进 32/64 位世界"的过渡代码。这层包袱的直接后果是:BIOS 启动的系统,早期初始化代码又长又脆。

    局限二:INT 中断调用,一座虚构的硬件层

    BIOS 通过中断向量表提供服务:INT 13h 读磁盘、INT 10h 打字符、INT 16h 读键盘。在"每台机器只有一种硬盘"的年代,这是优雅抽象;但当设备形态爆炸(AHCI、NVMe、USB 3.x、Thunderbolt)后,中断接口成了最窄的瓶颈——INT 13h 的语义里甚至没有"设备热插拔"和"64 位 LBA"的位置。

    老主板给 NVMe SSD 加"兼容引导"的办法,是让厂商在 Option ROM 里模拟一块 INT 13h 磁盘——打补丁的打补丁。

    局限三:以扇区 0 为锚的引导契约

    BIOS 的引导契约只有一句话:

    读磁盘第一个扇区(512 字节)到内存 0x7C00,若末两字节是 0x55AA,就执行它。

    这 512 字节里还要塞进 64 字节的分区表,留给引导代码的只有 446 字节——连"认识文件系统"都做不到,只能级联加载二级引导。MBR 分区表的全部先天缺陷,都源于这个模型。

    局限四:没有标准化的运行时环境

    BIOS 没有"应用"的概念。想给固件加功能(RAID 驱动、网络启动、诊断界面),各厂商各写各的 Option ROM:无签名、无版本管理、无卸载。安全与管理能力的缺席,最终由 UEFI 统一补齐。

    那还要不要学 BIOS?

    要。原因有三:

  • 存量机房里服役的老机器、工控机、老 NAS,仍是 BIOS + MBR 体系;
  • UEFI 的 CSM 兼容模块本质是"内置了一台 BIOS 模拟器",不懂 BIOS 就读不懂 CSM 的失败模式;
  • BIOS"以扇区 0 为锚"的思想,是理解 MBR 结构和引导故障的必要前置。

  • 三、UEFI 的崛起:不是"更好的 BIOS",而是重新发明的固件

    3.1 从 Intel 私有项目到行业标准

    1998 年前后,Intel 为安腾(Itanium)处理器准备固件时发现:让安腾模拟 16 位实模式去跑 BIOS,成本高到荒谬——不如直接设计一套 64 位原生固件。这个项目最初叫 "Intel Boot Initiative",2000 年发布为 EFI 1.0:模块化 C 语言代码、面向对象的协议(Protocol)体系、可运行 EFI 应用、支持 GPT 磁盘。

    2005 年,Intel 把规范移交给行业联盟 Unified EFI Forum(成员含 AMD、Apple、AMI、Dell、HP、IBM、Microsoft 等),更名 UEFI。此后按 2.x 线性演进:

    版本节点

    关键变化

    2.1

    引入 Secure Boot 变量框架

    2.3

    成为 Windows 8 认证强制基线(2011–2012,UEFI 普及的真正分水岭)

    2.7 / 2.8

    补齐 TPM 度量与证书更新机制

    2.8A / 2.9(2020 前后)

    新兴总线与安全机制的持续修订

    版本号在现场极其实用:主板宣称支持 UEFI 2.3.1 以上,即意味着 Secure Boot、GPT 引导、现代 ACPI 完整可用——这是 Win11 硬件检查在固件侧的依据。

    3.2 四个范式转换

    ① 从汇编遗产到 C 语言模块。 UEFI 以模块(Driver / Application)加载执行,固件开发者面对的是标准化的系统表与协议,而不是寄存器与中断。固件从此可以像软件工程一样做版本管理、单元测试与 OTA 更新。

    ② 从 16 位实模式到 64 位原生模式。 UEFI 启动时 CPU 已运行在 64 位长模式,引导程序拿到的直接是"满血 CPU"——没有模式切换的过渡代码。Windows 的 winload 在 UEFI 路径上直接省去了一整段历史包袱。

    ③ 从"读一个扇区"到"执行一个文件"。 UEFI 定义了简单的 FAT 文件系统驱动,引导契约变成:

    到 ESP 分区里找 \\EFI\\BOOT\\BOOTX64.EFI(或 NVRAM 指定的 EFI 应用)并执行它。

    文件可以命名、可以多版本共存(多引导管理器并存的根基)、可以签名(Secure Boot 的根基)。

    ④ 从 Option ROM 丛林到驱动模型 + 安全变量。 统一的驱动模型与设备路径协议让第三方硬件以标准驱动接入;固件设置持久化到 NVRAM 变量,启动项成为有名字、有路径、可枚举的数据;Secure Boot 给整个引导链加上密码学信任。

    3.3 一张时间线,解决现场一大半争论

    给现场工作一个时间锚点:

    • 2012 年前的机器 → 大概率 BIOS/MBR
    • 2012–2020 年的机器 → 看 CSM 开关
    • 2020 年后的机器 → 必然纯 UEFI/GPT

    这三句话,能解决现场一大半"引导模式怎么设"的争论。


    赞(0)
    未经允许不得转载:171主机测评 » 从 512 字节到 32MB:固件五十年演进史,一篇讲透 BIOS 与 UEFI 的恩怨
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址