当前位置: 首页 > news >正文

UEFI Spec 学习笔记---3 - Boot Manager(3)

3.2 Boot Manager Policy Protocol

EFI_BOOT_MANAGER_POLICY_PROTOCOL----EFI应用程序使用该协议请求UEFI引导管理器使用平台策略连接设备。

typedef struct _EFI_BOOT_MANAGER_POLICY_PROTOCOL
EFI_BOOT_MANAGER_POLICY_PROTOCOL;
struct _EFI_BOOT_MANAGER_POLICY_PROTOCOL {
UINT64 Revision; EFI_BOOT_MANAGER_POLICY_CONNECT_DEVICE_PATH ConnectDevicePath;//根据DevicepPath来connect 设备
EFI_BOOT_MANAGER_POLICY_CONNECT_DEVICE_CLASS ConnectDeviceClass; //connect 一类型的设备
};

3.3 Globally Defined Variables

本章节主要叙述关于 Variable 的定义。

通过 variable 的 attribute 可以控制 Variable 的访问时期以及生存周期,比如若是 Variable 有 NV 属性,表明这个 variable 是一个非易失性变量,也就是即使断开平台电源,也是可以保存中间的数据(也就是保存在 NVRAM 中,一般有独立的电源:纽扣电池)。在者若是 Variable 有 BS 属性,则表示这个 variable 只能再 EFI_BOOT_SERVICES.ExitBootServices() 调用之前访问,若是 Variable 有 RT 属性,则表明 Variable 可以在 EFI_BOOT_SERVICES.ExitBootServices() 调用之后访问;具有AT属性的变量是第8.2.1节中定义的具有基于时间的身份验证写访问的变量。

所有架构定义的变量都使用EFI_GLOBAL_VARIABLE 来标识,为了避免 name 冲突,其他固件定义的 Variable 需要使用唯一 GUID 来标识。

Table 3-1 Global Variables

3.4 Boot Option Recovery

BootOptionRecovery 由两部分组成,一部分是 操作系统定义的 Recovery,另一部分是平台固件定义的 recovery. 操作系统定义的 Recovery 是尝试恢复所有可能的 boot option,以及完整的操作系统恢复。平台固件定义的定义的recovery 则是最后的恢复手段当没有找到任何操作系统可以恢复时,例如Default Boot Behavior。

如果必须执行引导选项恢复,则引导管理器必须首先尝试操作系统定义的恢复,然后通过boot ####和BootOrder变量重新尝试正常启动,如果没有选项成功,最后尝试平台定义的恢复

3.4.1 OS-Defined Boot Option Recovery

如果 OSIndicators中EFI_OS_INDICATIONS_START_OS_RECOVERY位置起来了,或者处理BootOrder不成功,则平台必须处理操作系统自定义的Recovery选项。在由于OSIndicators而进入os定义的Recovery的情况下,不应处理SysPrepOrder和SysPrep####变量。为了避免意图歧义,如果设置了EFI_OS_INDICATIONS_START_PLATFORM_RECOVERY,则在OSIndicators中忽略该位.

操作系统定义的Recovery使用OsRecoveryOrder变量,以及使用特定于供应商的VendorGuid值和遵循模式OsRecovery####的名称创建的变量。这些变量中的每一个都必须是经过身份验证的变量,并且具有EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS属性.

如果引导管理器在没有调用EFI_BOOT_SERVICES.ExitBootServices()或ResetSystem()的情况下完成处理OsRecovery####选项,它必须尝试第二次处理BootOrder。如果在此过程中引导不成功,则操作系统定义的恢复失败,并且引导管理器必须尝试基于平台的恢复。

如果引导管理器在没有调用EFI_BOOT_SERVICES.ExitBootServices()或ResetSystem()的情况下完成处理OsRecovery####选项,它必须尝试第二次处理BootOrder。如果在此过程中引导不成功,则操作系统定义的恢复失败,并且引导管理器必须尝试基于平台的恢复。

3.5 Boot Mechanisms

EFI可以加载 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL或EFI_LOAD_FILE_PROTOCOL 来选择启动设备启动。支持EFI_SIMPLE_FILE_SYSTEM_PROTOCOL的设备必须抽象出一个文件系统协议才能使该设备可引导。如果一个设备不希望支持一个完整的文件系统,它可以产生一个EFI_LOAD_FILE_PROTOCOL,它允许它直接物化一个映像。Boot Manager将首先尝试加载有 installEFI_SIMPLE_FILE_SYSTEM_PROTOCOL 的设备 handle 进行引导。如果失败,那么将再尝试加载有 install EFI_LOAD_FILE_PROTOCOL 的设备。

3.5.1 Boot via the Simple File Protocol

当通过EFI_SIMPLE_FILE_SYSTEM_PROTOCOL 加载引导时,FilePath将以指向实现EFI_SIMPLE_FILE_SYSTEM_PROTOCOL或EFI_BLOCK_IO_PROTOCOL的设备路径开始。FilePath的下一部分可能指向文件名,包括包含可引导映像的子目录。如果文件名为空设备路径,则必须根据下面定义的规则生成文件名。

