3. 固件与BIOS/UEFI:从“老古董”到现代引导

好,我们继续往下走。按下电源键之后,CPU 第一个跑起来的代码,就是固件。说白了,固件就是主板上那颗只读存储器(ROM)里存着的程序。它负责把硬件初始化好,然后找到操作系统,把它拉起来。

这部分内容,我当年刚入行时觉得特别枯燥,不就是个“跳板”嘛。直到有一次,我在调试一块工控主板时,因为 BIOS 设置不当,折腾了整整三天。嗯,从那以后,我再也不敢小看它了。

3.1 BIOS 的历史与局限

BIOS,全称是 Basic Input/Output System。它诞生于 1981 年,伴随 IBM PC 一起出道。那时候的计算机很简单,BIOS 的任务也单纯:检查硬件、加载操作系统。

但时代变了。BIOS 这套老架构,慢慢就撑不住了。我个人觉得,它最大的问题有三个:

  • 16 位实模式:BIOS 只能在 16 位模式下运行。这意味着它只能访问 1MB 的内存空间。你想想看,现在随便一条内存条都 8GB 了,1MB 连塞个启动菜单都费劲。
  • MBR 分区表:BIOS 依赖主引导记录(MBR)。MBR 只能管理 2TB 以下的硬盘。超过 2TB 的硬盘,BIOS 根本认不全。
  • 扩展性差:BIOS 的代码是写在 ROM 里的,更新要靠烧录器。虽然后来有了“刷新 BIOS”这种操作,但风险极高。我曾经刷坏过一块主板,直接变砖,那叫一个心疼。

BIOS 启动流程(简化版)

  1. 上电自检(POST):检查 CPU、内存、显卡等关键硬件。
  2. 读取 MBR:从启动盘的第 0 扇区读取 512 字节的引导代码。
  3. 执行引导代码:MBR 里的代码再去加载操作系统的引导扇区。
  4. 加载操作系统:引导扇区把操作系统内核加载到内存,然后移交控制权。

这个流程,在当年是天才设计。但现在看,每一步都是瓶颈。尤其是 MBR 那 512 字节,既要放分区表,又要放引导代码,空间捉襟见肘。我记得有段时间,为了在 MBR 里塞进更多功能,各路大神想尽了办法,甚至出现了“多阶段引导”这种奇技淫巧。

3.2 UEFI 的诞生与优势

BIOS 的局限越来越明显,业界终于坐不住了。Intel 在 2005 年左右牵头搞了个 EFI(Extensible Firmware Interface),后来交给了 Unified EFI Forum 管理,改名叫 UEFI。

UEFI 不是 BIOS 的升级版,它是一次彻底的重新设计。说白了,UEFI 本身就是一个微型操作系统。它有自己的一套驱动框架、文件系统支持,甚至还能上网(虽然很少有人这么干)。

它的优势,我列个表,你一看就明白:

特性 BIOS UEFI
运行模式 16 位实模式 32/64 位保护模式
寻址空间 1MB 理论无限制(实际受硬件限制)
分区表 MBR(最大 2TB) GPT(最大 9.4ZB)
驱动模型 无标准驱动框架 UEFI 驱动模型,可加载外部驱动
启动速度 慢(逐项初始化) 快(并行初始化)
安全性 无 Secure Boot(安全启动)
用户界面 字符界面(蓝底白字) 图形界面(可支持鼠标)

你看,UEFI 几乎是全面碾压。尤其是 GPT 分区表,解决了大硬盘的识别问题。还有 Secure Boot,能防止恶意软件在启动阶段劫持系统。我在做嵌入式安全项目时,Secure Boot 几乎是标配,没有它,设备就像没锁门的房子。

3.3 UEFI 的启动模式:Legacy vs UEFI

这里有个容易混淆的概念:Legacy 模式和 UEFI 模式。

Legacy 模式,其实就是 BIOS 兼容模式。UEFI 为了兼容旧系统,保留了对 BIOS 启动流程的支持。在这种模式下,UEFI 会模拟 BIOS 的行为,使用 MBR 分区表,走 16 位实模式的老路。

而真正的 UEFI 模式,则使用 GPT 分区表,直接从 EFI 系统分区(ESP)加载引导程序。ESP 分区通常格式化为 FAT32,里面放着 .efi 后缀的引导文件。

避坑指南:我曾经遇到过一块主板,默认开启了“Legacy + UEFI”混合模式。结果安装系统时,硬盘分区表被搞乱了,一会儿 MBR 一会儿 GPT,折腾了好几次才装好。我的建议是:如果你装的是 Windows 8/10/11 或较新的 Linux,直接选 纯 UEFI 模式,省心。

两种模式的选择,其实取决于你的操作系统和硬件:

  • 纯 UEFI 模式:支持 64 位系统,支持 GPT 分区,启动速度快,支持 Secure Boot。
  • Legacy 模式:兼容 32 位系统,支持 MBR 分区,启动速度慢,不支持 Secure Boot。
  • 混合模式:有些主板叫“CSM”(Compatibility Support Module),可以同时支持两种模式。但容易出问题,不推荐。

我个人习惯,只要硬件支持,一律用纯 UEFI 模式。你想想看,都 2025 年了,谁还用 32 位系统?谁还用 2TB 以下的硬盘?

3.4 UEFI Shell 简介

UEFI Shell 是个好东西。它相当于 UEFI 环境下的命令行终端。你可以用它来执行一些底层操作,比如查看内存、加载驱动、运行 .efi 程序。

进入 UEFI Shell 的方法,通常是在主板启动时按某个特定键(比如 F2、Del 进入 BIOS 设置,然后找到“Launch UEFI Shell”选项)。有些主板需要把 Shell.efi 文件放到 ESP 分区里。

进去之后,你会看到一个类似 DOS 的命令行界面。常用的命令有:

  • map:列出所有可用的设备和文件系统。
  • fs0::切换到第一个文件系统(类似 DOS 的 C:)。
  • ls:列出目录内容。
  • cd:切换目录。
  • edit:一个简单的文本编辑器。
  • reset:重启系统。

举个例子,如果你想手动启动一个 .efi 引导程序,可以这样:

Shell> fs0:
FS0:\> cd \EFI\BOOT
FS0:\EFI\BOOT> bootx64.efi

这其实就是 UEFI 默认的启动路径。大多数 64 位系统的引导程序,都放在 \EFI\BOOT\bootx64.efi 这个位置。

小技巧:UEFI Shell 在调试启动问题时特别有用。比如系统无法正常启动,你可以进 Shell 手动检查 ESP 分区里的文件是否完整,或者手动加载驱动。我曾经用 Shell 修复过一台因为引导文件损坏而无法启动的服务器,省去了重装系统的麻烦。

好了,关于固件和 BIOS/UEFI 的内容,我们就聊到这里。这部分知识是启动流程的基石,理解了它,后面的内容会顺畅很多。

BIOS vs UEFI 启动流程对比 BIOS vs UEFI 启动流程对比 BIOS 启动流程 1. 上电自检 (POST) 2. 读取 MBR (512字节) 3. 执行引导代码 4. 加载操作系统 UEFI 启动流程 1. UEFI 初始化 2. 读取 GPT 分区表 3. 加载 .efi 引导程序 4. 加载操作系统 核心差异 BIOS:16位实模式 → MBR → 2TB限制 → 无安全机制 UEFI:32/64位保护模式 → GPT → 大容量支持 → Secure Boot