UEFI的学习

UEFI是从legacy BIOS发展而来,leagcy BIOS主要是汇编语言,而UEFI大部分是C语言,另为有百分之一是汇编和机器码,现在在UEFI code中是加入一个CSM module(里面的AmiLegacy16.bin实际上就是legacy BIOS rom),UEFI是一个技术论坛组织,Aptio是AMi的UEFI产品,Tinao是Inter的UEFI产品,到底还有哪些UEFI产品呢,我也没搞清?哪位大侠知道就给说明一下。

UEFI主要分为4个阶段:

1)SEC,Security的缩写,它是平台信任链的根,

主要完成的是CPU的基本初始化(进入保护模式,MTRR,MP,CAR等),转移到C环境(CAR提供C环境所需要的栈),最后将控制权交给PEI  core,所谓的控制权就是BFV及CAR的Size和Baseaddress(在code中的sdl文件中有定义,CAR的大小与FV_BB相当);

2)PEI:即Pre-EFIInitialization,完成CPU,基本的Chipset的初始化,切换栈从CAR到Memory上(需要disabled CAR,同时enabled cache),决定Boot mode,是normal boot还是Recovery boot或者是S3 resume,对于服务器而言,不需要有待机的sleep status,因此取消了S3 resume,只有S0和S5,最后要做的就是启动DXELPL,它是最后一个PEIM;

PEI阶段需要注意的几个名次:PEI core(主要的PEI执行文件,负责dispatch PEIM且提供基本的服务),PEIM(PEI module),PPI(PEIM to PEIM的Interface,允许一个PEIM去调用另一个PEIM);

PPI有四个常见函数:InstallPPI(安装PPI到PPI LIST),ReinstallPPI,NotifyPPI(PPI第一次被安装后由于条件不满足没有被执行,等条件满足后才再次被调用),LocatePPI(查找PPI);

3)DXE:Run所有的DXE Drivers,使其进入准备状态,(DXE阶段的Driver与Chipset的初始化相关,建立并提供EFI框架的主要界面),Bind EFI1.1 Driver(在BDS阶段才会被用到,一般先挂在系统上,到BDS阶段用到的时候才根据需求connect到device handle上);检查Architecture Protocols是否都安装(在DXE阶段install protocols和invoke protocols),启动BDS;

DXE阶段的kernel和硬件没有关系;

4)BDS:启动必要的驱动程序(PCI设备的遍历,并为遍历的设备加载oprom,如VGA、PXE、RAID等,boot device的初始化),进入Setup,选择要boot的OS device(UEFI OS还是legacy OS),

SEC和PEI的code(在ROM中的位置是FV_BB)没有被压缩,code在rom上执行,执行效率低,因此code越短越好;

DXE和BDS的code(在ROM中的位置是FV_MAIN)是被压缩的,code须解压在memory上执行(memory已被完全初始化,可以使用所有的memory资源)




你可能感兴趣的:(UEFI,BIOS)