SoC 平台上 Windows 版本的 UEFI 要求

本文介绍适用于 Windows 10 桌面版(家庭版、专业版、企业版和教育版)和Windows 10 移动版的 UEFI 要求。 有关仅适用于Windows 10 移动版的其他要求,请参阅 Windows 10 移动版的 UEFI 要求。

要求摘要

下表列出了 UEFI 规范(UEFI 2.3.1 规范的第 2.6 节)中定义的 UEFI 符合性的所有当前要求。 在此表中,“显式 Windows 要求”一词标识由 Windows 组件直接调用的任何协议或服务。 尽管 Windows 仅显式使用这些服务,但核心固件实现、EFI 设备驱动程序或开发和部署工具链可能隐式或显式要求其他列出的服务和协议。

Microsoft 欢迎实施者的反馈和意见,并就这一组要求发表评论。 对于 OS 或固件不要求的任何 UEFI 符合性要求,我们打算通过 UEFI.org 让此类设备放宽这些符合性要求。

有关特定要求的详细信息,请参阅表后面的部分。

要求 UEFI 规范部分 说明
EFI 系统表 4.3 显式 Windows 要求
EFI 启动服务 6.0
事件、计时器和任务服务 6.1
内存服务 6.2 显式 Windows 要求'
协议处理程序服务 6.3 显式 Windows 要求
图像服务 6.4 显式 Windows 要求
其他服务 6.5 显式 Windows 要求
EFI 运行时服务 7.0
时间服务 7.3 显式 Windows 要求
变量服务 7.2 显式 Windows 要求
其他服务 7.5 显式 Windows 要求
所需的 UEFI 协议
EFI 加载的图像协议 8.1
EFI 加载的图像设备路径协议 8.2
EFI 设备路径协议 9.2 显式 Windows 要求
EFI 设备路径实用工具协议 9.5
EFI 解压缩协议 18.5
EBC 解释器协议 20.11
有条件要求的 UEFI 协议
EFI 简单文本输入协议 11.3 显式 Windows 要求
EFI 简单文本输入 EX 协议 11.2
EFI 简单文本输出协议 11.4
EFI 图形输出协议 11.9 显式 Windows 要求
EFI EDID 发现的协议 11.9.1
EFI EDID 活动协议 11.9.1
EFI 块 IO 协议 12.8 显式 Windows 要求
EFI 磁盘 IO 协议 12.7
EFI 简单文件系统协议 12.4
EFI Unicode 排序规则协议 12.10
EFI 简单网络协议 21.1
EFI PXE 基本代码协议 21.3
EFI 启动完整性服务协议 21.5
EFI 串行 IO 协议 11.8
UEFI Arm 绑定 2.3.5 显式 Windows 要求
安全要求
安全启动 27.0 显式 Windows 要求
启动管理器要求 3.1, 3.3 显式 Windows 要求

EFI 系统表要求

EFI 系统表必须符合实施修订级别的标准定义。 EFI 系统表指向的配置表必须包括下表中所述的两个 GUID 及其关联的指针。

GUID 说明
EFI_ACPI_Table GUID 此 GUID 必须指向平台的 ACPI 根系统说明指针(RSDP)。
SMBIOS_Table GUID 此 GUID 必须指向 SMBIOS 入口点结构。

Windows 要求在 2.4 或更高版本的修订版级别使用 SMBIOS 规范。 需要第 3.2 节“所需结构和数据”和 4 节“一致性准则”。 Windows SMBIOS 兼容性测试可用。

EFI 启动服务要求

下表列出了 Windows 的 EFI 启动服务要求。

EFI 启动服务 要求
内存服务 Windows 需要所有内存服务。
协议处理程序服务 Windows 需要以下协议处理程序服务:

OpenProtocol()
CloseProtocol()
LocateDevicePath()
LocateHandle()
图像服务 Windows 需要以下映像服务:

ExitBootServices()
其他启动服务 Windows 需要以下杂项启动服务:

Stall()

注意: 需要 Stall() 实现具有确定性(可重复)错误,以便能够可靠地进行错误更正或取消。

EFI 运行时服务要求

下表列出了 Windows 的 EFI 运行时服务要求。

EFI 运行时服务 要求
时间服务 Windows 需要以下时间服务:

GetTime()
SetTime()

