UEFI原理与编程(一)

news/2024/9/19 15:41:24/文章来源:https://www.cnblogs.com/linhaostudy/p/18406740

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

常见缩写及描述:

缩略词 全名 描述
UEFI Unified Extensible Firmware Interface 统一的可扩展固件接口
BS Boot Services 启动服务
RT Runtime Service 运行时服务
BIOS Basic Input Output System 基本输入输出系统

1. UEFI系统的启动过程

image

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中常见的一种应用程序工程模块。每个工程模块由两部分组成:工程文件和源文件。
image

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              = 0x00010005PACKAGE_NAME                   = MdePkgPACKAGE_UNI_FILE               = MdePkg.uniPACKAGE_GUID                   = 1E73767F-8F52-4603-AEB4-F29B510B6766PACKAGE_VERSION                = 1.06

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

## /EDK2/MdePkg/MdePkg.dec
[Includes]Include[Includes.IA32]Include/Ia32[Includes.X64]Include/X64

3 .dsc文件

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/795025.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SparkSQL练习:对学生选课成绩进行分析计算

题目内容: 对学生选课成绩进行分析计算题目要求: (1)该系总共有多少学生; (2)该系共开设来多少门课程; (3)每个学生的总成绩多少; (4)每门课程选修的同学人数; (5)每位同学选修的课程门数; (6)该系DataBase课程共有多少人选修; (7)每位同学平均成绩;数据…

面试-JS基础知识-原型和原型链

JS本身是基于原型来继承的语言。 问题引出:如何判断一个变量是不是数组? 手写一个简易的jQuery,考虑插件和扩展性 class的原型本质,怎么理解?知识点class和继承 类型判断 instanceof 原型和原型链class class相当于一个模版,可以用来构建(constructor)东西。 class Stu…

作业9.2:论文查重

这个作业属于哪个课程 班级链接这个作业要求在哪里 作业要求链接这个作业的目标 设计论文查重算法;学会 Git 版本控制。Github 链接:博客正文首行 github 链接 目录一、整体设计开发环境整体设计项目结构二、模块接口的设计与实现核心的类与方法类与函数的调用关系核心算法三…

搭建企业内部的大语言模型系统

大纲开源大语言模型 大语言模型管理 私有大语言模型服务部署方案开源大语言模型 担心安全与隐私?可私有部署的开源大模型商业大模型,不支持私有部署ChatGPT Claude Google Gemini 百度问心一言开源大模型,支持私有部署Mistral Meta Llama ChatGLM 阿里通义千问常用开源大模型…

115. 不同的子序列(leetcode)

https://leetcode.cn/problems/distinct-subsequences/submissions/563375885/ 这题比较有难度,具体不太好想到,需要以是否选择s[i]来划分子集这位描述的很清楚,不做过多赘述 class Solution {public int numDistinct(String s, String t) {// f[i][j]表示s中前i个字符中选择,有…

0.1+0.2 != 0.3 (Java为例)

1. 小数的二进制表示 以10.625为例。整数部分进行除2取余的操作,10的二进制为1010。小数部分进行乘2取整操作,直到小数部分为0或达到需要的精度:0.625*2=1.25 取整数1,小数部分0.25继续计算 0.25*2=0.5 取整数0,小数部分0.5继续计算 0.5*2=1.0 取整数1,小数部分为0,停止…

信创领域认证,来自工信部人才交流中心的PostgreSQL培训班

在国家大力发展信创软件和数据库行业的背景下,PostgreSQL 具有多方面的优势和机遇,具体体现在以下几个方面: 1. 技术优势契合信创需求: PostgreSQL 数据库是一个功能强大、性能稳定、可扩展性强的开源对象关系数据库系统,支持多种数据类型(如数组、JSON、XML 等),方便存储…

Salesforce职业规划:原厂,甲方,乙方,从业者应该如何选择?

Salesforce生态系统蓬勃发展,对不同角色的需求量不断增加。需求方包括使用Salesforce的最终用户(甲方)、实施Salesforce的咨询公司、为Salesforce创建应用程序的AppExchange公司(或ISV),当然还有Salesforce原厂。 Salesforce最终用户(甲方) 2020年,Salesforce的客户数…

3SRB5016-ASEMI三相整流桥3SRB5016

3SRB5016-ASEMI三相整流桥3SRB5016编辑:ll 3SRB5016-ASEMI三相整流桥3SRB5016 型号:3SRB5016 品牌:ASEMI 封装:3SRB-5 批号:2024+ 现货:50000+ 最大重复峰值反向电压:1600V 最大正向平均整流电流(Vdss):50A 功率(Pd):大功率 芯片个数:5 引脚数量:5 安装方式:直插 类…

34-样式迁移

类似于加了一层滤镜基于CNN的样式迁移:如下对于合成图片X,我们希望它的内容和输入的内容图片,放入同一个CNN,在某一个卷积层上,输出的与内容有关的特征能够匹配 同时,,对于样式图片,我们希望合成图片X,和样式图片放入同一个CNN,在某一个卷积层上,输出的与样式有关的…

STM32-ADC外设

1.通道 .规则通道 .注入通道 2.规则序列寄存器 配置通道的采样顺序 3.ADC周期4.ADC转换方式 *单次转换:adc每次只采集某个通道的一个点,如果需要再次采集,就需要重新使能。 *连续转换:adc采集某个通道一个点,转换完成后,再采集第二点。依次类推 4.扫描模式 *单次扫描模式…

SignalR跨域问题解决

本文来自博客园,作者:WantRemake,转载请注明原文链接:https://www.cnblogs.com/SmallChen/p/18406437