文档:在 QEMU 中安装早期基于 ARMv7 的 Windows RT 内部版本

先决条件

以下是将基于 tegra2 HAL 安装早期 ARMv7 体系结构 Windows 版本安装到虚拟机所需的要求:

  • 用于模拟真实 Nvidia Tegra 250 开发套件的 QEMU v6.1.0 Tegra 2 WoA 分支,已针对运行早期的 Windows on ARM 版本修改
    • 截至当前,持续集成(CI)当前仅设置为自动产生 Windows 版本。此分支必须使用 macOS 或 Linux 等其他操作系统手动从源代码编译。
  • 所需的修补 EFI 固件封装映像(最初来自 Build 7822),需放置在 QEMU 安装目录中新建的名为 fw 的文件夹中
  • 两个虚拟磁盘映像(用于存放安装媒介和操作系统安装)

注意事项

  • 当系统重新启动时,模拟器可能会退出。这是 Microsoft 有意的设计决策,原因是在 Tegra 250 HAL 中,重启被视为完全关机,这是无法规避的。只能在模拟器退出后重新运行相关启动脚本再次运行。
  • 在极少数情况下,安全数字多媒体卡(SDMMC)模拟可能不可靠,且可能在镜像部署或功能设置过程中损坏主操作系统磁盘分区。通过先格式化主操作系统分区,然后使用以下命令修改安装介质中位于 EFI\Microsoft\Boot\BCD 的 BCD 设置以使用一个CPU核心,重新尝试以下操作,可能会显著提高安装成功的几率,但由于缺乏多线程支持,完成时间可能会增加:
bcdedit /offline /store M:\EFI\Microsoft\Boot\BCD /set {default} NUMPROC 1
  • USB HID 设备模拟不稳定,偶尔会导致设备无法注册任何用户输入。要恢复输入,请切换到 QEMU 兼容性监视器(Ctrl+Alt+2)并运行以下命令:
device_del kbd
device_add usb-kbd,id=kbd
  • 对于 Build 7957 之前的版本(不包括 Build 77927822),至关重要的是必须用原始合作伙伴镜像中的 Windows 预安装环境(WinPE)镜像替换 Windows 安装启动镜像(通常位于 winpewoape 目录中),原因是安装启动镜像不包含所需的硬件抽象层(HAL)扩展,因此一旦启动序列开始,操作系统将立即因 HAL_INITIALIZATION_FAILED 错误代码而崩溃。
  • 由于 Build 7915 设计用于在德州仪器的 OMAP4 上运行,且无法在 Tegra 2 QEMU 上运行,本指南不适用于此版本。必须改用 QEMU-woa。

详细说明

这些说明基于假设用户已经打开了提升权限的命令提示符窗口。

通过运行以下脚本使用 diskpart 工具创建所需的虚拟磁盘映像;它们将会在 C: 盘名为 ARM8 的目录下创建。INSTALLMainOS 和 EFI 系统分区将分别装载到 F 和 P 盘符下。

create vdisk file="C:\ARM8\Setup.vhd" maximum=4096 type=expandable
select vdisk file="C:\ARM8\Setup.vhd"
attach vdisk
convert gpt
create partition primary
format quick fs=fat32 label=INSTALL
assign letter=M
create vdisk file="C:\ARM8\Main.vhd" maximum=65536 type=expandable
select vdisk file="C:\ARM8\Main.vhd"
attach vdisk
convert gpt
create partition efi size=100
format quick fs=fat32 label=EFIESP
create partition primary
format quick fs=ntfs label=MainOS
assign letter=P
exit

根据用户希望的版本(free 版本或 checked 版本),将安装介质的内容复制到 INSTALL 分区。从 Windows PEWindows 安装程序启动映像中提取所需的 EFI 引导管理器(\Windows\Boot\EFI\bootmgfw.efi)到 INSTALL,作为 EFI\Boot\bootarm.efi

弹出计算机上所有已连接的虚拟硬盘,并将以下脚本的内容粘贴到 QEMU 安装目录下的批处理文件中运行,将 YYYY-MM-DD 替换为早于版本内置时间炸弹到期的日期,将 FWType 替换为 78xx 变体固件(适用于早期至 7898 的版本)或 multi 变体(适用于 Build 78987996):[a]

set BL=".\fw\HARMONY.fd.FWType"
set MAIN="C:\ARM8\Main.vhd"
set SETUP="C:\ARM8\Setup.vhd"

qemu-system-arm ^
    -M tegra2-qemu -m 1G -accel tcg,thread=multi ^
    -bootloader %BL% ^
    -device usb-tablet,id=mouse -device usb-kbd,id=kbd ^
    -drive if=sd,index=0,format=vpc,file=%SETUP% ^
    -drive if=sd,index=1,file=%MAIN% ^
    -serial null -nic none ^
    -s ^
    -rtc base=YYYY-MM-DD,clock=vm ^

开始安装操作系统。安装程序必须直接从原始安装介质启动,这是因为操作系统启动映像中的版本无法使用。可使用以下命令启动安装过程:

start D:\sources\setup.exe

在完成第一阶段的安装程序后,立即取出安装媒介的 SD 卡槽,并使用以下批处理脚本配置启动操作系统:[a]

set BL=".\fw\HARMONY.fd.FWTYPE"
set MAIN="C:\ARM8\Main.vhd"

qemu-system-arm ^
    -M tegra2-qemu -m 1G -accel tcg,thread=multi ^
    -bootloader %BL% ^
    -device usb-tablet,id=mouse -device usb-kbd,id=kbd ^
    -drive if=sd,index=0,file=%MAIN% ^
    -serial null -nic none ^
    -s ^
    -rtc base=YYYY-MM-DD,clock=vm ^

继续通过正常方式安装操作系统。

  1. 1.0 1.1 如果使用 Tegra 2 WoA 分支的四核版本,则必须修改批处理脚本中的机器配置以支持 2 GB 内存,并且还必须使用经过修补的 2g EFI 固件封装来启动虚拟机。multi2g 组合可以用于立即启动 Build 8020 到 8061;如果未使用此组合,则需要对 SYSTEM 配置单元进行必要的注册表修改,以加载 Tegra 2 HAL 扩展 ID VEN_ra2.&DEV_0002HalExtTegra2.dll)和 VEN_ra2.&DEV_0003HalExtTegra2Dma.dll;在后期版本中为 HalExtTegraDma.dll)。