将恢复机制添加到 Windows 10 IoT 核心映像

可以使用以下提供的步骤将恢复机制添加到映像,使 WinPE 用作安全的操作系统,WIM 文件用作恢复分区中的恢复 SW。

有关可能的机制的详细信息,请参阅 Windows 10 IoT 核心版恢复

步骤 1:使用恢复分区更新设备布局

在 devicelayout.xml 文件中,添加具有以下属性的新分区 MMOS

  • FAT32 文件系统
  • 大小至少为 2GB(以容纳 WinPE wim 和恢复 wim)
  • 分区类型
    • GPT : {ebd0a0a2-b9e5-4433-87c0-68b6b72699c7}
    • MBR : 0x07

以下提供的用于 GPT 设备(假设扇区大小为 512)的示例 xml 片段

<Partition>
    <Name>MMOS</Name>
    <FileSystem>FAT32</FileSystem>
    <TotalSectors>4096000</TotalSectors>
    <Type>{ebd0a0a2-b9e5-4433-87c0-68b6b72699c7}</Type>
</Partition>

另请参阅 QCDB410C 设备布局

以下提供的用于 MBR 设备的示例 xml 片段

<Partition>
    <Name>MMOS</Name>
    <FileSystem>FAT32</FileSystem>
    <TotalSectors>4096000</TotalSectors>
    <Type>0x07</Type>
</Partition>

另请参阅 MBR 8GB 恢复设备布局

步骤 2:配置 BCD 设置

在此步骤中,在 BCD 设置中将新添加的 MMOS 分区定义为可启动分区,启用恢复顺序并将其配置为启动到此分区。 以下给定包提供了这些设置,你可以随时使用这些包。 根据设备选择 GPT 或 MBR 包。

步骤 3:准备 WinPE 映像

Windows 10 ADK 版本 1709 包含适用于所有体系结构(x86/amd64 和 arm)的 Windows 10 预安装环境。 对于 Windows 10 ADK 版本 1809,需要安装 ADK 的 Windows PE 加载项。 在此 WinPE 中添加以下内容

  • 用于设备上恢复过程的恢复脚本

    • startnet.cmdstartnet_recovery.cmd:模板目录(请参阅 templates\recovery)中的预定义脚本。
    • 配置文件:基于设备布局的生成文件,位于 Build\<arch>\<bspname>\recovery 中。
  • 恢复自定义文件(可选)

    • RecoveryGUI.exe:可选的简单 UI,用于在设备上隐藏恢复 shell 提示符。 recoveryGUI.exe 可以是为目标 CPU 生成的 C++ 应用程序,也可以是应用程序的 .NET Framework 4 Windows。 必须修改 Newwinpe.cmd,以将 .NET Framework 4 功能添加到 WinPE 映像。
    • pre_recovery_hook.cmdpost_recovery_hook.cmd:可选挂钩,用于在恢复过程前后添加其他操作。
    • 将这些文件置于 Source-<arch>\bsp\<bspname>\WinPEExt\recovery 文件夹中。
  • BSP 驱动程序(可选)

    • 可能需要将 BSP 驱动程序添加到 winpe 映像,以启动到/写入到设备平台上的存储。
    • 将所需的驱动程序置于 Source-<arch>\bsp\<bspname>\WinPEExt\drivers 文件夹中。

可以在 IoTCorePShell 中使用 New-IoTWindowsImage 命令,为 BSP 创建具有以上内容的 WinPE 映像。

New-IoTWindowsImage <product> <config>
(or) newwinpe <product> <config>

此脚本会将 winpe 输出在 Build\<arch>\<product>\<config>\winpe.wim 中。

步骤 4:更新功能清单文件和 OEMInputFile

  • 使用以下更改更新 <BSP 名称>FM.xml(请参阅 QCDB410CFM.xml 示例

    • 添加新的设备布局包,在以下示例中指定新的 SOC 名称 QC8016-R。
    <DeviceLayoutPackages>
       <PackageFile SOC="QC8016-R" Path="%PKGBLD_DIR%" Name="%OEM_NAME%.QCDB410C.DeviceLayout-R.cab" />
       <PackageFile SOC="QC8016" Path="%BSPPKG_DIR%" Name="Qualcomm.QC8916.DeviceLayout.cab" />
    </DeviceLayoutPackages>    
    
  • 使用以下更改更新 <产品名称>/TestOEMInput.xml(和 RetailOEMInput.xml)(请参阅恢复示例

    • 指定 <BSP 名称>FM.xml 中定义的 SOC 名称

      <SOC>QC8016-R</SOC>
      
    • 将 RECOVERY_BCD 功能添加在 OEM 部分

      <OEM>
      ...
      <Feature>RECOVERY_BCD</Feature>
      ...
      </OEM>
      
  • 更新 oemcustomization.cmd 以调用 Recovery.BcdEdit.cmd

    REM The below should be called on every boot
    if exist C:\RecoveryConfig\Recovery.BcdEdit.cmd (
        call C:\RecoveryConfig\Recovery.BcdEdit.cmd
    )
    

步骤 5:使用 New-IoTRecoveryImage 生成恢复映像。

# Build all packages
New-IoTCabPackage All
(or) buildpkg All
# Build the product image
New-IoTFFUImage <product> <config>
(or) buildimage <product> <config>
# Build the recovery image
New-IoTRecoveryImage <product> <config>
(or) buildrecovery <product> <config>

这会将恢复文件生成为 Flash_Recovery.ffu