如果FilePathList[0]设备不支持EFI_SIMPLE_FILE_SYSTEM_PROTOCOL,但支持EFI_BLOCK_IO_PROTOCOL协议,则必须为FilePathList[0] with调用EFI引导服务EFI_BOOT_SERVICES.ConnectController(),DriverImageHandle和RemainingDevicePath设置为NULL,递归标志设置为TRUE。然后固件将尝试从使用下面列出的算法产生的任何子句柄启动。

文件系统的格式在13.3节中有详细说明。虽然固件必须产生一个理解UEFI文件系统的EFI_SIMPLE_FILE_SYSTEM_PROTOCOL,但任何文件系统都可以用EFI_SIMPLE_FILE_SYSTEM_PROTOCOL接口抽象出来。

struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL {////// The version of the EFI_SIMPLE_FILE_SYSTEM_PROTOCOL. The version/// specified by this specification is 0x00010000. All future revisions/// must be backwards compatible.///UINT64                                         Revision;EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME    OpenVolume;
};
3.5.1.1 Removable Media Boot Behavior

要在FilePath中没有文件名时生成文件名,固件必须以\EFI\BOOT\BOOT{machine type short-name}的形式附加一个默认文件名。EFI,其中机器类型短名称定义了一个PE32+图像格式架构。每个文件只包含一种UEFI映像类型,系统可能支持从一种或多种映像类型启动。UEFI镜像类型如表3-2所示。

3.5.2 Boot via the Load File Protocol

当通过EFI_LOAD_FILE_PROTOCOL协议引导时,FilePath是一个设备路径,它指向一个“说”EFI_LOAD_FILE_PROTOCOL的设备。映像直接从支持EFI_LOAD_FILE_PROTOCOL的设备加载。FilePath的其余部分将包含特定于设备的信息。固件将这个特定于设备的数据传递给加载的映像,但不使用它来加载映像。如果FilePath的剩余部分为空设备路径,则加载的映像负责实现查找正确引导设备.

typedef
EFI_STATUS
(EFIAPI *EFI_LOAD_FILE)(IN EFI_LOAD_FILE_PROTOCOL           *This,IN EFI_DEVICE_PATH_PROTOCOL         *FilePath,IN BOOLEAN                          BootPolicy,IN OUT UINTN                        *BufferSize,IN VOID                             *Buffer OPTIONAL);///
/// The EFI_LOAD_FILE_PROTOCOL is a simple protocol used to obtain files from arbitrary devices.
///
struct _EFI_LOAD_FILE_PROTOCOL {EFI_LOAD_FILE    LoadFile;
};

EFI_LOAD_FILE_PROTOCOL用于不直接支持文件系统的设备。网络设备通常在这种模型中启动,其中映像是固化的也就是直接时对应的 BNP 文件,而不需要文件系统。

3.5.2.1 Network Booting

网络引导由Preboot eXecution Environment(PXE) BIOS支持规范描述,该规范是有线管理基线规范的一部分。PXE指定了启动平台与智能系统负载服务器交互时可以使用的UDP、DHCP和TFTP网络协议。UEFI定义了用于实现PXE的特殊接口。这些接口包含在EFI_PXE_BASE_CODE_PROTOCOL中(参见第24.3节)。

相关文章:

UEFI Spec 学习笔记---3 - Boot Manager(3)

3.2 Boot Manager Policy Protocol EFI_BOOT_MANAGER_POLICY_PROTOCOL----EFI应用程序使用该协议请求UEFI引导管理器使用平台策略连接设备。 typedef struct _EFI_BOOT_MANAGER_POLICY_PROTOCOL EFI_BOOT_MANAGER_POLICY_PROTOCOL; struct _EFI_BOOT_MANAGER_POLICY_PROTOCOL…...

ATTCK红队评估实战靶场(四)

靶机链接:http://vulnstack.qiyuanxuetang.net/vuln/detail/6/ 环境搭建 新建两张仅主机网卡,一张192.168.183.0网段(内网网卡),一张192.168.157.0网段(模拟外网网段),然后按照拓补…...

Android Studio 历史版本下载

Android Studio 历史版本下载 官方链接:https://developer.android.google.cn/studio/archive 通过gradle插件版本反查Android Studio历史版本 Android Studio Ladybug | 2024.2.1 October 1, 2024 【https://redirector.gvt1.com/edgedl/android/studio/ide-zip…...

微信小程序px和rpx单位互转方法

