固件更新启动屏幕有两个组件:OEM 徽标和更新文本。 本文提供了配置这些组件的指南,以及如何在固件更新胶囊中将这些组件传递给固件的信息。
OEM 徽标
固件更新启动屏幕中的 OEM 徽标必须是在正常启动过程中显示的相同徽标。 对于固件更新启动屏幕,徽标的大小、位置和质量必须与正常启动过程中显示的大小、位置和质量相同。
OEM 徽标文件
在客户看到任何可作屏幕之前,OEM 徽标会显示在启动屏幕上。
OEM 徽标不会显示在 OOBE 中的任何屏幕上,在 OOBE 之后,它将显示在“性能信息和工具”下的控制面板中。 它不会显示在 “设置” 应用中。
POST (Power-On Self-Test)和操作系统的启动时间比过去也快。 为了确保您有适当的品牌呈现,OEM 徽标在 POST 和操作系统启动时都可见。 在此方法中,OEM 徽标易于识别、适当地持续并与快速可靠的体验相关联。
此外,在“性能信息和工具”下,OEM 徽标显示为控制面板应用中的品牌元素。 它不会显示在 “设置” 应用中。
创建徽标
你添加的徽标是客户首次视觉感受到其新电脑(运行 Windows)的媒介,因此它的边缘和内部都应清晰、明了且精致。
启动屏幕的背景始终为黑色,因此使用在黑色背景上看起来很棒的徽标。 徽标还必须具有真正的黑色背景,因此徽标的黑色背景结束和屏幕的黑色背景开始没有明显的区别。 不支持透明度。 黑色背景优化了系统性能,不仅在徽标的初始呈现时,而且在启动结束时淡出时,以便从 UEFI 图形输出协议 (GOP) 过渡到操作系统的本机视频驱动程序。 Windows 的其他区域也使用徽标:设置、Push-Button 重置(PBR)、安全启动修正和启动修复工具,所有这些都使用黑色背景。 这些体验使用启动图形资源表(BGRT)中的相同徽标。
在 POST 期间定位徽标
固件在 POST 上绘制 OEM 徽标,并将徽标置于预先确定的位置。 Windows 启动开始时,徽标将保留在视频缓冲区中。 桌面电脑可以通过读取面板的 EDID(扩展显示标识数据)来检测面板的本机分辨率。
若要使徽标在整个序列中正确显示,POST 需要在设备的本机分辨率中发生。 这确保徽标的大小、形状和位置符合您的期望,并满足 Windows 的要求。
徽标应显示在屏幕上的特定位置,以展示电脑的品牌。 建议将徽标的中心放置在屏幕上边缘的 38.2% 处。 此定位基于黄金比例的视觉美学,并与 Windows 10 的设计比例相匹配。 在运行 Windows 10 的所有电脑上,这种一致的定位让 Windows 将进度环放置在正确的位置,并确保徽标和环形在视觉上保持平衡。
为了进一步支持这种视觉平衡,我们建议将徽标大小限制为屏幕高度和宽度的 40%。 这可确保屏幕正常显示,并且 Windows 可以在启动结束时正确淡出徽标。 我们建议徽标的最大区域从屏幕顶部开始不超过 18.2%。
这些设计原则适用于横屏和竖屏设备。
将徽标添加到 BGRT
除了在 POST 期间正确定位徽标外,还可以将徽标存储在启动图形资源表 (BGRT) 中。 BGRT 动态定义用于描述资源和屏幕位置的 Windows 的新对象。 将徽标存储在 EfiBootServicesData 中,并通过 BGRT 公开徽标。 BGRT 接口支持此徽标作为 24 位位位图,其像素格式为 0xRRGGBB,或采用像素格式为 0xrrRRGGBB 的 32 位位位图,其中保留“rr”。 这是 Windows 用于访问徽标的标准接口。
BGRT 中的两个重要字段是“图像偏移 X”和“图像偏移 Y”。 这些是徽标在屏幕上的左上角位置的 (x, y) 值。 设置这些值时,请确保不要使用徽标的位置或边界框的左上角,或者 Windows 不会在安装程序、启动修复、Push-Button 重置或其他体验中正确定位徽标。
应尽量减少徽标资源中的填充,并仅使用正确对齐所需的内容。 使用最小填充可以节省固件中的空间,并允许 Windows 正确缩放基于 BGRT 的徽标。
OEM 徽标不会显示在 OOBE 的任何屏幕上。
有关 BGRT 的详细信息,请参阅 高级配置和电源接口(ACPI)规范的第 5.2.22 部分。
更新文本
固件更新启动屏幕中的更新文本是一个简单的字符串,旨在快速阅读和易于理解。 文本由 Windows 启动加载程序呈现。 一旦确定固件更新有待处理,之后引导加载程序将确定 Windows 的区域设置,并在屏幕上显示本地化的文本。
在调用 UpdateCapsule 期间,引导程序将传递所有固件更新胶囊。 此外,它还将传递一个由 Microsoft 定义的 固件更新显示 封装,其中包含显示文本的位图以及位图在屏幕上的位置。 系统固件的 UpdateCapsule 方法必须持久化更新包,这样无论何时屏幕被清除或修改,它都可以在屏幕上重新显示位图。
Windows 固件更新显示封装
当 Windows 引导加载程序调用系统固件的 UpdateCapsule 方法时,它会传递所有固件更新包。 此外,它将执行在 Windows UX 胶囊中。 此胶囊包含必须在屏幕上显示的呈现本地化文本的位图图像。 以下 GUID 用于标识此胶囊:{3b8c8162-188c-46a4-aec9-be43f1d65697}。
不能保证 UX 胶囊出现在胶囊数组中的顺序。 不要依赖特定的索引位置来查找 UX 胶囊。 最佳实践包括扫描数组以查找 UX 胶囊,并在处理数组中剩余的固件胶囊之前对其进行处理。
请务必注意,在某些情况下可能没有 UX 模块。 例如,在没有显示适配器的无头服务器情况下,不会有 UX 胶囊。 在这种情况下,固件 UpdateCapsule 调用可以忽略 UX 胶囊要求。 但是,如果存在 UX Capsule,则 UpdateCapsule 必须按照本节中所述的过程处理它。
下表描述了 UX 胶囊的固件更新显示标头。
| 领域 | 字节长度 | 字节偏移量 | DESCRIPTION |
|---|---|---|---|
| CapsuleGuid | 16 | 0 | 固件更新显示模块 |
| HeaderSize | 4 | 16 | sizeof(EFI_CAPSULE_HEADER) |
| 旗帜 | 4 | 20 | CAPSULE_FLAGS_PERSIST_ACROSS_RESET (在重置后保留的标志) |
| 胶囊图像大小 | 4 | 二十四 | 描述固件更新显示舱长度的 4 字节无符号整数。 大小包括标题和胶囊,其中包括显示图像。 |
下表描述了固件更新的显示模组负载。
| 领域 | 字节长度 | 字节偏移量 | DESCRIPTION |
|---|---|---|---|
| 版本 | 1 | 28 | 标识已实施的显示模块修订版本。 此字段将设置为 1。 |
| Checksum | 1 | 二十九 | 包含用于简单验证的校验和。 整个胶囊(标头和有效负载)的总和(包括显示图像)必须等于零。 如果总和不等于零,则应忽略胶囊。 |
| ImageType | 1 | 30 | 指定嵌入图像的格式: 0:位图 1-255:保留以供将来使用。 |
| 已预留 | 1 | 31 | 保留以供将来使用。 必须为零。 |
| Mode | 4 | 32 | 指定能够显示嵌入图像的图形输出协议视频模式。 在调用 UpdateCapsule 之前查询视频模式,并在启动加载程序显示嵌入图像时描述当前视频模式和本地显示器的视频模式。 当呈现图像时,该值等于EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE结构的 Mode 字段。 |
| 图像偏移 X | 4 | 36 | 描述位图图像的 X 偏移量的 4 字节(32 位)无符号长。 (X,Y) 图像左上角的显示偏移量。 显示器的左上角位于偏移量(0,0)。 |
| 图像偏移 Y | 4 | 40 | 描述位图图像的 Y 偏移量的 4 字节(32 位)无符号长。 (X,Y) 图像左上角的显示偏移量。 显示器的左上角位于偏移量(0,0)。 有关示例,请参阅下图。 |
| 图像 | 无 | 44 | 一个字节数组,其中包含在固件更新过程中要显示的嵌入式位图。 位图可以是像素格式为 0xRRGGBB 的 24 位图,也可以是 32 位位位图,像素格式为 0xrrRRGGBB,其中保留“rr”。 |
与为固件更新有效负载生成的胶囊不同,显示器的胶囊有效负载没有填充以页对齐。 显示有效负载紧跟在胶囊标头后面。
固件更新显示舱描述在固件更新期间必须呈现的图形。 最初由 Windows 呈现和显示的图形在包含更新负载的 UpdateCapsule 调用中作为一部分被转移到固件。 如果固件重置系统或视频设备,固件必须重新显示显示包中提供的位图。 如果未在重置中保留物理内存,固件可能需要将位图保存到永久性存储,以在重置后重新显示位图。 有关如何跨重置保存和还原位图的详细信息取决于具体实现,本文未讨论。
固件更新显示舱基于 ACPI 5.0 中定义的启动图形资源表(BGRT)建模。 BGRT 定义系统固件向 OS 启动加载程序提供图形的机制。 虽然这两个表相似,但有几个明显的差异。
| BGRT | 固件更新显示舱 | 原因 |
|---|---|---|
| 指向位图的指针 | 嵌入位图 | 嵌入位图使胶囊能够通过单次操作进行保存和还原。 |
| 不包含视频模式 | 包含视频模式 | 这样做是为了避免在 UpdateCapsule 调用期间要求固件查询视频模式。 |
| 包含“状态”字段 | 不包含“状态”字段 | BGRT 的状态字段描述图像当前是否在屏幕上显示。 这不适用于固件更新显示模块。 |