设备更新中心用户指南

设备更新中心门户为 OEM 提供了执行下列操作的方法:

  • 将 OEM 自定义包 (OCP) 发布到 Windows 更新云
  • 基于外部测试版通道,将 OEM 自定义包发布到其设备
  • 根据外部测试版通道,将 OS 更新发布到其设备

设备更新中心的先决条件

在开始注册过程前查看以下要求。

  • 必须具有扩展验证 (EV) 代码签名证书。 请检查你的公司是否已有代码签名证书。 如果你的公司已有证书,请提供该证书。 你将需要证书来对文件进行签名. 如果公司没有证书,将需要在注册过程中购买证书。

  • 你需要在组织的 Azure Active Directory 中以全局管理员身份登录。 如果不知道组织是否有 Azure Active Directory 目录,请联系 IT 部门。 如果组织没有 Azure Active Directory,则可以免费创建一个

  • 必须有权代表组织签署法律协议。

第 1 步:进行设置

注册

  1. 创建一个 Windows 硬件开发中心帐户以访问设备更新中心 (DUC)。 将需要以下项:

    • 扩展验证 (EV) 代码签名证书:用于验证为更新提交的更新 cab 文件
    • 具有管理员权限的 Azure Active Directory (AAD) 帐户:用于签署法律协议

    有关注册过程的详细说明,请参阅注册硬件计划

  2. 注册 Windows 10 IoT 核心版服务

  3. 以管理员角色登录硬件开发中心,并为组织中的其他用户指定角色。 将需要以下项:

    • “驱动程序提交者”角色,用于提交更新
    • “发货标签所有者”角色,用于更新外部测试版发布

    有关详细说明 ,请参阅更改用户的角色

安装工具

  1. Windows 评估和部署工具包 (Windows ADK)
  2. IoT 核心版 ADK 加载项
  3. Windows 10 IoT 核心版程序包
  4. 从芯片供应商获取适用于你的平台的 BSP。 请参阅 Windows 10 IoT 核心版 BSP

设置环境

  1. 启动 IoTCorePShell(启动提升权限的命令提示符),并创建/打开你的工作区

    new-ws C:\MyWorkspace <oemname> <arch>
    (or)
    open-ws C:\MyWorkspace
    

    请注意,OEM 自定义包的初始版本设置为 10.0.0.0。

  2. 配置设备更新中心使用的 EV 证书和工作区中的代码签名证书。

    <!--Specify the retail signing certificate details, Format given below -->
    <RetailSignToolParam>/s my /i "Issuer" /n "Subject" /ac "C:\CrossCertRoot.cer" /fd SHA256</RetailSignToolParam>
    <!--Specify the ev signing certificate details, Format given below -->
    <EVSignToolParam>/s my /i "Issuer" /n "Subject" /fd SHA256</EVSignToolParam>
    
    • 根据证书详细信息更新“颁发者”、“主题”。
    • CrossCertRoot.cer 对应于跨证书列表中发布的交叉签名证书根。

    你可以使用用于硬件开发中心的 EV 证书,也可以获取其他的仅用于代码签名目的的 EV 证书。 建议为每种用途保留一份单独的证书。

步骤 2: 创建一个新产品

  1. 使用 Add-IoTProduct 创建新产品

    Add-IoTProduct <productname> <bspname>
    (or) newproduct <productname> <bspname>
    
  2. 出现提示时提供 SMBIOS 信息。 对于 Qualcomm,存储在 SMBIOS.cfg 文件中。 对于其他平台,你必须更新 BIOS 以反映这些值。

    有关 SMBIOS 的必填字段,请参阅 OEM 许可证要求。 更新中使用的关键字段包括:

    • 系统产品名称,在更新门户中称为设备型号。

    • 基板产品,在更新门户中称为“硬件变型 ID”。

    请注意,也会创建 IoTDeviceModel_<productname>.xml。 这用于在下一步中注册设备型号。

    屏幕截图 - Powershell 新产品

步骤 3:在设备更新中心注册设备型号

  1. 在设备更新中心门户中,选择“新建设备型号”。

    新建设备型号 - 选择

  2. 浏览你的文件,然后从你的工作区中选择 IoTDeviceModel_<productname>.xml

    新建设备型号 - 工作区

  3. 确认设备型号规格,然后按“提交”。

    新建设备型号 - 提交

    新的设备型号条目将添加到设备型号表中。 你还将在该表中看到下载链接。

  4. 下载 zip 文件 (CUSConfig.zip)

