14.0 参考
https://www.youtube.com/watch?v=DwO7dn5iNJ0
14.1 概述
UEFI( Unified Extensible Firmware Interface):现代接口标准,定义了操作系统和固件之间的软件接口。
UEFI可以看作是一个小型的操作系统,有自己的网络栈。
14.2 BIOS和UEFI之间的差异
14.2.1 引导过程流差异
传统的BIOS:引导代码 – MBR – VBR – 操作系统引导
UEFI:UEFI有自己的一段引导代码加载操作系统
14.2.2 磁盘分区差异
MBR:最多支持四个分区或扩展分区、使用小整数标识分区
GPT:支持更多的分区、使用GUID标识分区
启动:GPT分区指定EFI分区,加载引导加载程序。引导加载程序路径类似
\EFI\Microsoft\Boot\bootmgfw.efi,用来定位winload.efi
winload.efi用来加载和初始化操作系统内核映像。
14.2.3 其他差异
运行模型:
UEFI:除初始小段代码在CPU上电或复位时运行,其余代码在保护模式下运行
BIOS:在16位模式下执行大部分代码,直到它将控制权移交给操作系统和加载程序。
- 架构:
- 传统BIOS:没有统一的固件开发过程,每个BIOS供应商独立支持自己的代码库。
- UEFI:有统一的固件开发规范和Intel参考代码(EDK/EDKII)。
- 内存模型:
- 传统BIOS:16位实模式。
- UEFI:32位或64位保护模式。
- 引导代码:
- 传统BIOS:使用MBR和VBR。
- UEFI:固件控制启动过程,没有MBR和VBR。
- 分区方案:
- 传统BIOS:使用MBR分区表。
- UEFI:使用GUID分区表(GPT)。
- 磁盘I/O:
- 传统BIOS:系统中断。
- UEFI:UEFI服务。
- 引导加载程序:
- 传统BIOS:使用
bootmgr
和winload.exe
。 - UEFI:使用
bootmgfw.efi
和winload.efi
。
- 传统BIOS:使用
- 操作系统交互:
- 传统BIOS:BIOS中断。
- UEFI:UEFI服务。
- 启动配置信息:
- 传统BIOS:使用CMOS内存,没有NVRAM变量的概念。
- UEFI:使用UEFI NVRAM变量存储。
14.3 GUID分区表细节
启动:
UEFI:启动代码在固件中,位于闪存磁盘上
BIOS:启动代码位于磁盘上
GPT分区表结构:
第一个扇区是MBR,只包含MBR一个条码,称为保护性MBR,防止旧的磁盘工具破坏GUID分区
第二个分区偏移0x200包含EFI part签名。是GPT头部的签名。
GPT头如下:
开头是8字节的EFI part签名
注意
Backup LBA(备份LBA):GPT头部副本,主GPT损坏时恢复副本
Starting LBA of array of partition entries(启动分区条目数组的LBA):硬盘驱动器上分区表的位置
Number of partition entries in array(数组中分区条目数):硬盘驱动器上分区表的大小
GUID分区表如下
14.4 UEFI固件工作原理
存储位置:UEFI固件存储在主板的闪存芯片中。
启动:
UEFI框架如下:
芯片组逻辑将闪存芯片的内容映射到RAM区域 – UEFI固件初始化平台(CPU和芯片组) – UEFI固件加载UEFI驱动 – 枚举外部设备 – 加载操作系统启动管理器 – bootmgfw.efi(管理器) – winload.efi(加载器) – 加载操作系统 – EFI启动服务和运行时服务
14.4.1 UEFI规范