用于 OEM 的 OS 自定义项

OEM 可以使用以下指定方法自定义 OS 的各个方面。

OOBE 应用

IoTCore 有一个内置 OOBE 应用,该应用在设备首次启动时运行。 该应用会一直显示,直到所有预配包都在后台进行了处理,且 OEM 应用可以作为启动应用进行启动。

该 OOBE 应用可以使用具有以下属性的 settings.json 进行自定义:

  • backgroundColor:屏幕背景色
  • background:背景图像(jpg 文件)
  • progressRingVisible:可以显示或隐藏旋转点
  • welcomeText:屏幕中心以大字体显示的文本
  • pleaseWaitText:旋转点下方显示的文本
  • animation:可在此处指定动画 gif
  • animationMargin:动画 gif 的定位
  • left、top、right、bottom

settings.json 中引用的所有文件都应位于 settings.json 文件所在的文件夹中。 下面提供了示例代码片段

{
"backgroundColor":  "#FF0000FF",
"progressRingVisible": true,
"welcomeText": "Welcome to OOBE customization",
"pleaseWaitText": "please wait ..."
}

注意

settings.json 文件需要以 Unicode (UCS-2) 编码方式进行编码。 UTF-8 将不起作用。

手动验证设置

  1. 使用所需的设置创作 settings.json 文件
  2. 连接到 IoT 设备(使用 SSH使用 PowerShell),将 settings.json 文件连同所有图形资产一起放在某个目录(例如 C:\Data\oobe)中
  3. 使用以下命令将设备配置为允许从所有 appx 文件访问此目录
folderpermissions C:\Data\oobe -e
  1. 使用以下命令启动 OOBE 应用程序
iotstartup add headed IoTUAPOOBE
  1. 验证用户界面

向 IoT 核心版映像添加设置

  1. 使用 Custom.OOBEApp 包并修改包 xml 文件以添加图形资产

  2. 将 settings.json 和图形资产复制到该包文件夹。

  3. 在 oemcustomizations.cmd 文件中添加 folderpermissions C:\Data\oobe -e,以确保在系统启动时调用此项。

  4. 在 OEMInput.xml 中包括功能 ID CUSTOM_OOBEAPP,请注意,这是在 OEMCOMMONFM.xml 中定义的。

故障设置

对于 IoT Core 产品,建议将设备配置为在故障时重启,并隐藏故障转储屏幕 (BSOD)。 这是通过设置以下注册表项实现的:

HKLM\SYSTEM\CurrentControlSet\Control\CrashControl 自动重启设置为 1 DisplayDisabled 设置为 1

手动验证设置

  1. 连接到 IoT 设备(使用 SSH使用 Powershell)并设置以下注册表项

reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl” /v AutoReboot /t REG_DWORD /d 1 /f reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl” /v DisplayDisabled /t REG_DWORD /d 1 /f

  1. 请参阅从键盘强制系统崩溃,配置一个用于强制系统崩溃的键。
  2. 使用配置的键强制系统崩溃,并验证设备是否自动重启且未显示故障转储屏幕。

向 IoT 核心版映像添加设置

  1. 使用 Custom.Settings
  2. 在 OEMInput.xml 中包括功能 ID CUSTOM_SETTINGS,请注意,这是在 OEMCOMMONFM.xml 中定义的。

注意

在 Windows 10 版本 1809 中,添加了 IOT_CRASHCONTROL_SETTINGS 功能来解决此自定义的问题。

位置设置

从 Windows 10 IoTCore RS5 2019 年 11 月“11 B”版本(操作系统版本 17763.865)开始,IoT 核心版的位置服务将默认配置为“关闭”。 如果你是 OEM,并且要开启定位服务,请执行以下步骤。 这仅适用于 IoT 核心版。

在以下注册表项下:

HKLM\Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\Capabilities\location\edition InitSystemGlobalConsentDenied 设置为 0 InitUserGlobalConsentDenied 设置为 0

