实验 1a:创建基本映像 (create-a-basic-image)

首先,我们将创建一个基本 Windows 10 IoT 核心版(IoT 核心版)映像,并将其刷入特定硬件设备。

我们将创建一个产品文件夹,用于表示第一次设计。 对于第一次产品设计,我们将仅自定义足以使 IoT 核心设备能够启动和运行内置 OOBE 应用的内容,该应用应可在与 HDMI 兼容的监视器上看到。

为了更轻松地运行这些命令,我们将安装并使用 IoT 核心版 shell,它预设了几个常用的路径和变量。

先决条件

在创建 IoT 核心版映像之前,请确保技术人员电脑上已安装必要的工具。

请参阅获取自定义 Windows IoT 核心版所需的工具以准备好技术人员电脑。

重要

使用的 ADK 版本必须与下面使用的 IoT 核心版包的版本匹配。

要完成此部分,需要安装以下工具:

  • Windows 评估和部署工具包 (Windows ADK)
  • Windows 10 IoT 核心版包
  • IoT 核心版 ADK 加载项
  • IoT 核心版 Powershell 环境
  • 文本编辑器,比如记事本或 VS Code

创建基本映像

创建工作区

  1. 在 Windows 资源管理器中,转到安装了 IoT 核心版 ADK 加载项的文件夹(例如 C:\IoT-ADK-AddonKit),然后打开 IoTCorePShell.cmd。 系统应该提示你以管理员身份运行。

这将加载 PowerShell 模块,并检查 ADK、IoT 核心版工具包的版本。 还会检查证书存储中的测试证书,如果证书不存在,则会自动安装它们。

故障排除:错误:“系统找不到指定路径”。 如果收到此错误,请右键单击图标,并将“目标”中的路径修改为安装这些工具所选的位置。

  1. 在 IoTCorePShell 中,使用 New-IoTWorkspace 为体系结构 arm 创建一个新的工作区,例如 C:\MyWorkspace,其 OEM 名称为 Contoso
New-IoTWorkspace C:\MyWorkspace Contoso arm
(or) new-ws C:\MyWorkspace Contoso arm

IoT 核心版支持四种体系结构:x64、x86、arm 和 arm64。

OEM 名称中仅支持字母数字字符,这些字符会用作各种生成的文件名的前缀。

这会生成 IoTWorkspace.xml,并设置此设计的版本号,以供未来更新。 第一个版本号默认为 10.0.0.0。

所需的包(如 Registry.Version、Custom.Cmd 和 Provisioning.Auto)将自动导入工作区中。

PowerShell session showing setup of new IoTWorkSpace

  1. 将示例包导入工作区中。 可以选择有选择地导入包或导入所有包。
# Importing Recovery packages from sample workspace (create-a-basic-image)
Import-IoTOEMPackage Recovery.*
(or) importpkg Recovery.*
# Below example imports all packages from the sample workspace (create-a-basic-image)
Import-IoTOEMPackage *
(or) importpkg *

导入 Raspberry Pi BSP

下一步是获取电路板支持包文件及额外的/生成 .CAB 文件,以添加到 FFU 文件中。

  1. RPi_BSP.zip 下载到本地目录,例如 C:\Downloads\RPi_BSP.zip

  2. 使用 Import-IoTBSP 导入 BSP

Import-IoTBSP RPi2 C:\Downloads\RPi_BSP.zip
(or) importbsp RPi2 C:\Downloads\RPi_BSP.zip

有关可用 BSP 的详细信息,请参阅 Windows 10 IoT 核心版 BSP

创建测试项目

在 IoT 核心版 Shell 环境中,创建一个使用 Raspberry Pi 2 BSP 的新产品文件夹。 此文件夹表示要生成的新设备,它包含可用于启动项目的示例自定义文件。 使用 Add-IoTProduct 创建新产品

Add-IoTProduct ProductA RPi2
(or) newproduct ProductA RPi2

