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

相同点

  1. 完成相同的任务:作为系统固件,可选的ROM以及操作系统之间的公共接口
  2. 相同的大小和性能压力:
  3. 操作系统无关性: 可以与多种操作系统一起工作

不同点

  1. 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规范的不同点

  1. UEFI限于用于操作系统和系统固件之间交互的编程接口
  2. PI规范是一种固件实现,旨在执行初始化平台所需的全部操作,从上电到包控制权移交给操作系统

UEFI Platform Initialization(PI)规范的介绍

UEFI Platform Initialization(PI)规范定义:

  1. PI规范定义了系统如何从开机进入UEFI可行的状态
  2. PI还定义了未包含在UEFI规范中的操作系统所需的其他特定于硬件平台的元素
  3. UEFI与操作系统对话时,UEFI不处理内存初始化,恢复或平台初始化,这是Platform firmware的角色。
  4. PI规范适用于基础架构,接收用户构建的组件,然后定义它们如何正确交互去实现boot process

PI在boot process中的角色

Booting的过程并不是线性的,下图是一个简单的例子。在这个图中顺序是从下到上工作的。

  1. PI为引导过程定义了不同的阶段。 PI为在该阶段运行的模块定义服务和约束
  2. 每个阶段都建立在前一个阶段之上,直到系统为操作系统做好准备为止
  3. 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开发工具,主要有两个主要目标:

  1. EDK II将内容组织为整块(也称为“包”),将其整体添加和删除

  2. 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显示可选数据。

本文标签: 历史UEFIbios