UEFI原理与编程(一)

第一章 UEFI概述(Unified Extensible Firmware Interface 统一的可扩展固件接口)

常见缩写及描述:

缩略词全名描述
UEFIUnified Extensible Firmware Interface统一的可扩展固件接口
BSBoot Services启动服务
RTRuntime Service运行时服务
BIOSBasic Input Output System基本输入输出系统

1.2.3 UEFI系统的启动过程

在这里插入图片描述

1 SEC阶段

SEC(Security Phase)阶段是平台初始化的第一个阶段,计算机系统加电后进入这个阶段。功能上说,它执行以下四种任务:

  • 接收并处理系统启动和重启信号
  • 初始化临时存储区域
  • 作为可信系统的根
  • 传递系统参数给下一阶段(即PEI)

如下信息作为参数传递戈PEI的入口函数:

  • 系统当前状态,PEI 可以根据这些状态判断系统的健康状况。
  • 可启动固件(Boot Firmware Volume)的地址和大小。
  • 临时RAM区域的地址和大小。
  • 栈的地址和大小。
2 PEI阶段

PEI(Pre-EFI Initialization)阶段, 其主要功能是为DXE 准备执行环境,将需要传递到DXE 的信息组成HOB(Handoff Block)列表,最终将控制权转交到DXE 手中。
UEFI 的一个重要特点是其模块化的设计。模块载入内存后生成Image。Image 的入口函数为_ModuleEntryPoint,PEI 也是一个模块。

3 DXE阶段

DXE(Driver Execution Environment)阶段执行大部分系统初始化工作,进入此阶段时,内存已经可以被完全使用,因而此阶段可以进行大量的复杂工作

4 BDS阶段

BDS(Boot Device Selection)的主要功能是执行启动策略,其主要功能包括:

5 TSL阶段

TSL(Transient System Load)是操作系统加载器(OS Loader)执行的第一阶段,

6 RT阶段

系统进入RT(Run Time)阶段后,系统的控制权从UEFI 内核转交到OS Loader 手中,
UEFI 占用的各种资源被回收到OS Loader,仅有UEFI 运行时服务保留给OS Loader 和OS
使用。随着OS Loader 的执行,OS 最终取得对系统的控制权。

7 AL阶段

在RT 阶段,如果系统(硬件或软件)遇到灾难性错误,系统固件需要提供错误处理和
灾难恢复机制,这种机制运行在AL(After Life)阶段。UEFI 和UEFI PI 标准都没有定义此阶段的行为和规范。

第二章 UEFI开发环境搭建

略(主要一些工具安装以及编译EDK2, 后续有机会以现实环境为例描述)

第三章 UEFI工程模块文件

标准应用程序工程模块是其他应用程序工程模块的基础,也是UEFI中常见的一种应用程序工程模块。每个工程模块由两部分组成:工程文件和源文件。
在这里插入图片描述

1 .inf 文件