系统将提示输入 SMBIOS 信息,例如制造商名称(OEM 名称)、系列、SKU、BaseboardManufacturer 和 BaseboardProduct。 下面是一些示例值:

  • 系统 OEM 名称:Fabricam
  • 系统系列名称:FabricamHub
  • 系统 SKU 号:AI-001
  • 基板制造商 Arrow
  • 基板产品:Raspberry Pi 2

BSP 名称与 BSP 的文件夹名称相同。 可以通过查看 C:\MyWorkspace\Source-<arch>\BSP 文件夹来了解可用的 BSP。

此时将创建文件夹 C:\MyWorkspace\Source-<arch>\Products\\ProductA

New Product

OemCustomization.cmd 文件

每个映像都包含 oemcustomization.cmd 文件,该文件将在每次启动设备时运行。 可以修改此文件,以自定义启动时执行的内容。 在本示例中,此文件位于 C:\MyWorkspace\Source-<arch>\Products\\ProductA 下。 该文件内容如下所示:

@echo off
REM OEM Customization Script file
REM This script if included in the image, is called everytime the system boots.

reg query HKLM\Software\IoT /v FirstBootDone >nul 2>&1

if %errorlevel% == 1 (
    REM Enable Administrator User
    net user Administrator p@ssw0rd /active:yes
    if exist C:\Data\oobe (
        call folderpermissions.exe 'C:\Data\oobe -e'
    )
REM - Enable the below if you need secure boot/bitlocker
REM Enable Secureboot
REM if exist c:\IoTSec\setup.secureboot.cmd  (
REM    call c:\IoTSec\setup.secureboot.cmd
REM )

REM Enable Bitlocker
REM if exist c:\IoTSec\setup.bitlocker.cmd  (
REM    call c:\IoTSec\setup.bitlocker.cmd
REM )
    reg add HKLM\Software\IoT /v FirstBootDone /t REG_DWORD /d 1 /f >nul 2>&1
)

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

REM Set the crashdump file locations to data partition, set on every boot.
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl" /v DedicatedDumpFile /t REG_SZ /d C:\Data\DedicatedDumpFile.sys /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl" /v DumpFile /t REG_SZ /d C:\Data\MEMORY.DMP /f

注意

请注意,默认情况下,自定义测试映像禁用了 BitLocker 和 SecureBoot 等安全功能。 如果要包含这些功能(在零售版映像中),可以在生成映像之前取消注释文件中相应的行。

注意

请注意,此文件中的命令使用本地系统特权运行。

生成包

在 IoT 核心版 Shell 中,通过使用 New-IoTCabPackage 在工作文件夹中生成所有包,让你的环境准备好创建产品:

New-IoTCabPackage All
(or) buildpkg All

注意

如果在测试模式下生成包时收到 SignTool 错误,请运行 installoemcerts.cmd 在技术人员电脑上安装测试证书。

生成映像

  1. 弹出任何可移动存储驱动器,包括 Micro SD 卡和任何 USB 闪存驱动器。

  2. 通过使用 New-IoTFFUImage 在 IoT 核心版 PowerShell 环境中输入以下命令,生成 FFU 映像文件:

New-IoTFFUImage ProductA Test
(or) buildimage ProductA Test

这会在 C:\MyWorkspace\Build\<arch>\ProductA\Test 中生成包含基本映像的 FFU 文件。 此测试映像将包括可用于调试的其他工具。 最终的 FFU 文件大约需要 10 到 30 分钟才能生成。

若要将所有输出定向到控制台而非日志文件,请添加 -Verbose 标志,如下所示。

new-IoTFFUImage -Verbose ProductX Test

注意

如果收到 0x80070005 或 0x800705b4 错误代码,请拔下所有外部驱动器(包括 Micro SD 卡和 U 盘),然后重试。 如果这不起作用,请返回到设置电脑并下载示例,确保已安装所有内容。

刷写 Windows IoT 核心版映像

现在 FFU 映像文件已生成,可以使用此文件来刷写映像并将其部署到设备。 下面列出了将 FFU 映像文件刷入特定制造商设备的步骤。

先决条件/要求

