固件更新启动屏幕有两个组件:OEM 徽标和更新文本。 本文提供有关如何配置其中每个组件的指南,以及如何将这些组件传递到固件更新封装中的固件的信息。
OEM 徽标
固件更新启动屏幕中的 OEM 徽标必须是在正常启动过程中显示的那个徽标。 对于固件更新启动屏幕,徽标的大小、位置和品质必须与正常启动过程中显示的大小、位置和品质相同。
OEM 徽标文件
在客户看到任何可操作屏幕之前,会在启动屏幕上显示您的 OEM 徽标。
OEM 徽标不会显示在 OOBE 中的任何屏幕上,并且在 OOBE 之后,它会显示在“控制面板”中的“性能信息和工具”下。 它不会显示在“设置”应用中。
POST(开机自检)和操作系统启动时间都比过去快。 为确保您有合适的品牌时刻,POST 和操作系统启动期间均显示 OEM 徽标。 在此方法中,OEM 徽标便于识别、适于维护,并与快速、可靠的体验相关联。
此外,OEM 徽标还作为品牌元素显示在控制面板应用的性能信息和工具下。 它不会显示在“设置”应用中。
创建徽标
你添加的徽标向客户展示了他们与运行 Windows 的新电脑的首次视觉接触,因此它的边缘和内部应该干净、清晰和锐利。
启动屏幕的背景始终是黑色的,因此请使用在黑色背景下效果良好的徽标。 徽标还必须具有真正的黑色背景,因此徽标的黑色背景结束位置与屏幕的黑色背景开始位置之间没有显著差异。 不支持透明度。 黑色背景可在初始渲染徽标和启动结束进行淡出时优化系统性能,以便于从 UEFI 图形输出协议 (GOP) 过渡到操作系统本机视频驱动程序。 Windows 的其他区域也使用徽标:安装、按钮重置 (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 界面支持此徽标作为像素格式为 0xRRGGBB 的 24 位位图或像素格式为 0xrrRRGGBB 的 32 位位图,其中“rr”为预留位。 这是 Windows 用来访问徽标的标准界面。
BGRT 中的两个重要域是“Image Offset X”(图像偏移 X)和“Image Offset Y”(图像偏移 Y)。 这是徽标屏幕位置左上角的 (x,y) 值。 设置这些值时,请确保不使用徽标的位置或边界框的左上角,否则 Windows 在“安装”、“启动修复”、“按钮重置”或其他体验中将无法正确定位。
在徽标资源中应尽量减少填充,只使用正确居中所必需的功能。 尽量减少填充的使用可节省固件中的空间,并让 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 封装,则 UpdateCapsule 必须按照本节中所述的过程处理它。
下表描述了 UX 封装的固件更新显示标头。
字段 | 字节长度 | 字节偏移量 | 说明 |
---|---|---|---|
CapsuleGuid | 16 | 0 | FIRMWARE_UPDATE_DISPLAY_CAPSULE |
HeaderSize | 4 | 16 | sizeof(EFI_CAPSULE_HEADER) |
标记 | 4 | 20 | CAPSULE_FLAGS_PERSIST_ACROSS_RESET |
CapsuleImageSize | 4 | 24 | 描述固件更新显示封装长度的 4 字节无符号整数。 大小包括标题和封装,其中包括屏幕图像。 |
下表描述了固件更新显示封装有效负载。
字段 | 字节长度 | 字节偏移量 | 说明 |
---|---|---|---|
版本 | 1 | 28 | 标识实现了显示封装的哪个修订。 此字段将设置为 1。 |
校验和 | 1 | 29 | 包含用于启用简单验证的检查和。 包括屏幕图像在内的整个封装(标头和有效负载)的总和必须等于零。 如果总和不等于零,则应忽略封装。 |
ImageType | 1 | 30 | 指定嵌入图像的格式: 0:位图 1-255:预留供以后使用。 |
保留 | 1 | 31 | 预留供以后使用。 必须为零。 |
模型 | 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 位位图,也可以是像素格式为 0xrrRRGGBB 的 32 位位图,其中保留“rr”。 |
与为固件更新有效负载生成的封装不同,显示封装有效负载不会填充为页面对齐。 显示有效负载紧跟在封装标头后面。
固件更新显示封装描述了在固件更新期间必须呈现的图形。 该图形最初由 Windows 呈现和显示,并作为包含更新有效负载的同一 UpdateCapsule 调用的一部分移交给固件。 如果固件重置系统或视频设备,则必须重新显示显示封装中提供的位图。 如果未在重置中保留物理内存,固件可能必须将位图保存到永久性存储,以在重置后重新显示位图。 有关如何在重置中保存和还原位图的详细信息因具体实现而异,本文未讨论。
固件更新显示封装基于 ACPI 5.0 中定义的启动图形资源表 (BGRT) 建模。 BGRT 定义了系统固件向 OS 引导加载程序提供图形的机制。 虽然这两个表相似,但有几点明显的差异。
BGRT | 固件更新显示封装 | 原因 |
---|---|---|
指向位图的指针 | 嵌入式位图 | 嵌入位图允许在单个操作中保存和还原封装。 |
不包含视频模式 | 包含视频模式 | 这样做是为了避免在 UpdateCapsule 调用期间要求固件查询视频模式。 |
包含“状态”字段 | 不包含“状态”字段 | BGRT 的“状态”字段描述了图像当前是否显示在屏幕上。 这不适用于固件更新显示封装。 |