工具包构建者应参阅 /windows-hardware/manufacture/iot/add-a-registry-setting-to-an-image,以获取有关使用这些注册表设置构建自定义映像的说明

BCD 设置

启动配置数据库设置可用于配置各种功能。 请参阅 BCDEdit 命令行选项,了解各种可用的设置和选项。

下面列出了一些关键功能

禁用启动 UX 动画

  1. 可以使用以下命令完成手动设置
bcdedit -set {bootmgr} nobootuxprogress true
  1. Custom.BCD.xml 文件中指定此设置
<?xml version='1.0' encoding='utf-8' standalone='yes'?>
<BootConfigurationDatabase
xmlns="http://schemas.microsoft.com/phone/2011/10/BootConfiguration"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
IncludeDescriptions="true" IncludeRegistryHeader="true">
<Objects>
<!-- Windows Boot Manager -->
<Object SaveKeyToRegistry="false">
<FriendlyName>Windows Boot Manager</FriendlyName>
<Elements>
<Element>
<DataType>
<WellKnownType>Boot UX Progress Animation Disable</WellKnownType>
</DataType>
<ValueType>
<BooleanValue>true</BooleanValue>
</ValueType>
</Element>
</Elements>
</Object>
</Objects>
</BootConfigurationDatabase>
  1. 使用 Custom.BCD 包在映像中包括此设置,并将功能 ID CUSTOM_BCD 添加到 OEMInput.xml 文件

有多种方法可以替换由 BIOS 或 UEFI 显示的启动徽标。 一种方法是授权 UEFI,或向主板制造商供应商支付费用来执行此操作,并直接更改 UEFI 源代码。 或者,在 UEFI 实现支持已签名的可加载 UEFI 驱动程序的设备上,此处有一个示例: https://github.com/Microsoft/MS_UEFI/tree/share/MsIoTSamples 演示如何生成替换启动徽标的驱动程序,并为 bootmgr 提供 BGRT 表,以便 Windows 启动过程在启动期间保留徽标,而不是将其替换为 Windows 徽标。

启用外部测试版签名

  1. 可以使用以下命令完成手动设置:
bcdedit /set {bootmgr} flightsigning on
bcdedit /set flightsigning on
  1. 若要在映像中包括此设置,可以将以下片段添加到 Custom.BCD.xml
<!--  Allow Flight Signing Certificate -->
<Object SaveKeyToRegistry="false">
<FriendlyName>Global Settings Group</FriendlyName>
<Elements>
<Element>
<DataType>
<WellKnownType>Allow Flight Signatures</WellKnownType>
</DataType>
<ValueType>
<BooleanValue>true</BooleanValue>
</ValueType>
</Element>
</Elements>
</Object>

运行时自定义项

除了使用上述静态自定义项外,还可以在运行时进行自定义。

  1. OEMCustomizations.cmd
  • 每次启动时,IoTCore Shell 都会使用系统特权调用放置在 c:\windows\system32 中的此命令文件
  • 在这里,你可以在此 cmd 文件中指定任何自定义操作,但建议保留此选项作为自定义的最后手段选项
  • 在 iot-adk-addonkit 中,此文件针对产品目录下的每个产品创建。 在 OEMInput xml 文件中添加功能 ID CUSTOM_CMD,以将其包括在映像中。
  • 请参阅 Custom.Cmd 包和示例 oemcustomizations.cmd
  1. Customizations.xml
  • 这是用于创建预配包的设置文件
  • 此包放置在 c:\windows\provisioning\packages 中,目的是在启动时自动处理此预配包
  • 在 iot-adk-addonkit 中,此文件针对产品目录下的每个产品创建。 在 OEMInput xml 文件中添加功能 ID PROV_AUTO,以在映像中包括它。
  • 请参阅 Provisioning.Auto 包和示例 Customizations.xml
  • 有关更多详细信息,请参阅:
  • 添加预配包
  • IoT 核心版支持的配置服务提供程序 (CSP) 的预配