要完成此部分,需要安装以下工具:

  • Windows IoT 核心版仪表板(仅限 Raspberry Pi)
  • Dragonboard 更新工具(仅限 Qualcomm DragonBorad)
  • 部署映像服务和管理 (DICM) 工具(仅限 Intel 设备)

由于此处使用的是 Raspberry Pi,因此我们将从 Raspberry Pi 开始,但也会介绍如何在其他设备上刷写映像。

Raspberry Pi

  1. 启动 Windows IoT 核心版仪表板。

  2. 将 Micro SD 卡插入技术人员电脑,并在工具中选择它。

  3. 在“设置新设备”部分中,选择“设备类型”下的 Broadcomm [Raspberry Pi 2 和 3]。

  4. 在操作系统内部版本下选择“自定义”

  5. 单击“浏览”,导航并选择之前创建的 FFU 文件。 在本案例中,FFU 文件位于 C:\MyWorkspace\Build\<arch>\ProductA\Test\Flash.ffu。 然后单击“下一步”

  6. 验证“驱动器”选择下是否列出了你的 Micro SD 卡

  7. (可选)可以为设备设置“设备名称”和“管理员密码”选择。

  8. 选中“我接受软件许可条款”复选框(右下角)并单击“安装”

IoT Dashboard dialog box in Windows settings showing new device set up

现在 Windows IoT 核心版仪表板将打开一个命令窗口,并使用 DISM(部署映像服务和管理工具)将 FFU 文件刷入 Micro SD 卡。

Raspberry Pi Flashing DISM

注意

或者,也可以使用 DISM 命令手动刷写映像: dism.exe /Apply-Image /ImageFile:"D:\flash.ffu" /ApplyDrive:\\.\PhysicalDrive0 /SkipPlatformCheck

完成刷写过程后,从技术人员电脑弹出 Micro SD 卡,并将其插入 Raspberry Pi 中。 重新连接电源以启动 Windows IoT 核心版。 应会看到 IoT 核心版默认应用,其中显示有关映像的基本信息。

Qualcomm

DragonBoard 410c

Qualcomm 提供了 Dragonboard 更新工具应用程序,我们将使用它将 FFU 映像文件刷入 Dragonboard 410c。 可以下载 x86 或 x64 版本(建议下载 x64)。

DragonBoard update tool

安装 DragonBoard 更新工具后,必须先将 DragonBoard 设备置于编程模式下。 为此,请将 dipswitch #1(位于设备背面)设置在“开”的位置

Dragonboard Dipswitch

使用 MicroUSB 电缆将 DragonBoard 设备连接到技术人员电脑,并接通电路板电源。

运行 DragonBoard 更新工具,浏览到要部署的 FFU 映像文件,然后按“程序”按钮。 当设备刷写 FFU 文件时,应会看到绿色的“连接状态”和一个进度栏。

完成刷写过程后,断开电路板电源和 microUSB 电缆连接。 然后需要将 dipswitch #1 翻转回“关”的位置。 重新连接电源以启动 Windows IoT 核心版。

DragonBoard Update tool position 1DragonBoard Update tool position 2

英特尔

Apollo Lake/Braswell/Cherry Trail

我们将使用 DISM(部署映像和服务管理工具)和可启动的 U 盘将 FFU 映像文件刷入指定的 Intel 设备 (Apollo Lake/Braswell/Cherry Trail)。 有关 DISM 的其他信息可在此处找到。

创建可启动的 USB 驱动器

首先需要创建可用于在指定 Intel 硬件设备上启动的可启动 USB 驱动器。 为此可以使用 Window PE (WinPE)(有关 WinPE 的其他信息可在此处找到)。

  1. Windows ADK Windows 预安装环境加载项安装 WinPE。

WinPE Install screen

  1. 准备 USB 驱动器

必须先正确格式化要使用的 USB 驱动器,然后才能在其上加载 WinPE。 请按照以下步骤正确格式化 USB 驱动器:

  • 从管理员命令提示符运行 diskpart 工具
  • 运行 list disk 查看可用磁盘的列表
  • 运行 select disk X,其中 X 对应于 USB 驱动器的磁盘号
  • 运行 clean 清理所选磁盘

