将恢复机制添加到 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 包。
- Recovery.GPT-BCD 包
- Recovery.MBR-BCD 包
- Recovery.BCD.xml 声明 MMOS 分区可用性。
- Recovery.GPT-BcdEdit 包
- Recovery.MBR-BcdEdit 包
- Recovery.BcdEdit.cmd 启用恢复顺序,并将其配置为启动到 MMOS 分区。
步骤 3:准备 WinPE 映像
Windows 10 ADK 版本 1709 包含适用于所有体系结构(x86/amd64 和 arm)的 Windows 10 预安装环境。 对于 Windows 10 ADK 版本 1809,需要安装 ADK 的 Windows PE 加载项。 在此 WinPE 中添加以下内容
用于设备上恢复过程的恢复脚本
startnet.cmd
、startnet_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.cmd
和post_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