USB 闪存支持的 UEFI 要求
Microsoft提供了多个基于 USB 的闪存解决方案,用于工程和制造环境。 为了使设备与这些工具一起使用,设备上的 UEFI 环境必须满足本主题中列出的要求。
这些与刷写相关的要求扩展了适用于所有 Windows 版本的 UEFI 要求中列出的 UEFI 要求。
所需的 UEFI 协议
协议 | 要求详细信息 |
---|---|
USB 函数协议 | 对于通过 USB 3.0 进行 USB 闪存,固件必须实施 UEFI USB 函数协议修订版 0x00010002 或更高版本,包括支持 EFI_USBFN_IO_PROTOCOL.ConfigureEnableEndpointsEx 函数。 function. 有关详细信息,请参阅 UEFI USB 函数协议。 |
BlockIO | Microsoft 提供的 USB 闪存解决方案会选择第一个返回的指向非零大小块 I/O 存储设备的指针进行闪存。 设备可以是不可移动或可移动存储。 |
UEFI 不同步事件(可选)
尝试在闪烁期间读取或写入磁盘的 UEFI 组件必须实现对 UEFI 异步事件(EFI_EVENT_GROUP_FIRMWARE_DESYNC)的支持,如下表所述。
要求 | 描述 |
---|---|
UEFI 启动服务支持 | UEFI 固件必须支持 UEFI 2.3.1 规范第 6.1 节中定义的事件、计时器和任务优先级服务。 |
事件组 GUID | Microsoft 使用以下 GUID 定义 EFI_EVENT_GROUP_FIRMWARE_DESYNC:{24FA5E72-1A82-49A2-970B-3230372662A5} |
UEFI 固件事件 | 确定需要定期刷新或同步其状态的所有 UEFI 固件组件。 在每个组件中,创建一个与EFI_EVENT_GROUP_FIRMWARE_DESYNC和 NotifyFunction() 关联的事件,该事件导致组件停止刷新/同步回存储。 事件的 NotifyFunction() 应执行组件转换到非同步模式所需的任何清理操作。 完成此清理后,组件在下次设备重新启动之前,不得使用闪存刷新或同步其存储。 如果事件的 NotifyFunction 失败(),则 NotifyFunction() 不应返回EFI_SUCCESS。 |
以下代码示例演示固件如何创建事件组 GUID 事件:
gBS->CreateEventEx (
EVT_NOTIFY_SIGNAL,
TPL_CALLBACK,
FIRMWARE_NOTIFICATION_FUNCTION, // To be defined by SoC Vendor
&FIRMWARE_NOTIFICATION_FUNCTION_CONTEXT, // To be defined by SoC Vendor
&EFI_EVENT_GROUP_FIRMWARE_DESYNC,
&Event // Event returned by CreateEventEx
);