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开发环境&…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势
一、WebRTC与智能硬件整合趋势 随着物联网和实时通信需求的爆发式增长,WebRTC作为开源实时通信技术,为浏览器与移动应用提供免插件的音视频通信能力,在智能硬件领域的融合应用已成必然趋势。智能硬件不再局限于单一功能,对实时…...
react更新页面数据,操作页面,双向数据绑定
// 路由不是组件的直接跳转use client,useEffect,useRouter,需3个结合, use client表示客户端 use client; import { Button,Card, Space,Tag,Table,message,Input } from antd; import { useEffect,useState } from react; impor…...
生信服务器 | 做生信为什么推荐使用Linux服务器?
原文链接:生信服务器 | 做生信为什么推荐使用Linux服务器? 一、 做生信为什么推荐使用服务器? 大家好,我是小杜。在做生信分析的同学,或是将接触学习生信分析的同学,<font style"color:rgb(53, 1…...
