惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
NISL@THU
NISL@THU
Know Your Adversary
Know Your Adversary
The Hacker News
The Hacker News
D
Docker
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
罗磊的独立博客
A
Arctic Wolf
P
Privacy International News Feed
Google DeepMind News
Google DeepMind News
Spread Privacy
Spread Privacy
B
Blog
A
About on SuperTechFans
L
LINUX DO - 最新话题
博客园 - 司徒正美
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
W
WeLiveSecurity
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Google DeepMind News
Google DeepMind News
aimingoo的专栏
aimingoo的专栏
T
The Exploit Database - CXSecurity.com
美团技术团队
J
Java Code Geeks
Cloudbric
Cloudbric
雷峰网
雷峰网
Vercel News
Vercel News
P
Proofpoint News Feed
Webroot Blog
Webroot Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
G
Google Developers Blog
T
Tenable Blog
PCI Perspectives
PCI Perspectives
Engineering at Meta
Engineering at Meta
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
H
Hackread – Cybersecurity News, Data Breaches, AI and More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
C
Cybersecurity and Infrastructure Security Agency CISA
S
Secure Thoughts
N
News and Events Feed by Topic
GbyAI
GbyAI
S
SegmentFault 最新的问题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

博客园 - yooooooo

ftraceoption irq-info MPAM BE/ FE 的区别及功能 【ARM CoreLink 系列 5 -- CI-700 控制器介绍 】 ARM CoreLink 系列 4.3 -- NI-700 Component and interface identifiers ARM CCI-500 与 NI0700 的关系. ARM NIC-400 与 NI-700 的区别 claude code命令使用 【ARM Trace32(劳特巴赫) 使用介绍 2.2 -- TRACE32 进阶命令之 DIAG 弹框命令】 trace32 .cmm脚本和.t32文件的区别 【ARM Trace32(劳特巴赫) 使用介绍 2.1 -- TRACE32 Practice 脚本 cmm 脚本学习】 【ARM Trace32(劳特巴赫) 使用介绍 1.1 - Veloce 环境中使用trace32 连接 Cortex-M33】 PCIe 总线的 ASPM 和 链路状态机制总结 fw_devlink 功能 I3C协议详解 UART 协议规范 BPF 调度器 sched_ext 实现机制、调度流程及样例 Android Camera性能分析 录像Buffer Path详解 【UEFI基础】Protocol介绍 【UEFI实战】在库中使用全局变量 sched feature TTWU_QUEUE 【ARM CoreLink 系列 4.2 -- NI-700 Function units 详细介绍】 edk2构建编译流程 UEFI:FDF文件及FD、FV、FFS EDK II PCD的概念、类型、使用 PELT算法浅析 load_balance函数代码详解 Linux misfit task Linux 内核中sched_prio_to_weight转换关系 CFS任务放置代码详解 CFS任务的负载均衡(load balance)
UEFI Boot Manager
yooooooo · 2025-11-12 · via 博客园 - yooooooo

简介

UEFI boot manager是一个固件方针引擎,它可以通过修改global NVRAM 变量来配置;它会按照global NVRAM variable 定义的顺序来加载UEFI driver or UEFI application。当固件初始化完成,就会把控制权交给boot manager,boot manager然后来负责决定加载。

UEFI包含启动顺序内容如下:

  1. 从globa NVRAM 变量中读取boot order list,修改这个变量在下一次reset后生效;boot order list定义了一个NVRAM 顺序变量表,包含了启动的信息;每一个NVRAM 变量定义了启动选项的名称;
  2. NVRAM 变量也包含指向硬件设备及其文件的指针,包含要加载的UEFI image
  3. 变量还要包含操作系统分区和目录的路径以及其他配置特定目录

一. 相关Global variables

1

NVRAM中每个变量名为Boot####,####十六进制数;BootOrder 定义了启动顺序,其中值为####;BootNext 定义了下一次启动的第一启动项,它与BootCurrent的数据均为####。

二.Variable数据结构

利用Getvariable()获取NVRAM中load option信息,Setvariable()则可以改变信息,变量名为“Boot####”,数据结构为EFI_LOAD_OPTION。

2

EFI_LOAD_OPTION:

typedef struct _EFI_LOAD_OPTION {
UINT32 Attributes;
UINT16 FilePathListLength;
// CHAR16 Description[];
// EFI_DEVICE_PATH_PROTOCOL FilePathList[];
// UINT8 OptionalData[];
} EFI_LOAD_OPTION;

Attributes: 即option属性,如果一个option mark as Active,boot manager 会尝试从此设备路径boot,这样就可以简单的进行enable/disable boot option;

如果属性为Hidden,那么option会隐藏

3

FilePathListLength:表示后面FilePathList 数据长度

Description:用户可看的load option描述,一般就是我们可以看到的boot 设备名称,以“0000”结尾

FilePathList:可以看到其结构为EFI_DEVICE_PATH_PROTOCOL,因此是一组UEFI device path 数组,第一个路径元素来描述设备和这个load option image的位置

4

OptionalData[]:预留数据区

三. 启动机制

EFI 可以从一个支持EFI_SIMPLE_FILE_SYSTEM_PROTOCOL 或者 EFI_LOAD_FILE_PROTOCOL 的设备启动。如果一个设备支持EFI_SIMPLE_FILE_SYSTEM_PROTOCOL,它必须实现文件系统协议,才能可启动;如果一个设备不想支持完整的文件系统,它可能会产生一个EFI_LOAD_FILE_PROTOCOL,用于直接启动镜像;Boot Manager 会尝试先用EFI_SIMPLE_FILE_SYSTEM_PROTOCOL启动,如果fail,会再用EFI_LOAD_FILE_PROTOCOL。

一般HDD,USB等Media设备采取file system 模式boot,它们的FilePath 中包含了file name 以及boot image。当一个设备没有完整的file system,它会加载EFI_LOAD_FILE_PROTOCOL来使boot image具体化,Network device一般用这种模式boot 因为它的boot image 不需要file system。