组成:
UEFI(统一可扩展固件借口)定义了操作系统和平台固件间的接口,是一种标准。
系统组成:启动服务(BS),运行时服务(RT),和隐藏在BS后的protocol。BS和RT以表的形式存储。
操作系统加载器(OS Loader)->OS Loader执行ExitbootServices()期间是从UEFI环境向操作系统过度的过程。OS Loader可通过BS和RT使用服务,转移计算机资源,此过程称为TSL。OS Loader执行ExitbootServices()之后结束BS并回收BS资源,之后计算机系统进入Runtime阶段。
TSL期间资源通过BS管理,BS提供的服务:
1.事件服务:异步基础
2.内存管理:分配和释放
3.Protocol管理:安装,卸载,注册。
4.Protocol使用类服务:Protocol打开和关闭,查找支持Protocol的控制器。
5.驱动管理:驱动安装和卸载。
6.Image管理:服务加载,卸载,启动,退出。
7.ExitbootServices。
8.其他服务。
RT提供的服务:
1.时间服务:读取,设定系统时间。
2.读写UEFI系统变量。
3.虚拟内存服务:物理地址->虚拟地址。
4.重启系统的ResetSystem,获取系统提供的下一个单调单增值等。
启动过程:
SEC(安全验证)->PEI(EFI前期初始化)->DXE(驱动执行环境)
->BDS(启动设备选择)->TSL(操作系统加载前期)
->RT
->AL(系统灾难恢复期)
前三个阶段为初始化阶段,结束后UEFI环境准备完毕。
BDS和TSL是操作系统加载器作为UEFI应用程序运行的阶段。
操作系统加载器调用ExitBootServices()服务后进入RT阶段,RT阶段包括操作系统加载器后期和操作系统运行期。
阶段详情:
系统加电后进入SEC阶段:此阶段执行以下四种任务:
1.接收并处理系统启动或重启信号。
2.初始化临时存储区域,因为此阶段只有CPU和CPU内部资源被初始化,外设和内存没有,所以需要临时RAM区域。命中时操作,缺失时不产生事件,这种技术称为CAR。
3.作为可信系统的根。
4.传递系统参数给PEI。系统当前状态,可启动固件(BFV)的地址和大小,临时RAM地址和大小,栈的地址和大小。
SEC流程:以临时RAM为界,生效前为Reset Vector阶段,生效后调用SEC入口函数进入SEC功能区。Reset Vector阶段流程:
进入固件入口,从实模式转换到32位平坦模式,定位固件中的BFV,定位BFV中的SEC映像,若为64位系统从32位转化为64位模式,调用入口函数。
进入功能区之后,利用CAR技术初始化栈、IDT、EFI_SEC_PEI_HAND_OFF,控制权转交给PEI。
PEI阶段资源仍十分有限,内存到PEI后期才被初始化,其主要功能是为DXE准备执行环境,将需要传递给DXE的信息组成HOB列表,将控制权转移给DXE。
PEI分为PEI内核(负责基础服务和流程)和PEIM派遣器(根据PEIM依赖关系顺序执行PEIM)。PEIM通信靠PPI完成。
DXE阶段执行大部分系统初始化工作。进入此阶段时,内存可被完全使用,所以可以做大量的复杂操作。DXE分为DXE内核(负责基础服务和流程)和DXE派遣器(调度执行DXE驱动,初始化系统设备)。DXE提供的基础服务包括系统表,启动服务,运行时服务。DXE驱动之间靠Protocol通信,Protocol是一种特殊的结构体,每个对应一个GUID,打开Protocol可使用其提供的服务。
BDS主要执行启动策略。初始化控制台设备,加载必要设备驱动,根据系统设置加载和执行启动项。策略通过NVRAM变量配置,此变量可通过运行时服务的GetVariable读取。变量BootOrder定义了启动顺序。
TSL阶段OSLoader作为第一个UEFI应用程序执行,系统资源仍由UEFI内核控制。其存在目的就是为了OSLoader准备执行环境。
RT阶段系统控制权交给OSLoader。
AL 灾难处理。