UEFI初识简介

UEFI初识简介

1、UIEFI介绍:
UEFI,全称“统一的可扩展固件接口”(Unified Extensible Firmware Interface):
是一种详细描述类型接口的标准。这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上。它方便在硬件发生变更时固件能提供足够的信息保证OS不受影响,包含芯片组和外设芯片驱动程序,通过系统表提供引导时服务和运行时服务。
相比Bios优点:
启动速度和恢复速度快
保护启动,安全性高
模块化设计
支持驱动器容量大,可超2.2TB
1.1、UEFI使用模块化设计,它的逻辑分为硬件控制和OS操作系统软件管理:
硬件—>固件—>UEFI可扩展固件接口—>OS
1.2、UEFI根据它的概念可分为两大部分:
Image(uefi实体)和platform(平台初始化标准框架PI)
Uefi image主要包含三部分
Uefi application:硬件初始化完,操作系统启动前的核心应用,比如:启动管理、uefi shell、诊断、调度和调试等。
OS Loaders:特殊的uefi application,主要是启动操作系统并退出和关闭uefi应用。
Uefi Drivers:提供设备间接口协议,每个设备独立运行提供设备版本号和相应的参数以及设备间关联,不再需要OS的支持。
平台初始化框架主要包含两部分:
PEI:EFI预初始化,用来检测启动模式、加载主存储器初始化模块、检测和加载驱动执行环境核心
DXE:驱动执行环境(不符合uefi标准的驱动),提供了设备驱动和协议接口环境界面

2、Uefi启动阶段介绍:
在这里插入图片描述uefi系统结构层次

在这里插入图片描述uefi启动的7个阶段

2.1、SEC(安全验证Security-Set up Temp memory)
接收和处理系统的启动、重启、异常信号
平台初始化机构起始阶段让硬件平台进入运行C代码的状态
Cache as ram 在Cache上开辟一段空间作为内存使用,因此此时内存还没有初始化, C运行还需要内存和栈空间
传递系统参数给PEI阶段
处理可弃用的固件的地址和大小

2.2、PEI(EFI前期初始化和Pre-EFI-Initialize memory)
紧随SEC阶段,平台处于初始化状态初期,仅有片内资源cache/sram,调度PEIM (pei mpdule)执行,主要为DXE阶段准备执行环境,主要做CPU的硬件初始化,最主要的是内存的初始化,将DXE所需的信息在HOB(Hand-off-blocks,PEI阶段发现的所有资源信息)列表的形式进行封装传递给DXE阶段

2.3、DXE(驱动执行环境 Driver Execution -Dispatch List of UEFI/DXE Drivers)
执行系统的大部分驱动初始化工作,在DXE阶段已有足够的内存使用,DXE在主存中执行,因此可以完成大量的驱动加载和初始化工作,遍历固件中的所有driver,当driver所依赖的资源都满足要求时,调度driver到执行队列中执行,直到所有的driver都被加载和执行完毕系统初始化完成

2.4、BDS(启动设备选择Boot Device Selection -run Setup)
BDS和DXE一起工作,从预设和用户选择的设备启动操作系统,BDS之后控制权交给了操作系统,主要初始化控制台设备,加载执行必要的设备驱动,根据用户的选择执行相应的启动项

2.5、TSL(操作系统加载前期)
OS Loader执行的第一个阶段,为OS Loader准备执行环境,OS Loader调用ExitBootService结束启动服务进入RunTime服务

2.6、RT(运行时服务)
Os Loader已经完全取得了系统的控制权,因此清理回收一些之前被uefi占用的资源,RunTime随着操作系统的运行提供运行时服务,这期间一旦出现错误和异常就进入AL进行修复

2.7、AL(灾难回复)
根据厂家自定义修复方案,uefi标准未进行规定

3、Uefi设计结构:(后面细讲)

3.1、Protocol (协议):
就是一个uefi标准定义的结构体

3.2、Handle(句柄):
就是一个逻辑设备一个handle可以挂多个protocol

3.3、Guid(唯一标识):
protocol生成的一个唯一标识,国际唯一,生成网站 https://www.guidgen.com/

3.4、Uefi主要以包(package)和模块(module)划分:
一个包下可以有多个模块,每个模块中都有inf工程配置文件来编译模块,有dec文件声明对外公开的数据和接口,若是这个包要独立编译,要有dsc描述文件来生成固件image,也是由这个文件的描述来决定image中所需模块来启动image,一个image文件代表一个模块, 在镜像中要编译这模块就将它加到编译文件的dsc和fdf中

3.5、Inf:
用于编译一个模块可执行文件.efi

3.6、Dsc:
用于编译一个包

3.7、Dec:
文件定义了公开的数据和接口给你个其他模块使用

3.8、Fdf:
用于生成固件imageoptionromimage或可以启动image它是构成uefgi二进制(镜像)
的描述符

4、uefi的一些服务

4.1、Boot Services;(启动服务)
从操作系统加载器(OS Loader)被加载到OS Loader执行
ExitBootServices()这段时间是从uefi环境向操作系统过渡的过程,这个过程是TSL(Transient System Load)
在TSL阶段,系统资源通过Boot Service管理,Boot Service提供如下服务:

事件服务:
事件是异步操作的基础,有了事件的支持,才可以在uefi系统内执行并发操作

内存管理:
主要提供内存的分配和释放,管理系统内存映射

Protocol管理:
安装和卸载Protocol的服务,以及注册Protocol通知函数的服务

Protocol使用类管理:
Protocol的打开关闭,查找支持Protocol的控制器;例如要读写某个PCI设备的寄存器,可以通过OpenProtocol服务打开这个设备上的PciloProtocol,用Pcilo->io.Read()服务可以读取这个设备的寄存器

驱动管理:
包括蒋驱动安装到控制器的connent服务,以及将驱动从控制器上卸载的disconnent服务。例如启动时,我们需要网络支持,则可以通过LoadImage将驱动加载到内存,然后通过connent服务将驱动安装到设备

Image管理:
包括加载、卸载、启动和退出uefi应用程序或驱动

ExitBootServices服务:
结束启动服务

4.2、Running Service:(运行时服务)
时间服务:
读取设定时间。读取设定系统从睡眠中唤醒的时间

读写uefi系统变量:
读取设置系统变量,如BootOrder用于指定启动顺序,通过这些系统变量可以保存系统配置

虚拟内存服务:
将物理地址转换成虚拟地址

其他服务:
包括启动系统的ResetSystem等

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值