4. UEFI与BIOS基础

在Xeon服务器平台上,固件不再只是“开机自检程序”,而是一套遵循UEFI规范、负责硬件初始化、平台策略配置和操作系统引导的完整运行环境。理解UEFI规范的核心概念,以及PEI、DXE、BDS等阶段的职责划分,是后续学习BMC协同、固件更新、安全启动和生命周期管理的基础。

一、UEFI规范的核心概念

UEFI(Unified Extensible Firmware Interface)规范由UEFI Forum维护,它定义了固件与操作系统之间的接口,以及固件内部模块化的执行模型。与Legacy BIOS依赖中断向量和16位实模式不同,UEFI在32/64位保护模式下运行,使用协议(Protocol)作为服务调用接口,使用句柄(Handle)标识设备与驱动实例。

几个必须掌握的概念:

  • Protocol:一种带GUID的结构化接口,例如EFI_PCI_IO_PROTOCOL用于访问PCI配置空间,EFI_BLOCK_IO_PROTOCOL用于块设备读写。驱动通过安装Protocol向系统暴露能力,其他模块通过LocateProtocol或HandleProtocol获取服务。
  • Handle Database:UEFI把设备、驱动、协议实例组织成句柄数据库,驱动绑定(Binding)时通过Supported/Start/Stop判断能否接管某个控制器。
  • Boot Services与Runtime Services:Boot Services(如内存分配、事件、协议管理)在ExitBootServices后失效;Runtime Services(如变量读写、时间、复位)在OS运行期间仍可调用,是固件与OS交互的持久通道。
  • UEFI变量:以GetVariable/SetVariable访问,分为Non-Volatile、BootService、Runtime等属性。启动项、Setup配置、安全启动密钥都存放在变量中。

二、PEI、DXE、BDS阶段的分工

UEFI PI(Platform Initialization)规范把固件启动划分为SEC、PEI、DXE、BDS、TSL、RT等阶段。对Xeon平台而言,最值得关注的是PEI、DXE和BDS。

SEC阶段是复位向量入口,负责建立临时内存(Cache as RAM)、传递SEC Core Data和PEI Core入口,为PEI准备最小运行环境。

PEI阶段的核心目标是“用最少资源完成内存初始化”。它按PEIM(PEI Module)依赖顺序调度执行:先由CPU PEIM完成微码加载和早期CPU初始化,再由内存参考代码(MRC)完成DDR训练与内存映射,最后通过PEI Core的HOB(Hand-Off Block)列表把内存布局、CPU信息、平台数据传递给DXE。PEI阶段资源紧张,通常只使用CAR和少量栈,因此代码必须精简。

DXE阶段是固件的主体。DXE Dispatcher按依赖关系调度DXE Driver,依次完成PCI枚举、芯片组初始化、BMC/ME/IE通信、ACPI表生成、SMM初始化、网络与存储驱动加载等。DXE阶段拥有完整内存和Boot Services,是固件功能最丰富的阶段。

BDS阶段负责策略与引导:读取启动变量、枚举启动项、执行启动策略(Boot Policy)、连接控制台设备、加载OS Loader或进入Setup界面。BDS是“固件策略”与“用户选择”交汇的地方,Setup选项的默认值、启动顺序、PXE/本地盘优先级都在此生效。

Xeon平台UEFI固件启动阶段与关键交付物 SEC 阶段 复位向量入口 CAR临时内存 / SEC Core Data PEI 阶段 CPU微码 / MRC内存训练 HOB列表传递平台数据 DXE 阶段 PCI枚举 / 芯片组 / ACPI SMM / BMC / 驱动调度 BDS 阶段 启动策略 / Setup OS Loader引导 阶段间关键交付物(HOB / 变量 / 协议) SEC → PEI SEC Core Data 临时RAM基址 PEI → DXE HOB: 内存映射 / CPU信息 平台策略HOB DXE → BDS Boot变量 / 控制台协议 ACPI / SMBIOS表 BDS → OS ExitBootServices Runtime Services保留 Setup选项与固件配置策略(BDS阶段生效) 启动策略 Boot Order / PXE Secure Boot密钥 Boot Mode选择 平台配置 CPU电源/性能策略 内存频率/镜像模式 PCIe bifurcation 管理配置 BMC/ME/IE通信 串口重定向 固件更新策略 安全配置 TPM / TXT BIOS写保护 密码与访问控制

