admin管理员组文章数量:1619183
Legacy BIOS’ background
Legacy BIOS的定义:BIOS的主要作用就是设置硬件,加载启动操作系统。当计算机启动的时候,BIOS初始化并辨认系统设备,包括video display card, keyboard, mouse, hard disk drive和其他硬件。然后,BIOS会找到启动设备上保留的软件,把设备的控制交给计算机(booting or boot strapping)。
Legacy BIOS可以引导不同的操作系统,它定义了一套与操作系统无关的硬件接口,通过BIOS ROM loader和 Bootstrap loader去使能中断和video, disk, keyboard服务进行通信。
Unified Extensible Firmare interface’s(UEFI) background
Uefi是用来代替Legacy BIOS的服务。除此之外,uefi还提供了其他的一些高级功能,具有网络功能,支持多核系统
uefi在启动流程中的角色
hardware: 分两类,一指的就是主板上的物理组件;二指一些IO设备
BIOS: 是具备底层硬件所有知识的固件层,一般以处理器体系架构中的Reset Vector的形式保存在ROM中。在该层中,主要确定了两点,一是硬件(主板)是如何工作的;二是硬件(主板)上有多少组件。BIOS配置了硬件之后,加载和启动OS
UEFI: 这一层主要是为其他软件或者固件建立服务的。该接口层提供了到硬件层的基本通信,以便其他组件进行通信以初始化和启动系统中的各种设备层
OS Loader: 作为UFEI应用,会把被选择的操作系统加载到内存中,发送exitbootservice事件。该应用会调用UEFI接口层提供的协议和服务,所以是不依赖底层硬件的
Similarities and differences of Legacy BIOS and UEFI
相同点
- 完成相同的任务:作为系统固件,可选的ROM以及操作系统之间的公共接口
- 相同的大小和性能压力:
- 操作系统无关性: 可以与多种操作系统一起工作
不同点
- ACPI and SMBIOS:
UEFI的发展历史
the Framework’s background
Framework(the intel Platform innovation framework): 是intel依照UEFI规范实现的一套框架
Platform Initialization’s background
现在Framework被UEFI Platform Initialization(PI)规范取代了
UEFI Platform Initialization(PI)规范与Framework规范的不同点
- UEFI限于用于操作系统和系统固件之间交互的编程接口
- PI规范是一种固件实现,旨在执行初始化平台所需的全部操作,从上电到包控制权移交给操作系统
UEFI Platform Initialization(PI)规范的介绍
UEFI Platform Initialization(PI)规范定义:
- PI规范定义了系统如何从开机进入UEFI可行的状态
- PI还定义了未包含在UEFI规范中的操作系统所需的其他特定于硬件平台的元素
- UEFI与操作系统对话时,UEFI不处理内存初始化,恢复或平台初始化,这是Platform firmware的角色。
- PI规范适用于基础架构,接收用户构建的组件,然后定义它们如何正确交互去实现boot process
PI在boot process中的角色
Booting的过程并不是线性的,下图是一个简单的例子。在这个图中顺序是从下到上工作的。
- PI为引导过程定义了不同的阶段。 PI为在该阶段运行的模块定义服务和约束
- 每个阶段都建立在前一个阶段之上,直到系统为操作系统做好准备为止
- UEFI接管以支持Option ROM和OS
启动服务做的事情
Power on
Platform initialization phase
PEI Foundation包括SEC和PEI两个阶段
1. SEC(security):
这是平台重置或上电后的第一阶段,以确保固件完整性完好。SEC阶段的代码是依赖于平台和处理器的架构的。SEC阶段需要做的事情
- Restart: SEC负责处理所有平台重启事件
- Temporary Memory Store: SEC负责创建一个暂时的内存存储
- Root of Trust: SEC是系统信任的基础,并包含控制系统的初始代码。 该代码可以选择对PEI Foundation进行身份验证
- Passing: SEC负责将控制权交给PEI Foundation
2. PEI(Pre EFI Initialization):
PEI阶段的主要目的是进行必要的处理器,芯片组和平台配置,以初始化内存。PEI阶段是为下一阶段建立基础环境,使得DXE阶段可能运行在C环境中。
Reset: PEI使用重置,INIT和机器检查体系结构(MCA)。 在ltanium上,重置进入调用固件的处理器抽象层。 入口点涉及一个INIT,它会重置处理器
Start-up: PEI阶段是一个很小的紧凑启动代码,因为它代替ROM执行。 工具允许模块化驱动程序位于绝对地址。 地址是直接执行的,因为它们是通过使用构建工具来解析的
Support: PEI在即将推出的intel架构处理器中利用了新的架构支持,使您可以更接近C进行重置。由于C需要堆栈,因此需要可用的临时内存
Modules: 核心定位,验证,调度和执行PEI模块(PEIM)-在PEI中运行并支持芯片组或平台功能的固件代码的模块化块
Publish: PEI通过PEIM-to-PEIM接口发布自己的协议和调用虚拟接口。
Goals: PEI的主要目标是发现启动模式。 启动初始化主存储器的模块; 发现并启动DXE核心; 并将平台信息传达到DXE
在进入下一阶段时,PEI代码就消失了。为了传递PEI设置好的一些配置,使用了HOB(hand-off blocks)机制。传递到下一阶段的唯一内容是描述在PEI阶段完成的初始化的HOB列表
为什么要使用PEI
-
在没有内存的情况下编写代码具有挑战性
-
此外,旧版代码被手动编码为不同的寄存器规则,许多BIOS供应商使用不同的IA32寄存器来保存相关信息。 例如,一个BIOS供应商可能使用EBP进行存储,而另一个可能使用EBX,这使得在该环境中移植代码非常困难。
-
使用PEI的另一个原因是,您希望拥有最快的内存初始化和基本芯片组初始化路径。 同样,PEI阶段在S3,从睡眠恢复和恢复阶段中也起着主要作用。
PEI Outline
功能:
-
发现并初始化一些RAM,这些RAM之后不会被重新映射了
-
描述包含DXE Core和Architecture Protocols的firmware volumes的位置
-
描述仅PEI知道的其他固定的,特定于平台的资源
PEI’s initial memory
PEI Core的最低要求是少量的临时内存。 数量取决于处理器和芯片组。 对于IA32示例实现,您只需要8K。
Memory map
BFV(Boot Firmware Volume): 是保存PEI代码的地方,也被称为"recovery block"
FV(Firmware Volume): 固件卷是组织到文件系统中的固件数据和/或代码的逻辑存储库。 每个固件卷均具有PI规范第3卷:共享架构元素中定义的属性。
T-RAM: PEI使用的暂时的内存,系统内存初始化之前堆栈和数据区域的位置
3. DXE(Driver Execution Environment):
DXE阶段是启动过程的主要部分,包括枚举和初始化设备;支持UEFI服务;实现协议和驱动程序。在这个阶段也生成了EFI接口的表
4. BDS(Boot Dev Select):
BDS阶段负责确定启动操作系统的方式和位置
OS boot phase
5. TSL(Transient System Load):
TSL是构建操作系统的过程。 这是UEFI将控制权转移到OS本身的阶段
6. RT(Run Time):
RT在引导阶段之外执行;操作系统以其正常操作模式运行
Extensible Firmware Interface Developer Kit(EDK)
EDK是第一代开源的EFI开发工具。仅仅支持Windows的开发
EDK为intel之外的用户(与intel没有直接的许可协议)提供了更强大的开发环境。
EDK针对开发固件和驱动程序的公司
EDK最终升级为EDK II,从而扩展了构建环境,以支持多个操作系统和编译器。
The EFI Developer Kit II
EDK II是第二代EFI开发工具,主要有两个主要目标:
-
EDK II将内容组织为整块(也称为“包”),将其整体添加和删除
-
EDK II允许在多种操作系统下进行编译,包括Windows,Linux / Unix和Apple OS / X
EDK II是一个易于使用的开发环境,它将帮助您使用商业编译器,提供自托管开发,并提供库来协助管理常见任务。
EDK II 支持的调试
EDK II允许四种类型的调试
-
源码级的调试:源代码级别以“ C”为基础,允许通过硬件仿真器和软件代理调试组件和应用程序
-
Debug Text Option: 允许将格式化的文本打印到控制台和/或串行流; 可以在EFI之前(PEI)阶段的早期以及所有驱动器执行环境(DXE)阶段使用。
-
Assertions: 查找条件时,该软件可以生成断言-强制声明消息和数据,并可以用于:
1.发现错误的先前事件和情况
2.帮助理解导致错误的事件 -
Status Code:状态代码允许记录进度,错误和调试代码。 并且,从Port80显示可选数据。
版权声明:本文标题:从Uefi的历史开始------BIOS和Uefi 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1728792531a1173855.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论