我发现许多(大多数?)固件都需要重新启动才能更新,其工作方式是将新固件数据放在 UEFI 分区上(我尝试更新时出现错误“找不到 UEFI 分区”,并在支持频道上得到了解释),并在下次启动时对其进行处理并用于更新。这样对吗?
我假设该过程使用校验和和签名来检查新数据是否真实(来自硬件制造商)和有效(适用于该设备)。否则,这对病毒来说就是一条捷径。对吗?
因此,我认为尝试手动更新方式不会带来太大风险:将有效负载复制到 UEFI 并重新启动。但我找不到将其复制到哪个地址。可能还需要设置一些位来初始化更新。我尝试过网络搜索和阅读 UEFI 规范(规范是相当长的文档,我无法根据目录猜出要查找的位置)。TIA
PS 在 UEFI 规范中,我发现了“更新胶囊”和“重置系统”部分。
更新:正在进行中:当前问题:UEFI 环境变量存储在哪里?
从 UEFI 规格来看:
8.5.5 通过大容量存储设备中的文件传送胶囊
作为 UpdateCapsule() 运行时 API 的替代方案,平台支持的任何类型的胶囊也可以通过用于启动的大容量存储设备上的 EFI 系统分区内的文件传送到固件。使用此方法暂存的胶囊将在下次系统重启时处理。此方法仅在从使用 GPT 格式化且在设备映像中包含 EFI 系统分区的大容量存储设备启动时可用。当 OsIndications 中的 EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED 位设置时,系统固件将搜索胶囊,如在 OS 和固件之间交换信息中所述。
活动 EFI 系统分区内的目录 EFIUpdateCapsule(忽略字母大小写)被定义为将胶囊传送到固件。
3.1.1 引导管理器编程
与引导管理器的编程交互是通过全局定义的变量实现的。初始化时,引导管理器会读取 UEFI 环境变量中所有已发布的加载选项的值。通过使用 SetVariable() 函数,可以修改包含这些环境变量的数据。此类修改保证在下次系统引导开始后生效。