0%

UEFI & EDK2 Learning(0)

Lesson 0 of UEFI EDKII Learning Dev

Topic:Legacy BIOS and UEFI

Legacy BIOS & UEFI

Legacy BIOS 定义

Basic input/output system (BIOS) 是定义固件接口并占据支配地位的标准。”Legacy” 在固件规范的上下文,意味着较旧的、广泛使用的规范。

BIOS 的主要指责是配置硬件,加载和启动一个操作系统。当计算机启动时,BIOS 初始化并识别系统设备,包括视频显示卡,键盘,鼠标,硬盘和其它硬件。

BIOS 会定位启动设备的软件,如硬盘或 CD/DVD,加载和执行这些软件,把控制交给处理器。这个进程也被成为”启动”或者”启动自举”。

UEFI 定义

 UEFI 是作为 Legacy BIOS 换为流水线启动过程而替代的,作为操作系统和他的平台固件间的接口。它不仅替代了 BIOS 的大多数功能,也提供了一个可扩展的具有先进启动和运行时服务的富操作系统前执行环境。

UEFI 定义了一个操作系统和平台固件间的软件接口。UEFI 架构允许用户通过命令行执行应用。它具有原生的网络功能,并设计为和多处理器系统一同工作。

UEFIHistory

UEFI 既是一种规范也是一个论坛,根据 www.uefi.org 的描述,UEFI:

  1. 基于 Intel EFI 1.10 规范
  2. 委员会由 11 家领导地位的企业组成,包括:AMD、American Megatrends Inc、Apple、Dell、HP、IBM、Insyde、Lenovo、Microsoft 和 Phoenix Technologies
  3. 它们参与到委员会中,保证 UEFI 规范符合工业界的需求
  4. UEFI 对启动服务和运行时服务提供不同的接口,但并没有规定 Power On Self Test (POST) 和 Setup 如何实现,而这两者是 BIOS 的基本函数

UEFI 在启动过程中的角色是 OS loader 和 BIOS 之间的接口,如下图所示:
UEFI Role in Boot Process

  • 硬件一般指主板上的各种硬件,包括 PCI、PCIe、SATA Connectors、USB Connectors、Monitor Connectors、Keyboard、Mouse 等
  • BIOS 是包含所有其下硬件知识的固件层,一般存储在 ROM 中,CPU 处理器架构重置向量的位置,BIOS 层决定了硬件层如何工作以及硬件元素的个数,并整理成资源列表
  • UEFI 负责配置和产生服务(service)和协议(protocol),可以为其它软件和固件提供接口。接口层提供了基本的到硬件层的通信,并负责初始化和启动系统中的多种设备
  • OS Loader 是一个 UEFI 应用,将加载选定的操作系统轨道内存中,并释放 “exitbootservices” 事件,唤起操作系统。OS Loader 调用 UEFI 接口层提供的协议和服务,从而和下层硬件解藕。当控制权转交给操作系统后,UEFI 接口层只有运行时服务还保持运行。

相似和差异

相似性:

  1. 完成相同的基本任务:作为系统固件、ROM和操作系统间的操作接口
  2. 相同的体积和性能压力:更少的开发时间、更快的启动速度和更少的 Flash 占用
  3. 操作系统中性:与操作系统的种类无关

差异性:

  1. ACPI 和 SMBIOS:访问方式不同

Intel “Framework” and Platform Initialization (PI)

“The Framework” 背景知识

Intel Platform Innovation Framework for UEFI 是权威的符合 UEFI 规范的固件实现。该框架用 C 语言实现,是一组设计提供给固件工业界的鲁棒的架构接口,用以加速创新的、差异化的平台设计。该框架也是 Intel 推荐的 UEFI 参考实现。

随着规范的演进,该框架被替换为更全面的 UEFI 平台初始化(Platform Initialization, PI)规范,作为 UEFI 规范的补充。

UEFI 和 Platform Initialization (PI) 有重大差异。

  1. UEFI 被限制为系统固件和操作系统间的交互接口
  2. PI 规范是设计为包括实现从上电到转交控制权给操作系统的全部固件操作的固件实现规范。

Platform Initialization 背景知识

PI 定义了系统如何从上电到 UEFI 可用状态。PU 也定义了操作系统需要的硬件平台相关的元素,以保持 UEFI 对硬件平台和操作系统的无关性。

换句话说,在 UEFI 与操作系统交互时,UEFI 并不负责内存初始化、恢复或平台初始化,这是平台固件的工作。PI 规范工作在平台基础设施中,约定了如何构建和定义这些操作,以实现启动流程。

PI Role in Boot Process

PI 在启动过程中的角色,如上图所示,启动过程由下至上。

  1. PI 定义了启动过程的不同的阶段,并定义了模块与运行阶段对应的服务和约束
  2. 每个阶段建立在前一个阶段上,直到准备好将控制权转交给操作系统
  3. UEFI 接管 Option ROMs 和操作系统

p.s. Option ROM 用于设备初始化和系统启动的代码,有些保存在板卡上,有些则保存在 BIOS 的 binary 中。

PI Phases Flow

  1. SEC:平台重置或者上电后的第一阶段,用来检验固件完整性 
  2. PEI:EFI 前初始化阶段用来完成基本的处理器、芯片组和平台配置,来发现内存,并配置下一阶段基本环境。PEI 代码传给下一阶段的是 hand-off blocks (HOBs)的列表,描述了 PEI 阶段完成的初始化
  3. DXE:驱动执行环境阶段是启动进程中主要工作发生的部分。设备被枚举和初始化,UEFI 服务被支持,协议和驱动被实现,创建 EFI 接口的表也在该阶段产生。
  4. BDS:启动设备选择阶段负责决定启动的操作系统
  5. TSL:暂态系统加载会在内存中构建操作系统,在该阶段 UEFI 会把控制权交给操作系统
  6. RT:运行时并不在启动过程中,此时操作系统毕竟正常运行
  7. AL:操作系统关闭或重启

p.s. Hand-off Blocks (HOBs) 是预启动早期传递系统信息的关键机制

Extensible Firmware Interface Developer Kit II (EDK II)

EDK 是第一代开源 EFI 开发工具包。EDK 被设计为支持 Windows 开发的功能性解决方案开发环境。

EDK 提供给 Intel 外的用户(没有 Intel 直接证书授权的用户)更鲁棒的开发环境。EDK 由同时开发固件和驱动的公司领导,并最终升级到 EDK II,扩展了多种操作系统和编译器的支持。

EDK II 有两个主要目标,来弥补第一代 EDK 的不足:

  1. EDK II 以 package 的方式组织内容,可以整体添加和移除
  2. EDK II 允许在多种操作系统下编译