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

UEFI Boot Manager

简介

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。

http://www.gsyq.cn/news/47942.html

相关文章:

  • noip6 多校1
  • 通过开发环境部署工具安装qt相关c++开发环境
  • 模式识别与机器学习课程笔记(11):深度学习 - 详解
  • Python字符串常用操作速查表(全面版v1.0 - 2025年11月12日修订)
  • 05.创建型 - 简单工厂模式(Simple Factory Pattern)
  • RabbitMQ延迟队列rabbitmq_delayed_message_exchange
  • Mac安装Visual Studio 2019.dmg详细步骤(附图解,小白也能懂,附安装包)
  • Polygon:从入门到入门
  • Linux C/C++ 学习日记(27):KCP协议(三):源码分析与使用示例 - 实践
  • 麒麟桌面系统2503安装openjdk21
  • E. Journey
  • Linux优秀的系统--信号(3--信号的保存、阻塞)
  • 深入解析:SQL提数与数据分析指南
  • 大家来写 ICPC 西安(没写完)
  • 你的代码正在腐烂!你的团队正走在死亡螺旋上:技术债务积累的5个危险信号!
  • 使用WiX创建Windows应用安装包 - -YADA
  • 学生信息管理系统团队项目随笔
  • 第八天 测试用例编写
  • 没用的博客园页面的要素介绍
  • 结婚证识别科技:利用OCR和深度学习实现婚姻证件信息的自动提取与结构化处理
  • BOE(京东方)荣获第四届“纪念彼得德鲁克中国管理奖” 创新管理模式获权威认可
  • 青少年电子设计比赛培训笔记3
  • 使用rpmbuild将源代码制成rpm包
  • 【LVGL】进度条部件
  • Vue插值表达式
  • 好题集 (1) - LG P3978 [TJOI2015] 概率论
  • 路由基础
  • idea链接database时报错:serverTimezone
  • 题解:CF2117F Wildflower
  • UVM环境自动生成器具(2)uvmdvgen