生成设备的基本映像

  1. 在 IoTCoreShell 中,使用 Import-IoTDUCConfig 导入配置文件

    Import-IoTDUCConfig <productname> "C:\Downloads\CUSConfig.zip"
    (or) importcfg <productname> "C:\Downloads\CUSConfig.zip"
    

    这还将编辑 OEMInputXML 文件以包含所需的 FM 文件和功能 ID。 这也会删除 IOT_GENERIC_POP 功能(如果存在)。

    导入配置文件

  2. 使用 Add-IoTSignatureRedo-IoTCabSignature 使用代码签名证书对所有必需的二进制文件进行签名

    # enable retail signing
    Set-IoTRetailSign On
    (or) retailsign On
    # sign all binaries in the workspace
    Add-IoTSignature C:\MyWorkspace *.sys,*.dll,*.exe
    (or) signbinaries C:\MyWorkspace *.sys,*.dll,*.exe
    # re-sign prebuilt bsp cabs if applicable
    Redo-IoTCabSignature <srcbspdir> <dstbspdir>
    
  3. 使用以下命令来生成基础映像

    # build all packages
    buildpkg All
    # build the image
    buildimage <productname> <retail/test>
    # build recovery image, if recovery mechanism needed
    buildrecovery <productname> <retail/test>
    

    这将生成一个包含 OEM 自定义包版本 10.0.0.0 的基础映像。

  4. 在设备上验证此映像。

步骤 4:发布更新

到目前为止,我们已经创建了一个可更新的映像,可用于设备的制造和发货。 在此步骤中,我们将了解创建更新包并在门户中发布更新包的过程。

创建更新包

  1. 首先使用 Set-IoTCabVersion 更新版本号

    Set-IoTCabVersion <a.b.c.d>
    (or) setversion <a.b.c.d>
    

    确保 a.b.c.d 的版本高于之前的版本集。

  2. 如果有新版本的 BSP 驱动程序可用,请将它们复制到之前设置的 BSP 文件夹(例如 C:\BSP)。 或者,将所有更新的驱动程序保存在不同的文件夹中(例如 C:\BSPv2),然后更新你的工作区 xml。

  3. 如果现有 appx 有新版本,请创建具有相同名称的新 appx。 请注意,生成的 customizations.xml 中的 ID 将与早期版本相同。

  4. 如果有更新版本的驱动程序可用,请更新二进制文件和打包 xml 文件。

  5. 更新任何其他适用的包内容。

  6. 使用 Add-IoTSignatureRedo-IoTCabSignature 使用代码签名证书对所有必需的二进制文件进行签名

    # enable retail signing
    Set-IoTRetailSign On
    (or) retailsign On
    # sign all binaries in the workspace
    Add-IoTSignature C:\MyWorkspace *.sys,*.dll,*.exe
    (or) signbinaries C:\MyWorkspace *.sys,*.dll,*.exe
    # re-sign prebuilt bsp cabs if applicable
    Redo-IoTCabSignature <srcbspdir> <dstbspdir>
    
  7. 使用以下命令来生成更新映像

    # build all packages
    buildpkg All
    # build the image
    buildimage <productname> <retail/test>
    # build recovery image, if recovery mechanism needed
    buildrecovery <productname> <retail/test>
    

    这将生成一个包含 OEM 自定义包版本 <a.b.c.d> 的基础映像。

  8. 在设备上验证此映像以确保设备启动时包含所有更新。

  9. 成功验证更新生成后,使用 Export-IoTDUCCab 导出所需的包

    Export-IoTDUCCab <productname> <retail/test>
    (or) exportpkgs <productname> <retail/test>
    

    <productname>_OCP_<version>.cab 将与 <productname>_OCP_pkgver.txt 文件一起在 <workspacedir>\Build\<arch>\<productname>\<config>\<version>\ 文件夹中创建,该文件列出了包含的 cab 及其版本信息。 此 cab 将使用工作区 xml 中配置的 EV 证书进行签名。

