分类
Windows

在树莓派 3B 上安装 Windows 10

尝试在树莓派上安装完整 Windows 10。

由于已经在树莓派 3B 上安装了 UEFI 固件(详见 RPI3 上的 UEFI),这里再体验一下安装完整 Windows 10 企业版。

首先需要说明的是,RPI 3B 由于性能问题导致 Windows 的安装体验异常坎坷。即便安装完成,也基本无法使用。具体瓶颈在于 USB 速度和内存。因此,这里建议读者:

  1. 购买高速 U 盘甚至是 SSD。尽可能跑满 USB 2.0。当然也可以用 SD 卡。
  2. 安装风扇为 CPU 降温。
  3. 一个稳定的电源。
  4. 一个保护壳。
  5. 放弃在 RPI3 上安装 Windows 的尝试。

如若读者像博主一样爱摆弄一些新奇物件,可以继续往下看。

在 RPI 上安装 Windows 并非难事,这得益于社区支持的 UEFI 固件、Windows on Arm 版本,以及社区和 Microsoft 官方提供的 RPI 驱动。

安装前准备

安装前,需要准备如下物品:

  1. 一个高速 USB 存储设备,或 SD 卡。注意,博主使用的是 U 盘安装方式。SD 卡安装理论可行,但尚未经过博主验证。
  2. 安装了 UEFI 固件的 SD 卡。详见 RPI3 上的 UEFI
  3. 一个 Windows on Arm 安装镜像(见下文)。
  4. 具有管理员权限的 Windows 设备。
  5. RPI3 Windows 驱动(见下文)。

Windows on Arm 镜像

Windows on Arm(简称 WoA)是 Windows 的 Arm 版。目前,官方尚未向大众提供 ISO 下载地址,但仍可以获取。

  1. 可以通过 uupdump.ml 下载并合并 ISO。该方式完全合法,并可以获得最新版镜像。
  2. 在网上搜索泄露的 ISO。该方式不一定合法,且 ISO 不一定是最新。这里提供博主获取到的 ISO 文件名,感兴趣的读者可以自行搜寻: SW_DVD9_Win_Pro_10_2004.3_64ARM_English_Pro_Ent_EDU_N_MLF_-2_X22-33739.ISO

通过 uupdump 生成 ISO 将占用大量系统资源。遂建议使用单独设备或空闲时间运行,避免中断。

注意

RPI3 Windows 驱动

读者可以从 WoRProject 处下载闭源 Windows 驱动。这些驱动是运行 Windows 所必须的(如 USB 驱动等)。注意,很多驱动尚未完全支持,故请自行检查可用性。

地址:https://github.com/worproject/RPi-Windows-Drivers

下载后解压即可。

安装方式

同常规 Windows 安装一样,可以通过 Setup 或命令行的方式安装。Setup 方式无法安装到 USB 设备:这应该是 Microsoft 的特意限制。因此,如读者需安装到 USB 设备而非 SD 卡,则应使用命令行安装。

由于博主使用 USB 设备安装,故仅介绍命令行方式。

两种方式均需的步骤:把驱动打进 WIM

不管读者使用 Setup 还是命令行安装,都需要修改 WIM 来添加上文所述的 RPI 驱动。

读者需要将驱动打进系统镜像(通常为 install.wim)。

如若使用 Windows PE 安装,则还需要打进 PE 镜像(通常为 boot.wim)。

打驱动的步骤为:

  1. 挂载 WIM 镜像
  2. 打驱动
  3. Commit 修改
  4. 卸载 WIM 镜像

读者可以自行搜索 Microsoft 文档以了解详细介绍。以下步骤演示如何打驱动:

DISM /Mount-image /ImageFile:<镜像.wim> /Index:<索引> /MountDir:<挂载路径>
DISM /Image:<挂载路径> /Add-Driver:<ZIP 解压根目录,应包含诸多子目录> /Recurse
DISM /Unmount-Image /Image:<挂载路径> /Commit

说明:索引是需要安装的 Windows Edition,可以通过 Dism /Get-ImageInfo 获取。PE 可能有两个索引,为了保险起见可以都打上。

说明:Zip 解压根目录是 RPI 驱动 Zip 解压根目录,这样做是方便一次性打所有驱动。

示例输出

卸载前也可以使用 Dism /Get-Drivers 验证是否成功:

Dism /Get-Drivers 示例输出

在处理完所有镜像后,即可安装了。对于命令行安装详细步骤,可以参考 使用命令行安装 Windows。当然,整个步骤无需在 Windows PE 上进行,其他 Windows 设备也可以。(阅读前请务必参考下文「重要提示」。)

注意,能否在其他架构设备上为 AARch64 设备创建 BCD 尚未测试。如若出现任何问题,可以到 Windows PE 上创建。

注意

重要提示:关于 USB 设备 ESP 分区的挂载问题

Windows 似乎不允许挂载 USB 设备的 ESP 分区。读者若尝试在 Diskpart 中使用 ASSIGN 命令挂载,会提示不允许在可移动设备上使用该命令。Windows 似乎使用分区类型来判断是否是 ESP 分区,所以可以采取如下临时解决方案:

  1. 找一台 Linux 设备
  2. 使用 fdisk 或其他工具调整分区类型为 Microsoft Basic Data
  3. 文件系统保持不变:FAT32。

之后再到 Windows 设备上运行 bcdboot 复制 ESP 内容并创建 BCD。完成后务必将分区类型改回 ESP。

改回是由于 Windows 初次启动时会运行 C:\Windows\System32\oobe\windeploy.exe,即所看到的「Getting Device Ready」、「Starting Service」界面。该程序会执行 Specialize,其中一些步骤同 BCD 有关。

Windows 会根据分区类型来查找 ESP 分区。如若找不到类型为 ESP 的分区,就会报错。届时 Specialize 会失败,并弹出对话框「Windows Setup could not configure Windows to run on this computer’s hardware.」

这也就是为何需要将分区类型改回。改回后可以自行使用 bcdedit 命令确认是否可以读取 ESP 分区中的 BCD。(若没有改回,会出错。)

重要提示二:驱动签名问题

WoRProject 中的 Windows 驱动很多都需要测试签名,而 Windows 默认不允许这样做。一个做法是使用 BCDEdit 启用之,然而博主并没有成功。

不这样做会在每次启动时报错,提示驱动没有签名。这时可以按 F8 进入选项,选择 7 禁用驱动强制签名即可。

重要提示三:关于 WinRE

该问题博主也尚未解决,读者可以自行研究如何解决。

预警

博主遇到了一个棘手的问题,即 Specialize 后重启会直接进入 Windows RE。目前的临时规避方案是将 C:\Recovery\ 目录重命名。期待更好的解决方案和调查。

安装后配置

安装后即可根据正常方式配置了。请注意,1G 内存几乎无法运行 OOBE,同时 CPU 温度过高也会导致很多问题,请读者保持耐心。

至于 WiFi 能否使用尚不可知。

致谢

特别感谢 WoRProject 所提供的驱动、RPI3 社区 UEFI 固件,以及 Microsoft 文档。