注意

如果遇到以下错误,请运行 convert mbr

ERROR: Failed to format "F:"; DiskPart errorlevel -2147212244
  • 运行 create partition primary 在磁盘上创建主分区
  • 运行 format fs=fat32 quick 格式化驱动器
  • 运行 assign 分配驱动器
  • 退出 diskpart。 现在,USB 驱动器已格式化并已准备好安装 WinPE。
  1. 创建 WinPE 工作文件

现在,我们需要在技术人员电脑上创建 Windows PE 文件的工作副本。 可以使用“部署和映像工具环境”命令行程序完成此操作。 启动 Deployment and Imaging Tools Environment 的最简单方法是通过“开始”菜单搜索部署。

以管理员身份运行“部署和映像工具环境”命令行程序,并运行以下命令:

copype amd64 C:\WinPE_amd64

这会在 C:\WinPE_amd64 创建 Windows PE 文件的工作副本。

将 USB 驱动器插入技术人员电脑,并运行此命令以在 USB 驱动器上安装 Windows PE。 确保将 X 替换为 USB 驱动器的驱动器号:

MakeWinPEMedia /UFD C:\WinPE_amd64 X:
  1. 将 FFU 文件复制到 USB 驱动器的根驱动器。
  2. 将 USB 驱动器插入 Intel 硬件设备,然后从 USB 驱动器启动。 可能需要进入硬件设备的 BIOS(或启动菜单),以指定从 USB 驱动器启动。
  3. 启动 Windows PE 环境后,将看到命令窗口。 将驱动器和当前目录更改为 FFU 文件的位置(根据驱动器枚举,它可能位于 C: 或 D: .中。等)并运行以下命令来刷写 FFU 映像文件:
dism.exe /Apply-Image /ImageFile:"C:\IoT\Workspaces\ContosoWS\Build\ARM\ProductX\Test\flash.ffu" /ApplyDrive:\\.\PhysicalDrive0 /SkipPlatformCheck

注意

大多数情况下,要刷写的板载存储目标枚举为 PhysicalDrive0,但是,如果有多个存储设备,则可以枚举为其他驱动器号。 可以使用 diskpart 中的 list disk 命令来验证驱动器号。

  1. 完成刷写过程后,关闭硬件设备电源并移除 USB 驱动器。 将硬件设备重新连接电源,以启动 Windows IoT 核心版。
Diskpart 命令
C:\>diskpart
 Microsoft DiskPart version 10.0.17134.1
 Copyright (C) Microsoft Corporation.
 On computer: LWIN-CNCY-BUILD

 DISKPART> list disk

 Disk ###  Status         Size     Free     Dyn  Gpt
 --------  -------------  -------  -------  ---  ---
 Disk 0    Online          447 GB  1024 KB        *
 Disk 1    Online          167 GB  1024 KB        *
 Disk 2    Online           14 GB      0 B        *

 DISKPART> select disk 2
 Disk 2 is now the selected disk.

 DISKPART> clean
 DiskPart succeeded in cleaning the disk.

 DISKPART> convert mbr
 DiskPart successfully converted the selected disk to MBR format.

 DISKPART> create partition primary
 DiskPart succeeded in creating the specified partition.

 DISKPART> format fs=fat32 quick
   100 percent completed

 DiskPart successfully formatted the volume.

 DISKPART> assign
 DiskPart successfully assigned the drive letter or mount point.

 DISKPART> exit
WinPE 命令
copype amd64 C:\WinPE_amd64
MakeWinPEMedia /UFD C:\WinPE_amd64 X:
DISM 命令(在 Intel 硬件设备上通过 WinPE)
X:\WinPE>d:

D:\>dism.exe /Apply-Image /ImageFile:"C:\IoT\Workspaces\ContosoWS\Build\ARM\ProductX\Test\flash.ffu" /ApplyDrive:\\.\PhysicalDrive0 /SkipPlatformCheck

后续步骤

将设备保持打开状态,然后继续实验 1b:将应用添加到映像