注意: 仅在启动期间(在 ExitBootServices()之前调用时间服务来访问平台的一天硬件。
变量服务 所有 UEFI 变量服务都需要在目标系统类上管理多个启动设备和安全变量。
其他运行时服务 Windows 需要以下杂项运行时服务:

ResetSystem()

注意: ResetSystem() 实现必须同时支持重置和关闭选项。

协议要求

下表描述了 Windows 在启动期间完成特定功能所需的 UEFI 协议。

协议 要求
图形输出协议 Windows 需要图形输出协议(GOP)。 特定的帧缓冲区要求包括:

对于集成显示器, HorizontalResolutionVerticalResoluton 必须是面板的本机分辨率。

对于外部显示器, HorizontalResolutionVerticalResoluton 必须是显示器的本机分辨率,或者,如果不支持,则视频适配器和连接的显示器都支持的最高值。

PixelsPerScanLine 必须等于 HorizontalResolution

PixelFormat 必须是 PixelBlueGreenRedReserved8BitPerColor。 需要物理帧缓冲区; 不支持 PixelBltOnly

将执行移交给 UEFI 启动应用程序时,固件启动管理器和固件不得将帧缓冲区用于任何目的。 启动服务退出后,必须继续扫描帧缓冲区。
备用显示输出 UEFI 固件必须使用硬件支持的任何显示连接器来支持启动。 如果内部面板已连接并可见,则必须使用内部面板。 具有物理连接的显示器的所有输出都必须显示启动屏幕。 对于连接的显示器,UEFI 固件必须:

如果可以确定本机分辨率,请使用显示本机模式初始化输出。

如果无法实现本机模式,则必须初始化为最高兼容模式。

如果无法确定显示功能,则必须在已知与尽可能多的监视器兼容(通常为 640x480 或 1024x768 的 60 Hz)模式下初始化连接的显示器。
启动时输入 在具有内置键盘或附加键盘的系统上进行启动选择或其他菜单选择时,需要使用 EFI 简单文本输入协议。 对于无键盘系统,建议在启动环境中使用三个按钮:

“开始”按钮
“向上音量”按钮
“调低音量”按钮

按钮按下应通过 EFI 简单文本输入协议报告,方法是分别将它们映射到以下键盘键:

Windows 键
向上键
向下键
本地存储启动 Windows 需要对包含 EFI 系统分区和 Windows OS 分区的存储解决方案提供块 I/O 协议和设备路径协议支持。 若要从需要磨损调配或其他闪存管理的闪存存储启动,必须在固件(而不是 UEFI 应用程序中)中实现此操作。

安全要求

Windows 在安全启动、测量启动、加密和数据保护等领域具有安全要求。 下表详细介绍了这些要求。 此外,对于 SoC 硬件阻止符合现有标准(TPM、RTC 等)的区域,正在开发其他要求。 这些内容在表的末尾进行描述。

区域 要求
常规
  • 要求 1:必需。 平台应符合本节中指定的所有要求。

  • 要求 2:必需。 平台应为 UEFI 类 3,且未安装或安装兼容性支持模块。 必须禁用 BIOS 仿真和旧版电脑/AT 启动。

UEFI 安全启动
  • 要求 3:必需。 UEFI v2.3.1 第 27 节中定义的安全启动必须启用,并且必须提供签名数据库(EFI_IMAGE_标准版CURITY_DATABA标准版),才能安全地预预配计算机。 签名数据库的初始内容由 OEM 确定,具体取决于所需的第三方 UEFI 驱动程序、恢复需求和计算机上安装的 OS 启动加载程序,但应包括 Microsoft 提供的EFI_CERT_X509签名。 不得提供其他签名。

  • 要求 4:必需。 需要存在 UEFI“禁止”签名数据库(EFI_IMAGE_标准版CURITY_DATABA标准版1)。

  • 要求 5:必需。 Microsoft 提供的 UEFI KEK 应包含在 UEFI KEK 数据库中。 不得存在任何其他 KEK。 Microsoft 以EFI_CERT_X509签名的形式提供 KEK。

  • 要求 6:必需。 PKpub 密钥应存在并存储在固件闪存中。 注意:由于 PKpriv(与 PK pub 对应的私钥)控制使用 PKpub 预配的所有设备上的安全启动策略,因此必须严格保护其保护和使用。

  • 要求 7:必需。 初始签名数据库应存储在固件闪存中,并且只能使用 OEM 签名的固件更新或通过经过 UEFI 身份验证的变量写入进行更新。

  • 要求 8:必需。 无法执行签名验证的启动路径中的映像,失败的原因应添加到EFI_IMAGE_EXECUTION_TABLE。 此外,在这些情况下,建议的方法是 UEFI 启动管理器根据特定于 OEM 的策略启动恢复。

  • 要求 9:必需。 对于无法进行签名验证的 UEFI 映像,不得允许实际存在的用户替代。

  • 要求 10:可选。 OEM 可以实现物理呈现用户通过固件设置关闭安全启动的功能,从而访问 PKpriv 或通过物理状态关闭安全启动。 对固件设置的访问可能受特定于平台的方式(管理员密码、智能卡、静态配置等)的保护。

  • 要求 11:如果实施要求 10,则强制要求。 如果安全启动已关闭,则所有现有的 UEFI 变量都不可访问。

  • 要求 12:可选。 OEM 可以实现在固件设置中的两种安全启动模式之间进行选择的功能:“自定义”和“标准”。 自定义模式允许按以下方式指定更大的灵活性。

  • 要求 13:实施要求 12 时强制要求。 可以通过设置所有者特定的 PK,在自定义模式下重新启用禁用的安全启动。 管理应按照 UEFI 规范 v2.3.1 的第 27.5 部分的定义继续进行:固件/OS 密钥交换。 在自定义模式下,设备所有者可以在签名数据库中设置其选择的签名。

  • 要求 14:实施要求 12 时强制要求。 固件设置应指示安全启动是否已打开,以及它是否在标准模式或自定义模式下运行。 固件设置应提供从自定义模式返回到标准模式的选项。

  • 要求 15:必需。 如果固件设置重置为出厂默认设置,则将擦除所有自定义集受保护的变量,并将重新建立原始 PK酒吧 以及原始制造商预配的签名数据库。

  • 要求 16:必需。 驱动程序签名应使用 Authenticode 选项(WIN_CERT_TYPE_PKCS_SIGNED_DATA)。

  • 要求 17:必需。 支持EFI_IMAGE_EXECUTION_INFO_TABLE(即创建和存储启动期间启动或未启动的映像的信息)。

  • 要求 18:必需。 支持EFI_IMAGE_标准版CURITY_DATABA标准版的 GetVariable(已授权和禁止签名数据库)。

  • 要求 19:必需。 使用 Microsoft KEK 进行身份验证,为EFI_IMAGE_标准版CURITY_DATABA标准版(已授权和禁止签名数据库)支持 SetVariable()。

  • 要求 20:必需。 EFI_HASH_标准版RVICE_BINDING_PROTOCOL:服务支持:CreateChild()、DestroyChild()。

  • 要求 21:必需。 EFI_HASH_PROTOCOL。 服务支持:Hash()。 支持SHA_1和 SHA-256 哈希算法。 必须支持至少传递 10 Mbytes 长的消息。

UEFI 测量的启动

以下要求并不意味着 TCG TPM 实现需要;然而,它们意味着需要对受影响的区域使用等效功能。

平台支持可以通过在安全执行环境中执行的 TPM 的固件实现提供,在加密加速引擎的基础上分层并利用隔离存储。 Microsoft 可以为供应商使用的此类 TPM 实现提供参考软件。 这需要进一步讨论。

  • 要求 22:必需。 平台应符合 UEFI 受信任执行环境 EFI 协议中指定的 EFI 协议

  • 要求 23:必需。 该平台应遵循 TCG EFI 平台规范,并添加以下内容:

    • 在支持 Tr企业版 EFI 协议中定义的接口的平台上,PK发布摘要应作为EV_EFI_VARIABLE_CONFIG事件扩展到 TPMBP[03]。

    • 授权签名数据库内容的摘要(请参阅 UEFI 规范 v2.3.1 的第 27.8 节)列表必须作为EV_EFI_VARIABLE_CONFIG事件在度量启动中扩展。 扩展操作应为 TPMRF[03]。

    • UEFI 客户端可以使用EFI_IMAGE_标准版CURITY_DATABA标准版变量读取和分析证书列表,并针对扩展值验证摘要。

    • TCG_PCR_EVENT摘要值应为 SHA-256,而不是 SHA-1。

  • 要求 24:必需。 平台必须实现 TCG 平台重置攻击缓解规范定义的 MemoryOverwriteRequestControl。

密码
  • 要求 25:必需。 平台应提供EFI_HASH_PROTOCOL(UEFI v2.3.1 第 27.4 节)以卸载加密哈希操作。 必须支持 SHA-256。

  • 要求 26:必需。 该平台应支持 Microsoft 定义的 EFI_RNG_PROTOCOL ,以便读取 entropy 的预操作系统。

数据保护
  • 要求 27:必需。 平台必须支持具有以下 UEFI 变量属性集的任意组合的 EFI 变量:

    • EFI_VARIABLE_BOOT标准版RVICE_ACCESS

    • EFI_VARIABLE_NON_VOLATILE

    • EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS

其他安全要求

SoC 平台上的 Windows 需要满足以下附加要求。

  • Microsoft 已定义用于从 UEFI 平台收集 entropy 的协议。 虽然不是 UEFI 要求,但 SoC 平台上的 Windows 需要此协议。 有关此协议的详细信息,请参阅 UEFI 信息收集协议

  • UEFI 签名数据库汇报。 UEFI 2.3.1 第 27 节已采用更新经过身份验证的变量的新机制。 Windows 需要此机制。

  • 受信任的执行环境。 Microsoft 开发了一个 EFI 协议,用于与受信任的执行环境(Tr企业版)交互,其功能类似于受信任的计算组(TCG)受信任平台模块(TPM)的子集。 2006 年 6 月 9 日,受信任的计算组利用“TCG EFI 协议”版本 1.2 修订版 1.00。

    有关详细信息,请参阅 UEFI 受信任的执行环境 EFI 协议

固件启动管理器要求

固件启动管理器必须支持规范第 3.3 节中定义的默认启动行为。 此外,需要支持多启动、全局定义的变量和规范第 3.1 节的启动管理器要求。

UEFI Arm 绑定要求

UEFI Arm 绑定包括特定于 Arm 平台的要求,以便符合 UEFI 规范。 Windows 需要适用于 ARMv7 的 Arm 绑定中的所有内容。 由于 Windows 不支持 ARMv7 之前的任何内容,因此特定于 ARMv6k 和更低版本的绑定中的要求是可选的。

例如,绑定指定如何配置 MMU,以及如何映射物理内存。 绑定还指定仅在 Arm ISA 中执行对 UEFI 协议和服务进行的调用,这意味着在 Thumb2 或 Thumb 中运行的软件需要在调用 UEFI 函数之前切换回 Arm 模式。

UEFI Arm 多处理器启动要求

Microsoft 开发了一个协议,用于在多处理器 UEFI 平台上启动多个 Arm 核心。 不支持 Power State 协调接口 (PSCI) 的 Arm 平台上的 Windows 需要此协议。 支持 PSCI 的平台不得使用此协议。 有关此协议的详细信息,请参阅 ACPI 组件体系结构(ACPICA)网站上的基于 UEFI Arm 的平台 文档上的多处理器启动。

平台设置要求

固件负责在将系统硬件移交给 OS 加载程序之前将系统硬件置于定义良好的状态。 下表定义了相关的平台设置要求。

要求 说明
启动路径 固件必须将平台初始化为 Windows 能够通过 UEFI 访问启动设备并加载内核的点。 给定性能和电源注意事项,必须以合理的速率对层次结构中涉及的任何设备进行时钟和供电。 基础处理器核心本身也应以合理的速率时钟和电源,以便系统可以及时启动,而无需耗尽电池。
核心系统资源 必须打开和时钟通过 ACPI 表向 OS 公开的核心系统资源。 核心系统资源包括必须由 OS 管理的中断控制器、计时器和 DMA 控制器。 此外,调用 ExitBootServices()必须屏蔽中断,直到 OS 中的关联设备驱动程序取消屏蔽并重新启用设备上的中断。 如果在启动服务期间启用了中断,则假定固件管理中断。
调试 Windows 支持通过 USB 3 主机(XHCI)、USB 2 主机(EHCI)1、I企业版E 1394、串行和 USB 函数接口(以及 PCI 以太网适配器)进行调试。 在 OS 交接之前,固件必须至少为其中一个电源、时钟和初始化。 无论提供哪种选项,它都必须具有公开的端口以进行调试,并且控制器必须进行内存映射,或者通过专用(非共享)外围总线进行连接。
其他平台设置要求 在将控制交给 OS 加载程序之前,必须在固件中完成任何引脚复用和填充配置。

安装要求

Windows 要求 OS 分区驻留在 GPT 分区存储解决方案上。 MBR 分区存储可用作数据存储。 如 UEFI 规范中定义,UEFI 平台需要专用系统分区。 Windows 需要此专用系统分区,称为 EFI 系统分区(ESP)。

硬件安全测试接口 (HSTI) 要求

平台必须实现硬件安全测试接口,并且平台需要共享硬件安全可测试性规范中指定的文档和工具。

SoC 平台上 Windows 的最低 UEFI 要求

Windows 10 移动版的 UEFI 要求

USB 闪存支持的 UEFI 要求