【UEFI Spec笔记】Boot Manager 您所在的位置:网站首页 uefi规范 【UEFI Spec笔记】Boot Manager

【UEFI Spec笔记】Boot Manager

2024-05-29 12:38| 来源: 网络整理| 查看: 265

文章目录 Boot Manager一、Firmware Boot Manager1. Boot Manager 设计2. Load Option 流程3. Load Options4. Boot Manager 功能 二、Boot Manager Policy Protocol三、Globally Defined Variables四、Boot Option 恢复五、Boot 机制总结

Boot Manager

UEFI Boot Manager是一个固件策略引擎,Boot Manager按照全局NVRAM变量定义的顺序加载UEFI drivers程序和UEFI applications程序(包括UEFI OS boot loaders)。

1.boot order list 定义了一个NVRAM变量列表,其中包含关于要引导的内容的信息。 2.每个NVRAM变量为可以显示给用户的启动选项定义了一个名称。 3.该变量还包含一个指向硬件设备和硬件设备上包含要加载的UEFI映像的文件的指针。 4.该变量还可能包含到OS分区和目录的路径,以及其他特定于配置的目录。

一、Firmware Boot Manager 1. Boot Manager 设计

因为boot manager是从nvram里面获取的启动项列表,所以可以通过Setvariable()修改。

每个加载选项条目都位于Boot####、Driver####、SysPrep####、OsRecovery####或PlatformRecovery####变量中,其中####由一个可打印的十六进制数字(0-9)和字符a - f的大写版本替换(0000-FFFF)。

DriverOrder是Driver####加载顺序。BootOrder是Boot####加载顺序。

可以通过添加、删除或修改Boot####去操作新的引导选项,BootOrder也会更新顺序。

Boot manager会根据BootOrder顺序去load启动项,如果load失败,则按顺序load下一个,如果返回EFI_SUCCESS则load进启动项。

Secure Boot会影响Boot manager行为。

2. Load Option 流程

Boot manager需要在启动加载选项项之前处理驱动程序加载选项项。

如果在osindicators中设置了EFI_OS_INDICATIONS_START_OS_RECOVERY位,则固件将尝试操作系统定义的恢复(参见3.4.1节),而不是正常的启动处理。如果在osindicators中设置了EFI_OS_INDICATIONS_START_PLATFORM_RECOVERY位,固件将尝试平台定义的恢复(见3.4.2节),而不是正常的引导处理EFI_OS_INDICATIONS_START_OS_RECOVERY位的处理。在任何一种情况下,两个比特都应该被清除。

Boot manager会先引导BootNext启动项,引导失败才会使用BootOrder列表,在将控制转移到预选的引导选项之前删除BootNext。

Boot manager如果LoadImage()成功,在StartImage()之前,必须先使用EFI_BOOT_SERVICES. setwatchdogtimer()启动看门狗定时器,启动时间为5分钟。如果引导选项将控制返回给引导管理器,则引导管理器必须通过额外调用SetWatchdogTimer()引导服务来禁用看门狗定时器。

UEFI引导管理器支持USB WWID或USB Class设备路径,硬盘介质设备路径,File path Media device path,URI设备路径。

3. Load Options

每个Load Options variable包含一个EFI_LOAD_OPTION描述符。

typedef struct _EFI_LOAD_OPTION { UINT32 Attributes; UINT16 FilePathListLength; // CHAR16 Description[]; // EFI_DEVICE_PATH_PROTOCOL FilePathList[]; // UINT8 OptionalData[]; } EFI_LOAD_OPTION; 4. Boot Manager 功能 definevalue描述EFI_BOOT_OPTION_SUPPORT_KEY0x00000001支持按键启动EFI_BOOT_OPTION_SUPPORT_APP0x00000002详见specEFI_BOOT_OPTION_SUPPORT_SYSPREP0x00000010支持SysPrep####形式启动EFI_BOOT_OPTION_SUPPORT_COUNT0x00000300按键启动最大次数

EFI_BOOT_OPTION_SUPPORT_APP可以创建单独的Boot ####。 EFI_BOOT_OPTION_SUPPORT_KEY 设置之后可以设置热键,匹配Key####来使用热键启动启动项。 SysPrep####指定UEFI应用程序,该应用程序需要执行,以便在处理任何Boot####变量之前完成系统准备。SysPrep####应用程序的执行顺序由变量SysPrepOrder的内容决定。

所有SysPrep####变量启动并退出后,平台通知EFI_EVENT_GROUP_READY_TO_BOOT和EFI_EVENT_GROUP_AFTER_READY_TO_BOOT事件组,并根据BootOrder定义的顺序开始对属性设置为LOAD_OPTION_CATEGORY_BOOT的Boot####变量进行求值。标记为LOAD_OPTION_CATEGORY_BOOT的变量的FilePathList在EFI_EVENT_GROUP_AFTER_READY_TO_BOOT事件组处理完成之前不被评估。

二、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; EFI_BOOT_MANAGER_POLICY_CONNECT_DEVICE_CLASS ConnectDeviceClass; }; 三、Globally Defined Variables

定义了一些全局变量供开发者使用:

全局变量意义Boot####启动项BootCurrent当前启动项BootNext下次启动启动项ConIn默认输入控制台设备路径

更多可使用变量请查看spec

四、Boot Option 恢复

启动选项失败恢复机制

五、Boot 机制

1.使用EFI_SIMPLE_FILE_SYSTEM_PROTOCOL 或者EFI_LOAD_FILE_PROTOCOL启动

总结

后续有更深理解,会继续补充。 学艺不精,错误请指正; 如有侵权,请联系删除。

参考文档: 《UEFI_Spec_2_9_2021_03_18》



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有