js代码如下 Page({data: {width: 0,width2: 0},onLoad: function (options) {let px this.pxToRpx(380)let rpx this.rpxToPx(730.7692307692307) // 检查两个互转是否是相同即可,例如pxToRpx(380)转成730.7692307692307 则rpxToPx(730.7692307692307)如果是380则代表互转没…...

Vercel 部署与管理指南:简化前端应用的自动化部署流程

引言 在现代的前端开发中,部署和托管项目一直是开发者关注的重要环节。Vercel,作为一个专注于简化前端开发和部署的平台,凭借其强大的自动化功能、全球内容分发网络(CDN)以及对 Next.js 等框架的优越支持,…...

Java11使用JVM同一日志框架启用日志记录

你可以使用-Xlog选项配置或启用Java虚拟机同一日志框架的日志记录。 -Xlog:gc*trace:file/Users/xx/gc-%t.log:time,tags,level,pid,tid,hostname,path:filecount3,filesize10K -Xlog:gc*trace:stdout:time,tags,level,pid,tid,hostname:filecount3,filesize10K -Xlog:gc*trac…...

onlyoffice实现文档比对(Beta版)-纯文字比对(非OCR)

一、说明 文档比对光靠前端或者后端是无法实现的。 该文中的实现方案为:onlyofficejava。java进行文档差异化比较并输出对比结果,only进行得到结果处理渲染。 此方案目前为Beta版本,简单Word Demo实现了比对结果。css、关联动态效果登将在后期…...

JS querySelector方法的优点

1. 灵活性 支持所有 CSS 选择器 ID 选择器:#id 示例:document.querySelector(#myId)解释:选择 id 为 myId 的元素。类选择器:.class 示例:document.querySelector(.myClass)解释:选择具有 class 为 myCla…...

利用获取商品详情API:item_get可以获取到淘宝商品详情的哪些数据?

先来看下测试的返回数据吧 items: { total_results: 76, totalpage: 8, page_size: 10, page: "1", item: [ { rate_content: "和我家的鞋柜特别搭,加上这一条遮挡布,感觉整洁多了,布料不是硬邦邦的那种,很满意。…...

【大数据学习 | 面经】Spark 3.x 中的AQE(自适应查询执行)

Spark 3.x 中的自适应查询执行(Adaptive Query Execution,简称 AQE)通过多种方式提升性能,主要包括以下几个方面: 动态合并 Shuffle 分区(Coalescing Post Shuffle Partitions): 当 …...

[Vue]Vue-router

路由 对前端路由的理解 在前端技术早期,一个 url 对应一个页面,如果要从 A 页面切换到 B 页面,那么必然伴随着页面的刷新。这个体验并不好,不过在最初也是无奈之举——用户只有在刷新页面的情况下,才可以重新去请求数…...

【HarmonyOS】鸿蒙应用使用lottie动画

【HarmonyOS】鸿蒙应用使用lottie动画 一、lottie动画是什么? https://airbnb.design/lottie Lottie是由Airbnb团队开发的一个适用于iOS、Android、React Native、Web和Windows的开源动画库,用于解析使用Bodymovin导出为JSON的Adobe After Effects动…...

1.使用docker 部署redis Cluster模式 集群3主3从

1.使用docker 部署redis Cluster模式 集群3主3从 1.1 先安装docker 启动docker服务,拉取redis镜像 3主3从我们要在docker启动6个容器docker run --name redis-node-1 --net host --privilegedtrue -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-…...

vue基础之8:computed对比watch

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…...

Luban数据插件的用法

配置后数据后,点击图1中的gen.bat文件启动生成配置数据和解析配置数据代码的程序,自动生成配置数据和解析用到的代码;因为我已经 指定了生成内容的输出路径为Unity项目的路径下面,所以,不用再搬运生成的内容到项目目录…...

指针(上)

目录 内存和地址 指针变量和地址 取地址(&) 解引用(*) 大小 类型 意义 const修饰 修饰变量 修饰指针 指针运算 指针- 整数 指针-指针 指针的关系运算 野指针 概念 成因 避免 assert断言 指针的使用 strl…...

张伟楠动手学强化学习笔记|第一讲(上)

张伟楠动手学强化学习笔记|第一讲(上) 人工智能的两种任务类型 预测型任务 有监督学习无监督学习 决策型任务 强化学习 序贯决策(Sequential Decision Making) 智能体序贯地做出一个个决策,并接续看到新的观测,知道最终任务结…...

python脚本:Word文档批量转PDF格式

读取指定文件夹中的所有 .doc 和 .docx 文件,并利用 Word 软件将它们转换为 PDF 格式,并保存在同一个文件夹中,以源文件命名。 请确保你已经安装了 Microsoft Word,并且在运行脚本时关闭了所有正在运行的 Word 实例。运行该程序时…...

性能测试常见面试问题和答案

一、有没有做过性能测试,具体怎么做的 性能测试是有做过的,不过我们那个项目的性能做得不多,公司要求也不严格。一般SE 给我们相关的性能需求,首先我们需要对性能需求进行场景分析与设计,这里,其实主要就是…...

uniapp进阶技巧:如何优雅地封装request实例

在uniapp开发过程中,合理封装网络请求是提高代码质量和开发效率的关键。本文将介绍一种更为优雅的封装方式,通过创建一个request实例来管理不同类型的HTTP请求。 一、准备工作 在开始封装之前,请确保你的项目中已经安装了uniapp开发环境&…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...