上一篇,我们跟着一台老式台式机走过了 BIOS、MBR 和 GRUB 这条启动接力。如今的新电脑大多使用 UEFI,但主板设置里常还写着“BIOS Setup”,也可能有 CSM、Legacy Boot 这样的选项。它们看起来像一堆互相打架的名字,其实是在说不同层次的事情。

我们先把它们放回开机故事里:BIOS 是较早的固件启动方式;UEFI 是后来建立的一套固件接口和启动方式;CSM 是一些 UEFI 固件里用来兼容传统 BIOS 启动的功能。可以把 UEFI 想成换了新工作方法的车站,CSM 则像一座旧桥,让过去设计的列车也还能进站。

为什么很多人还把 UEFI 设置叫作 BIOS?

电脑开机时按 Delete、F2 或其他按键,会看到一张可以调节启动顺序、风扇和硬件选项的设置画面。很多人习惯把这整个画面叫作 BIOS。严格来说,现代电脑里面做这件事的固件大多已经是 UEFI;只是“进 BIOS”这个老叫法流传太广,厂商和用户常常沿用。

就像我们今天还会把所有影印文件都随口叫作“复印件”,即使机器早已更新换代。日常交流里说“进 BIOS 设置”通常能让人听懂;在讨论启动原理时,才需要区分传统 BIOS 和 UEFI。

UEFI 也不是一款所有主板都装着完全相同的程序。它是一套公开的接口规则,由 UEFI Forum 维护;主板厂商再用自己的固件实现这些规则。不同厂商的设置画面可以长得很不一样,但操作系统启动程序能按共同接口和固件合作。

传统 BIOS:先读硬盘开头,再让小程序找下一棒

传统 BIOS 启动时,会按照启动顺序挑一个设备,例如台式机的 SATA 硬盘。它通过固件提供的早期磁盘服务读取启动位置,常见情况是硬盘最前面的 MBR 扇区。MBR 里的小程序再找 GRUB,GRUB 找到内核,最后把控制权交给 Linux。

这条路线的特点是先从磁盘上固定的小块代码开始。最早的程序很小,能做的事有限,于是必须一段接一段地扩大本领。前一篇介绍过它为什么要把 GRUB 拆成几段,也讲过 MBR 为什么只有一点点启动代码的空间。

UEFI:像按地址找到一个启动文件

UEFI 的思路不一样。固件有自己的启动管理器,会查看保存好的启动选项,并按照顺序尝试它们。一个启动选项可以记录目标磁盘、分区和文件路径,例如在 EFI 系统分区里打开某个 .efi 文件。

EFI 系统分区常缩写成 ESP。可以把它想成硬盘上的一个专用文件柜,里面放着能由 UEFI 直接启动的文件。Linux 电脑里可能有 GRUB 的 EFI 文件或 shim;Windows 电脑里会有 Windows Boot Manager 的 EFI 文件。文件名字因系统和处理器类型而异。

UEFI 启动菜单里看到的“ubuntu”“Windows Boot Manager”之类名称,不一定只是磁盘分区名。它通常来自保存在主板非易失存储器里的启动选项。UEFI 标准为这类选项定义了 Boot#### 记录,也定义了启动顺序;断电后它们通常仍会保留。

因此,UEFI 并不是在硬盘第一扇区里放一段很大的 BIOS 程序。它让固件有能力识别受支持的文件系统,按启动选项找到一个 EFI 应用程序,再调用它。那个 EFI 应用程序通常是操作系统的第一阶段启动程序,后面仍可能由 GRUB 等程序继续加载内核。

MBR 和 GPT 说的是硬盘怎么记账

这里要把两个问题分开:BIOS、UEFI 讲的是固件怎样启动程序;MBR、GPT 讲的是硬盘怎样记录分区的位置。它们经常成对出现,是因为老电脑常用 BIOS 加 MBR,新电脑常用 UEFI 加 GPT;但这不是一一绑定的关系。

GPT 是更新的分区表格式。它能更灵活地记录大容量硬盘和多个分区。传统 BIOS 也可以在软件支持的条件下从 GPT 磁盘启动,例如 GRUB 可以把自己的核心映像放进专门留出的 BIOS Boot Partition。反过来,UEFI 的启动机制关注 EFI 系统分区和启动文件,不能仅仅看见硬盘是 MBR 还是 GPT,就断定固件一定走哪条路线。

对普通人来说,最常见的组合仍是:传统 BIOS 启动配合 MBR;UEFI 启动配合 GPT 和 EFI 系统分区。但记住“常见组合”就好,别把它们背成绝对规则。