.inf(Module Information File)文件(#后面内容为注释)。.inf 文件是模块的工程文件,其作用相当于Makef ile 文件或Visual Studio 的.proj 文件,用于指导EDK2 编译工具自动编译模块。

工程文件分为很多个块,每个块以 “[块名]” 开头, “[块名]” 必须独占一行。

必须块块描述
[Defines]定义本模块的属性及其他变量,这些变量可在工程文件其他块中引用
[Sources]列出本模块所有的源文件及资源文件
[Packages]列出本模块引用到的所有包的包声明文件,
可能引用到的资源包括头文件,GUID, Protocol等这些资源都声明在文件 .dec中
[LibraryClasses]列出本模块要链接的库模块

非必须块块描述
[Protocols]列出本模块用到的Protocol
[Guids]列出本模块用到的GUID
[BuildOptions]指定编译和链接选项

2 .dec 文件

.dec 文件定义了公开的数据和接口,供其他模块使用。它包含了必需区块[Defines] 以及可选区块[Includes]、[LibraryClasses]、[Guids]、[Protocols]、[Ppis] 和[PCD] 几个部分。
.dec文件需要被调用模块.inf文件所包含。

模块编译生成 .efi 文件, shell 中执行 .efi文件时,Shell首先用gBS->LoadImage() 将 .efi 文件加载到内存生成Image 对象。然后调用gBS->StartImage(Image) 启动这个Image对象(efi 设备路径,命令参数,uefi环境变量 详见EFI_STATUS EFIAPI InternalShellExecuteDevicePath ) 。 StartImage 主要作用就是找出可执行程序映像(Image)的入口函数并执行。,对应用程序来说,就是_ModuleEntryPoint 函数。进入_ModuleEntryPoint(配置在.inf块中的入口函数 ) 后,控制权才转交给应用程序(此处就是我们的 .efi)。

[Defines]块用于提供Package的名称、GUID、版本号等信息。

## /EDK2/MdePkg/MdePkg.dec
[Defines]
  DEC_SPECIFICATION              = 0x00010005
  PACKAGE_NAME                   = MdePkg
  PACKAGE_UNI_FILE               = MdePkg.uni
  PACKAGE_GUID                   = 1E73767F-8F52-4603-AEB4-F29B510B6766
  PACKAGE_VERSION                = 1.06

[Includes]块
列出本Package提供的头文件所在的目录

## /EDK2/MdePkg/MdePkg.dec
[Includes]
  Include

[Includes.IA32]
  Include/Ia32

[Includes.X64]
  Include/X64

3 .dsc文件

.inf 用于编译一个模块, 而.dsc 文件用于编译一个Package,


参考文档: UEFI原理与编程 戴正华 机械工业出版社

### 回答1: UEFI(Unified Extensible Firmware Interface)是一种固件接口标准,用于用于替换传统的BIOS(Basic Input/Output System)固件,旨在提高系统启动速度、安全性和可靠性。 UEFI原理编程完整版PDF是一份详细的技术指南,提供了UEFI开发所需的全部信息,包括如何设计UEFI驱动程序、应用程序和固件,以及如何使用UEFI的各种功能。 这份PDF文件将UEFI划分为四个主要模块:启动服务、管理服务、硬件抽象层和UEFI Shell。每个模块都有详细的描述和示例代码,此外还包含了UEFI的系统架构、数据结构、驱动程序与应用程序的开发方法等内容。 此外,UEFI原理编程完整版PDF还介绍了UEFI与安全性、多核技术、嵌入式系统等方面的关系,并为读者提供了关键的UefiSpec和UefiDebugTools库文档。 总之,UEFI原理编程完整版PDF是一份权威的技术指南,涵盖了UEFI方方面面的内容,非常适合开发人员和工程师学习和参考。 ### 回答2: UEFI(Unified Extensible Firmware Interface)是一种新型的启动编程接口,它替代了旧版的BIOS(基本输入输出系统)。UEFI原理编程可以帮助开发人员理解UEFI的工作原理编程技巧。 UEFI拥有完善的安全性和可靠性,其编程方式也十分灵活。与BIOS相比,UEFI可以支持更多的硬件平台和更大的硬盘容量,同时也可以优化启动速度和程序的执行效率。 UEFI原理编程pdf完整版可以帮助开发人员更好地了解UEFI的概念和架构,并提供丰富的代码示例,帮助开发人员快速掌握UEFI编程技能。除此之外,该书还介绍了UEFI的启动流程、安全策略、UEFI应用的开发和调试等内容,对于想要深入学习UEFI编程的开发人员来说是一本很有价值的参考书。 总之,UEFI原理编程pdf完整版是一本优秀的技术参考书,其内容涵盖了UEFI的方方面面,对于想要深入了解和运用UEFI的开发人员来说具有很高的参考价值。 ### 回答3: UEFI(Unified Extensible Firmware Interface)是一种新型的系统固件接口,它为操作系统与硬件之间提供了一种标准的接口。相比传统的BIOS,UEFI可以支持更多的硬件功能,同时也更加安全和灵活。 UEFI原理主要包括以下几个方面:1、UEFI接口包括了启动管理器,硬件抽象层,运行环境和应用层等模块;2、UEFI支持模块化设计和驱动加载,可以动态地加载和卸载硬件驱动,提高了系统灵活性和安全性;3、UEFI使用GUID Partition Table(GPT)替代MBR分区表,支持更大的硬盘容量和更稳定的系统启动;4、UEFI还支持Secure Boot功能,可以防止恶意程序篡改启动软件和系统文件,提高了系统安全性。 关于UEFI编程,需要掌握以下几个核心内容:1、UEFI开发环境的搭建,需要熟悉UEFI规范以及系统固件接口的程序编写;2、UEFI应用程序的设计和开发,可以利用UEFI提供的应用程序接口(API)或者开发自定义的应用程序;3、UEFI驱动程序的编写,需要掌握UEFI驱动程序的架构和编程模型;4、UEFI启动管理器的开发,需要熟悉UEFI启动管理器的设计和实现。 总之,UEFI是一种新型的系统固件接口,可以为操作系统和硬件提供一个标准的接口,提高系统的安全性和灵活性。对于UEFI编程的学习和掌握,则需要对UEFI规范和程序设计有深入的了解。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值