三、Xeon平台BIOS初始化流程的实际观察

在真实服务器上,固件启动过程可以通过串口日志、BMC SOL或POST代码观察。以一台双路Xeon平台为例,典型顺序如下:

  1. 上电后SEC阶段从SPI Flash的复位向量开始执行,建立CAR。
  2. PEI阶段加载CPU微码,MRC对每通道DDR5进行训练,输出内存时序参数。若训练失败,POST代码会停在内存相关代码,BMC日志记录DIMM位置。
  3. DXE阶段枚举PCIe设备,初始化PCH、BMC共享接口、ME/IE,生成ACPI表。此时可通过串口看到“DXE Core Started”“PCI Enumeration Complete”等日志。
  4. BDS阶段读取BootOrder变量,若存在PXE启动项且网络可用,则优先尝试网络引导;否则加载本地NVMe或RAID控制器上的OS Loader。

实际排障时,POST代码(如0x32、0x60、0xB0等)和BMC的“BIOS POST Code”日志是判断卡在哪一阶段的第一手依据。例如卡在PEI内存训练阶段,应优先检查DIMM是否插错槽位、是否混插不同规格内存;卡在DXE PCI枚举阶段,则应检查PCIe插槽、转接卡和固件版本兼容性。

四、Setup选项与固件配置策略

Setup界面本质上是BDS阶段的一个应用,它把固件变量以菜单形式呈现给用户。Xeon平台常见的配置策略包括:

  • 启动模式:UEFI Only、Legacy Only或双模式。现代Xeon平台建议UEFI Only,以支持Secure Boot和大于2TB的启动盘。
  • 内存配置:内存频率、镜像模式(Mirroring)、备用模式(Sparing)、NUMA。镜像模式提升可靠性但容量减半,需根据业务SLA权衡。
  • CPU配置:C-State、P-State、Turbo、Hyper-Threading、VT-x/VT-d。虚拟化场景通常开启VT-d以支持设备直通。
  • PCIe配置:Bifurcation(x16拆分为x8+x8或x4+x4+x4+x4)、Above 4G Decoding、SR-IOV。拆分错误会导致NVMe或网卡无法识别。
  • 安全配置:Secure Boot密钥管理、TPM 2.0、TXT、BIOS密码与写保护。
配置策略的核心原则是“先明确业务需求,再改Setup”。例如数据库服务器优先内存镜像和性能模式;虚拟化服务器优先VT-d、SR-IOV和Above 4G Decoding;边缘计算节点则更关注Secure Boot和远程固件更新能力。

五、一个可参考的配置检查清单

在交付或变更Xeon平台固件配置时,可使用以下检查项,确保关键策略一致:

检查项推荐值/说明验证方式
Boot ModeUEFI OnlySetup → Boot → Boot Mode
Secure BootEnabled,密钥已注册Setup → Security → Secure Boot
VT-d / SR-IOV虚拟化场景开启Setup → Processor / PCIe
内存镜像按SLA选择Mirroring或SparingSetup → Memory Configuration
Above 4G DecodingEnabled(大显存/多NVMe)Setup → PCIe Configuration
串口重定向Enabled,115200 8N1Setup → Serial Port Console
BIOS写保护生产环境EnabledSetup → Security → BIOS Write Protect

完成配置后,应通过重启观察POST代码、BMC日志和OS下的dmidecode、lspci、numactl等输出,确认配置真正生效。例如开启Above 4G Decoding后,lspci应能看到大BAR空间设备;开启VT-d后,dmesg应出现DMAR相关表项。只有“Setup里改了”和“系统里看到了”同时成立,才算配置闭环。

修改内存镜像、PCIe Bifurcation等底层配置后,首次启动可能因内存重新训练而耗时较长(数十秒到数分钟),不要误判为死机。若长时间无POST进展,应回退到上一次已知良好配置,并检查BMC日志中的内存训练错误码。

掌握PEI、DXE、BDS的职责边界和Setup配置的生效位置,就能在后续固件更新、安全启动、BMC协同排障中快速定位问题属于哪个阶段、哪类变量、哪项策略,而不是盲目刷新固件或反复清CMOS。