UEFI Protocol Handle 机制是如何详细介绍的?
摘要:本文介绍了在 UEFI 学习过程中遇到的一些知识集合。总结如下:复位向量ResetVector;不同平台的OS loaderGRUB;UEFI中的ESP目录是什么;以及UEFI中很重要的Protocol Handle机制,非常类似于Lin
⭐️UEFI 中的 Protocol Handle 机制
一、ResetVector
Reset Vector(复位向量) 是 CPU(或其他处理器)在上电复位(Power-on Reset)或手动复位(Reset信号触发)后,无条件跳转去执行的第一条指令的地址。
x86 实模式的典型值是 0xFFFFFFF0
CPU 收到 Reset 信号后的大致动作:
所有寄存器复位到默认值(包括 PC)。
PC 被强制加载 Reset Vector 地址处的内容(这个内容通常是一条跳转指令)。
从该地址开始取指、译码、执行 → 进入Boot ROM / BIOS / Bootloader。
通常这个地址里放的不是真正的第一条有用代码,而是一条跳转指令,比如:
; x86 实模式例子(物理地址 0xFFFFFFF0)
jmp far 0xF000:0xXXX ; 跳到BIOS入口
真正的启动代码(复位处理程序 reset handler)一般放在 Flash、ROM 或固化的 BootROM 里。
以 x86 为例,主板一上电,CPU 的 PC 被设为 0xFFFFFFF0(物理地址,相当于 FFFF:FFF0 段:偏移)。这个地址属于主板上的 SPI Flash 里的 UEFI 固件镜像(通过芯片组如 Intel PCH 映射到 4GB 地址空间顶部,通常 4-16MB 大小)。0xFFFFFFF0 处仍是一条 jmp 指令(通常是 jmp far 或短跳转),跳到 UEFI 固件的真正入口(Reset Vector Code,位于固件镜像末尾附近)。
南北桥到芯片组的演化:
序号
芯片组负责的事
以前是谁管(2000年以前)
1
直接连接内存条(DDR5)
以前是北桥
2
提供 PCIe 通道给显卡、NVMe SSD、网卡等
以前是北桥
3
提供 USB 口(包括 USB4/雷电)
以前是南桥
4
提供 SATA 硬盘接口、声卡、网卡
以前是南桥
5
管理电源、上电时序、风扇控制、RGB灯
以前是超级I/O + 南桥
6
运行 Intel ME / AMD PSP(那块“后门”固件)
以前没有
二、OS loader 与 TSL
在之前的介绍中我们知道 TSL 阶段的作用,即作为 BDS 和 RT 之间的过渡阶段。此时系统的主要任务是从平台初始化转向加载操作系统内核。那么用于加载操作系统的 OS Loader 与 TSL 之间有什么关系呢?OS Loader 是 TSL 阶段的实际执行主体,负责加载并启动操作系统。
在 TSL 阶段 Boot Services 仍可用(直到 ExitBootServices() 被调用)。OS Loader 可以调用 UEFI 协议和服务来读取文件系统、加载内核镜像等。一旦 OS Loader 完成内核加载并准备跳转到操作系统入口点,会调用 ExitBootServices(),标志着 TSL 阶段结束,进入 RT 阶段。
OS Loader 是负责加载操作系统内核并将其控制权转移给内核的程序。在 UEFI 环境下,它具有以下关键功能:
定位操作系统镜像
通过 UEFI 文件系统协议(如 Simple File System Protocol)访问 ESP(EFI System Partition)。
读取配置文件(如 bootmgfw.efi for Windows, grubx64.efi for Linux)。
加载内核与初始化数据
将操作系统内核(如 vmlinuz、ntoskrnl.exe)和可能的 initramfs/initrd 加载到内存。
解析启动参数(如来自 UEFI NVRAM 中的 Boot#### 变量)。
准备执行环境
设置必要的内存布局、页表(某些情况下)、传递启动信息(如 ACPI 表、内存映射等)。
调用 ExitBootServices() 终止 UEFI Boot Services,释放对硬件的控制。
跳转到操作系统入口点
将 CPU 控制权移交给操作系统内核,完成启动过程。
示例:
UEFI 固件在 BDS 阶段找到 ESP 分区中的 \EFI\SYSTEMD\SYSTEMD-BOOTX64.EFI。
进入 TSL 阶段,执行该 EFI 应用(即 OS Loader)。
systemd-boot 显示启动菜单,用户选择内核。
加载 vmlinuz 和 initrd 到内存,设置 cmdline。
调用 ExitBootServices(),跳转到内核入口。
UEFI 进入 RT 阶段,操作系统全面接管。
