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平台BIOS初始化流程的实际观察
在真实服务器上,固件启动过程可以通过串口日志、BMC SOL或POST代码观察。以一台双路Xeon平台为例,典型顺序如下:
- 上电后SEC阶段从SPI Flash的复位向量开始执行,建立CAR。
- PEI阶段加载CPU微码,MRC对每通道DDR5进行训练,输出内存时序参数。若训练失败,POST代码会停在内存相关代码,BMC日志记录DIMM位置。
- DXE阶段枚举PCIe设备,初始化PCH、BMC共享接口、ME/IE,生成ACPI表。此时可通过串口看到“DXE Core Started”“PCI Enumeration Complete”等日志。
- 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密码与写保护。
五、一个可参考的配置检查清单
在交付或变更Xeon平台固件配置时,可使用以下检查项,确保关键策略一致:
| 检查项 | 推荐值/说明 | 验证方式 |
|---|---|---|
| Boot Mode | UEFI Only | Setup → Boot → Boot Mode |
| Secure Boot | Enabled,密钥已注册 | Setup → Security → Secure Boot |
| VT-d / SR-IOV | 虚拟化场景开启 | Setup → Processor / PCIe |
| 内存镜像 | 按SLA选择Mirroring或Sparing | Setup → Memory Configuration |
| Above 4G Decoding | Enabled(大显存/多NVMe) | Setup → PCIe Configuration |
| 串口重定向 | Enabled,115200 8N1 | Setup → Serial Port Console |
| BIOS写保护 | 生产环境Enabled | Setup → Security → BIOS Write Protect |
完成配置后,应通过重启观察POST代码、BMC日志和OS下的dmidecode、lspci、numactl等输出,确认配置真正生效。例如开启Above 4G Decoding后,lspci应能看到大BAR空间设备;开启VT-d后,dmesg应出现DMAR相关表项。只有“Setup里改了”和“系统里看到了”同时成立,才算配置闭环。
掌握PEI、DXE、BDS的职责边界和Setup配置的生效位置,就能在后续固件更新、安全启动、BMC协同排障中快速定位问题属于哪个阶段、哪类变量、哪项策略,而不是盲目刷新固件或反复清CMOS。