发布更新

  1. 在设备更新中心门户中,选择设备型号表中的设备型号

  2. 选择“更新提交”>“新建自定义包”

    新建自定义包

  3. 浏览你的文件,然后从你的工作区中选择 <productname>_OCP_<version>.cab

    新建自定义包 - 选择

  4. 确认发布版本信息,然后按“发布”。

    发布提交经过一个过程,包括:

    • 验证:检查上传包内容的真实性和正确性

    • 签名:使用 microsoft 证书对 cab 进行签名以发布到 Windows 更新

    • 发布:到 Windows 更新的实际发布步骤

    • 完成:完成发布过程

  5. 可以通过单击“状态”链接检查发布过程的状态。 此过程需要一些时间才能完成。

    新建自定义包 - 状态

步骤 5:定位更新

成功发布更新后,你现在可以通过指定定位规则来控制交付过程。

  1. 选择“更新外部测试版”,然后选择“新建外部测试版”

    新建外部测试版

  2. 在“新建外部测试版”对话框中:

    “新建外部测试版”对话框

    a. 指定环形 (Preview / / EarlyAdopterGeneralAvailability) ,例如预览版。 请注意,下载并包含在映像中的 xml 文件默认将此值设置为 GeneralAvailability

    • Preview 通道:更新一组有限的设备,主要是在实验室中

    • EarlyAdopter 通道:更新用户环境中的适量设备,包括自托管设备

    • GeneralAvailability 通道:更新市场上的每台设备

    b. 如果要指定新的操作系统版本,请选中“操作系统版本”框,然后选择所需的操作系统版本

    c. 如果要指定新的 OEM 自定义包版本,请选中“OEM 自定义包版本”框,然后选择所需的 OEM 自定义包版本,例如 a.b.c.d

    d. 选择“下一步”

注意

首先将操作系统版本更新到至少 10.0.17763.615 以支持 SHA-2 签名。 有关详细信息,请参阅下面“IoT 核心版的 SHA1 弃用”。

  1. 在“确认外部测试版”对话框中,选择“发布”。 定位提交经过一个过程,包括

    • 验证:验证定位规则的正确性

    • 定位:在 Windows 更新上设置的实际配置

    • 完成:完成定位过程

  2. 可以通过单击“状态”链接检查发布过程的状态。

    新建外部测试版状态

    此时,Windows 更新系统已设置为向设备提供所需的更新包。 传播设置可能需要几个小时。

第 6 步:验证设备上的更新

现在更新在 Windows 更新中可用,你现在可以在设备上验证更新。 提供这些通道是为了分阶段推出更新,从 Preview 开始,然后是 EarlyAdopter,最后是 GeneralAvailability。

  1. 将设备配置为 Preview 通道。 这可以使用 Azure DM API更新 UWP API 进行设置

  2. 让设备扫描更新,设备会检测已发布的更新,自动下载安装(根据配置的更新策略)。

    此过程可能需要 24 小时或更长时间,具体取决于扫描时间和活动时间设置。

适用于 IoT 核心版的 SHA1 弃用

已推出了针对 Windows 10 IoT 核心版操作系统的 SHA1 弃用,并且从 Windows 10 IoT 核心版 1809 七月更新 (10.0.17763.615) 开始启用仅支持 SHA-2。 从 2019 年 11 月开始,所有 OEM 自定义包都将仅使用 SHA-2 签名进行签名,并且所有设备应首先更新到 Windows 10 1809 七月更新 (10.0.17763.615) 或更高版本,以便能够针对 SHA-2 签名的 OEM 自定义包.

注意

SHA-2 签名的更新将无法在 10.0.17763.611 之前的 OS 版本中安装。 我们建议先将你的设备操作系统更新为至少此版本,然后再针对 OEM 自定义包更新。

对于运行 Windows 10 IoT 核心版 1803 的设备,你将需要更新到 Windows 10 IoT 核心版 1803 七月更新 (10.0.17134.885)。 我们强烈建议将 1803 设备也更新到 1809 版本七月更新。

OEM 签名和交叉证书根到期

交叉签名的根证书是 SHA1,并且将在其到期日之前获得支持。 到期后不会影响映像中已签名的驱动程序,但会影响到期日后新驱动程序的签名。

重要

从 Windows 10 IoT 核心版 1809 2020 年 11 月 10 日更新 (17763.1577) 开始,支持 OEM 内核驱动程序签名。 这样,代码签名证书便不再需要链接到交叉签名的根。 OEM 签名需要为零售和测试映像启用安全启动和设备保护功能。 有关工具更新和示例证书,请参阅 IoT-ADK-AddonKit 17763-v7 分支。

有关 SHA1 弃用的详细信息,请参阅以下链接: