河南省住房和城乡建设门户网站,网站主持人,心得网站建设,网页设计基础教程第二版课后答案https://www.jianshu.com/p/73ee37f6b3b9 统一可扩展固件接口#xff08;英语#xff1a;Unified Extensible Firmware Interface#xff0c;缩写UEFI#xff09;是一种个人电脑系统规格#xff0c;用来定义操作系统与系统固件之间的软件界面#xff0c;作为BIOS的替代方…https://www.jianshu.com/p/73ee37f6b3b9 统一可扩展固件接口英语Unified Extensible Firmware Interface缩写UEFI是一种个人电脑系统规格用来定义操作系统与系统固件之间的软件界面作为BIOS的替代方案。可扩展固件接口负责加电自检POST、联系操作系统以及提供连接操作系统与硬件的接口。 UEFI的前身是Intel在1998年开始开发的Intel Boot Initiative后来被重命名为可扩展固件接口Extensible Firmware Interface缩写EFI。Intel在2005年将其交由统一可扩展固件接口论坛Unified EFI Forum来推广与发展为了凸显这一点EFI也更名为UEFIUnified EFI。UEFI论坛的创始者是11家知名电脑公司包括Intel、IBM等硬件厂商软件厂商Microsoft及BIOS厂商AMI、Insyde及Phoenix。
UEFI在概念上非常类似于一个低阶的操作系统并且具有操控所有硬件资源的能力。不少人感觉它的不断发展将有可能代替现代的操作系统。事实上EFI的缔造者们在第一版规范出台时就将EFI的能力限制于不足以威胁操作系统的统治地位。首先它只是硬件和预启动软件间的接口规范其次UEFI环境下不提供中断的机制也就是说每个EFI驱动程序必须用轮询polling的方式来检查硬件状态并且需要以解释的方式运行较操作系统下的机械码驱动效率更低再则UEFI系统不提供复杂的缓存器保护功能它只具备简单的缓存器管理机制具体来说就是指运行在x64或x86处理器的64位模式或保护模式下以最大寻址能力为限把缓存器分为一个平坦的段Segment所有的程序都有权限访问任何一段位置并不提供真实的保护服务。当UEFI所有组件加载完毕时便会启动操作系统的启动程序如果UEFI固件内置EFI Shell也可以启动EFI Shell命令提示部分UEFI固件内置EFI Shell在这里用户可以调入执行EFI应用程序这些EFI程序可以是OEM提供的硬件检测软件OEM提供的备份软件引导管理软件操作系统的启动程序等等也可以加载EFI分区ESP中的EFI驱动程序如文件系统驱动程序。EFI应用程序和EFI驱动程序可以是PE格式的.efi文件可用C语言编写。在UEFI引导模式下操作系统的启动程序也是EFI应用程序启动程序的EFI文件存储在EFI系统分区ESP上。理论上来说对于EFI应用程序的功能并没有任何限制任何人都可以编写这类软件并且效果较以前MS-DOS下的软件更华丽功能更强大。一旦引导软件将控制权交给操作系统所有用于引导的服务代码将全部停止工作部分运行时代服务程序还可以继续工作以便于操作系统一时无法找到特定设备的驱动程序时该设备还可以继续被使用。 UEFI固件区分架构在UEFI引导模式下通常只能运行特定架构的UEFI操作系统和特定架构的EFI应用程序EBC程序除外。比如采用64位UEFI固件的PC在UEFI引导模式下只能运行64位操作系统启动程序而在Legacy引导模式即BIOS兼容引导模式下通常不区分操作系统的比特数既可以运行16位的操作系统如DOS也可以运行32位或64位的操作系统和BIOS一样。 [2]
UEFI 定义了操作系统和平台固件之间的借口它是 UEFI Forum 发布的一种标准。
UEFI 提供给操作系统的借口包括启动服务BS和运行时服务RT以及隐藏在 BS 之后丰富的 Protocol。
启动服务主要服务对象是操作系统加载器以及其他 UEFI 应用程序和 UEFI 驱动。操作系统加载器通过启动服务逐步取得对整个计算机系统资源的控制。当加载器完全控制计算机软硬件资源后系统结束启动服务进入运行时。启动服务主要包括事件服务、内存管理、Protocol 管理、Protocol 使用类服务、驱动管理、Image 管理、ExitBootServices 服务。
运行时服务主要服务对象是操作系统、操作系统加载器以及 UEFI 应用和 UEFI 驱动。运行时服务主要包括时间服务、读写 UEFI 系统变量服务、虚拟内存服务、重启系统服务。
UEFI 的优点
可以使用 C 编写提高开发效率。 驱动的模块化设计和软硬件升级的兼容性每个表、Protocol 都有版本号易于升级。 基于事件的异步操作提高 CPU 利用率舍弃中断仅保留时钟中断。 先检测程序和驱动的证书提高安全性。 UEFI 系统从加电到关机可分为七个阶段
SEC安全验证-PEIEFI前期初始化-DXE驱动执行环境-BDS启动设备选择-TSL操作系统加载前期-RTRun Time-AL系统灾难恢复期
其中前三个阶段是 UEFI 初始化阶段DXE 阶段结束后 UEFI 环境已经准备完毕。BDS 和 TSL 是操作系统加载器作为 UEFI 应用程序运行阶段。
SEC 阶段 SECSecurity Phase阶段是平台初始化的第一个阶段。
SEC 阶段功能 UEFI 系统开机或重启进入 SEC 阶段它执行以下四种任务
接收并处理系统启动和重启信号系统加电信号、系统重启信号、系统运行过程中的严重异常信号。 初始化临时存储区域在 SEC 阶段时仅 CPU 和其内部SOC资源被初始化外围设备和内存均为初始化因此需要临时 RAM 区域。临时 RAM 初始化之后才能进入 SEC 的入口函数。 作为可信系统的根SEC 能被系统信任之后的各个阶段才有被信任的基础。 传递系统参数给下一阶段PEI需将如下信息作为参数传递给 PEI 的入口函数系统当前状态、可启动固件的地址和大小、临时 RAM 区域的地址和大小、栈的地址和大小。 SEC 阶段执行流程 以临时 RAM 初始化为界SEC 的执行有分为两大部分临时 RAM 生效之前称为 Reset Vector 阶段临时 RAM 生效后调用 SEC 入口函数从而进入 SEC 功能区。
其中 Reset Vector 的执行流程如下1.进入固件入口。2.从实模式转换到32位平坦模式。3.定位固件中的 BFVBoot Firmware Volume。4.定位 BFV 中的 SEC 映像。5.若是64位系统从32位模式转换到64位模式。6.调用 SEC 入口函数。
PEI 阶段 PEIPre-EFI Initialization主要功能是为 DXE 准备执行环境将需要传递到 DXE 的信息组成 HOB(Handoff Block)列表最终将控制权转交给 DXE。
从功能上讲PEI 可分为以下两部分
PEI 内核负责 PEI 基础服务和流程。 PEIM 派遣器找出系统中所有 PEIM并根据 PEIM 之间的依赖关系按顺序执行 PEIM。 PEI 执行流程.jpg PEIM 之间的通信通过 PPIPEIM-to-PEIM Interfaces完成。PPI 与 DXE 阶段的 Protocol 类似每个 PPI 是一个结构体包含了函数指针和变量。
UEFI 的一个重要特点是其模块化设计。模块载入内存后生成 Image。PEI 也是一个模块PEI Image 的入口函数为 _ModuleEntryPoint它最终调用 PEI 模块的入口函数 PeiCore。进入 PeiCore 后首先根据从 SEC 阶段传入的信息设置 Pei Core Services然后调用 PeiDispatcher 执行系统中的 PEIM当内存初始化后系统立即进行栈切换并重新进入 PeiCore。
DXE 阶段 DXEDriver Execution Environment阶段执行大部分系统初始化工作执行流程如下图所示
DXE 执行流程.jpg 从功能上讲DXE 可分为以下两部分
DXE 内核负责 DXE 基础服务和执行流程。 DXE 派遣器负责调度执行 DXE 驱动初始化系统设备。 DXE 提供的基础服务包括系统表、启动服务、Run Time Services。
DXE 驱动之间通过 Protocol 通信。Protocol 是一种特殊的结构体每个 Protocol 对应一个 GUID利用系统 BootServices 的 OpenProtocol并根据 GUID 来打开对应的 Protocol进而使用这个 Protocol 提供服务。
BDS 阶段 BDSBoot Device Selection的主要功能是执行启动策略主要功能包括
初始化控制台设备。 加载必要的设备驱动。 根据系统设置加载和执行启动项。 如果加载启动项失败系统将重新执行 DXE dispatcher 来加载更多的驱动然后重新尝试加载启动项。
TSL 阶段 TSLTransient System Load是操作系统加载器OS Loader执行的第一阶段。该阶段内 OS Loader 作为 UEFI 的应用程序运行系统资源仍由 UEFI 内核控制。
TSL 阶段的目的是为 OS Loader 准备执行环境具备操作系统的雏形UEFI Shell 是这个檩式系统的人机交互界面正常情况下不会进入。
RT 阶段 RTRun Time阶段系统的控制权从 UEFI 内核转到 OS LoaderUEFI 占用的各种资源被回收到 OS Loader。
AL 阶段 ALAfter Life阶段如果系统在 RT 阶段遇到灾难性错误就会进入 AL 阶段系统固件提供错误处理和灾难恢复机制。