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开发环境&…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...