两条启动路线传统 BIOS 路线
固件 → 硬盘启动扇区 / MBR → GRUB 的早期部分 → GRUB 菜单 → Linux 内核

UEFI 路线
固件启动管理器 → EFI 系统分区里的 .efi 文件 →(可选:GRUB 等)→ Linux 内核

CSM:新固件里的旧式接待窗口

电脑厂商不可能让所有旧系统和旧扩展卡一夜之间消失。有些旧操作系统只会使用传统 BIOS 提供的启动服务,有些旧设备也带着按照传统方式工作的扩展程序。为帮助这些旧软件继续使用,一些 UEFI 固件提供了 CSM,全名是兼容性支持模块。

打开 CSM 后,固件会提供一部分传统 BIOS 风格的启动支持,让电脑可以尝试从旧式启动扇区进入系统。你可以把它想成新车站里的旧式接待窗口:车站本身还是新系统,只是额外留了一个窗口,替旧乘客办过去那套手续。

CSM 不是一个和 UEFI 并排安装的 Linux 程序,也不是 GRUB,更不会自动把硬盘从 MBR 转成 GPT。它是固件兼容旧启动环境的一种功能。是否提供 CSM、能兼容哪些旧设备,由主板和固件厂商决定。

CSM 也不是每台 UEFI 电脑都必须有的功能。UEFI 规范允许厂商兼顾旧式 PC-AT 启动设施,但没有要求所有新机器都保留它。随着旧系统和旧扩展卡逐渐减少,一些新主板已经没有 CSM 选项。

所以一台电脑可以拥有 UEFI 固件,同时通过 CSM 按传统方式启动某个操作系统。用户如果看到主板界面把它叫作 Legacy 或 CSM,通常表示这次启动要走兼容旧式 BIOS 的路线,而不是直接按纯 UEFI 方式打开 EFI 文件。

安全启动放在哪一层?

UEFI 还支持 Secure Boot,中文常叫安全启动。打开后,固件会按照已配置的信任密钥,检查要启动的 EFI 程序是否带有受认可的数字签名。可以把它想成查验启动程序的工作证:没通过核验的文件可能不被放行。

安全启动不是另一套启动路线,也不是磁盘加密或杀毒软件。它是 UEFI 启动过程中的一种安全检查。Linux 也能配合安全启动;有些发行版会先由一个受信任的 shim 程序出场,再继续验证或加载 GRUB 和内核。具体安排取决于发行版和机器上的信任设置。

许多电脑在开启 CSM 时会要求关闭安全启动,或无法同时使用两者。这是因为 CSM 的旧式启动程序通常不按 UEFI 安全启动检查的方式工作。不同主板设置名称和限制各有差异;关键是它们属于不同功能,不要把“关了安全启动”和“改成 BIOS 启动”当成同一件事。

切换启动模式时,电脑为什么会突然找不到系统?

固件设置决定它这次要寻找什么:传统启动模式会找旧式启动扇区;纯 UEFI 模式会按启动选项寻找 EFI 文件。如果系统原来按一种模式安装,后来把另一种模式设成优先,固件可能暂时找不到原来的入口,画面上就会出现“没有启动设备”之类提示。

这不一定代表文件都丢了。电脑也许只是在问错问题:它按旧方式找了一块只准备好 UEFI 文件的硬盘,或者反过来。像是你拿着旧地址去找搬过家的店铺,店铺可能还在,只是入口和地址簿没对上。

判断时可以留意启动菜单中的设备名称、UEFI 或 Legacy 标记,以及系统原来的安装方式。不要只根据硬盘是不是 GPT,就猜启动模式;也别把菜单里写着“BIOS Setup”当成电脑一定在用传统 BIOS。

开机路线图:四个词各管一件事

简化对照BIOS:传统固件启动方式
UEFI:较新的固件接口和启动方式
CSM:UEFI 固件提供的旧式 BIOS 兼容功能
MBR / GPT:硬盘记录分区位置的两类格式
EFI 系统分区:UEFI 常用来存放启动文件的分区
Secure Boot:检查 EFI 启动程序签名的安全功能

如果把整段历史压成一句话:早期电脑让 BIOS 从磁盘小扇区开始接力;UEFI 后来让固件按启动记录去打开文件;为了照顾旧软件,部分 UEFI 固件还保留 CSM 这座兼容桥。它们不是三个都要同时工作的启动程序,而是新旧启动方式之间的演进与兼容。

系列的镜头接下来会从台式机固件转到开发板:许多 ARM 设备没有 PC 那样统一的硬件发现方式,启动程序和内核怎样描述板子上的内存、串口、时钟和设备?下一篇,我们从这个问题出发,讲设备树为什么会出现。