我知道这个问题是 7 年前提出的,但现在可以在最新的 QEMU 4.2.0 中模拟 ARM 上的 Windows。
要遵循的步骤:
- 修补 QEMU 以报告可用的 EL3 TrustZone:https ://github.com/TeoIzAwezome/rtemu/commit/0f8b8ec18725cd0f66a39b5520fb6a435a757f95 - 如果您使用的是 Windows 并且不想从源代码构建 QEMU,您可以修补
qemu-system-arm.exe
:将这个十六进制序列替换为NOPs 4531C931D24C8D05BE515C004889F1E87AD82E00
=> 9090909090909090909090909090909090909090
- 它取代了这部分:
- 下载 QEMU 32 位 ARM 平台的 Linaro 固件,特别是 15.12 版本,这是最后一个在 ARM 上引导 Windows 没有问题的版本:https ://releases.linaro.org/components/kernel/uefi-linaro/15.12/release/qemu /QEMU_EFI.fd
- 下载 Windows RT 8.1 的 ESD 映像,这些映像可从 Microsoft 公开获得。您可以在此处找到下载链接https://tech.myonlylonely.com/wimboot-for-surface-2-en/
或使用带有此字符串的 Google:
9600.17053.winblue_refresh.141120-0031_woafre_client_CoreARM_O15_en-us-IR5_CCSA_WOAFRER_EN-US_ESD_2F1E1C773E39C4672F52B1F3A0AE7844FD837B23.esd
- 要么将 ESD 转换为 ISO,要么将其提取为
esd-decrypter-wimlib-8.7z
:https ://www.tenforums.com/software-apps/27180-windows-10-recovery-tools-bootable-rescue-disk-2.html
- 您将需要为 32 位 ARM 平台编译的 QEMU 的 VirtIO 驱动程序,预编译
viostor.sys
驱动程序可在此处获得https://www.betaarchive.com/forum/viewtopic.php?f=62&t=40522 - 如果您在 Visual Studio 中自己构建驱动程序,确保通过使用创建目录文件Inf2Cat /driver:C:\Drivers\ /os:8_ARM,6_3_ARM
并对其进行测试签名(所有.cat
和.sys
文件);驱动程序准备好后,您可以将它们滑入boot.wim
并install.wim
使用dism /Mount-Wim
+ /Add-Driver
+/Unmount-Wim
- 如果您不想从 ISO 启动和安装,您可以创建一个 VHD/VHDX 磁盘映像并对其进行格式化/分区,就像在 UEFI 系统上安装 Windows 一样 - GPT 分区:EFI 分区 - FAT32、MSR 分区, 主分区 - NTFS。使用
dism /Apply-Image
withinstall.wim
将 Windows 文件安装到创建的磁盘,并bcdboot
安装 EFI 文件
- 由于您使用的是测试签名的驱动程序,因此您需要调整 EFI 分区上的 BCD 文件:
set BCD=E:\EFI\Microsoft\Boot\BCD
bcdedit /store %BCD% /set {globalsettings} testsigning on
bcdedit /store %BCD% /set {globalsettings} nointegritychecks on
- 一切完成后,使用以下参数启动 QEMU:
set HDD=windows-on-arm.vhd
set ISO=en_windows_8.1_ir4_ARM_dvd.iso
qemu-system-arm ^
-M virt ^
-cpu cortex-a15 ^
-smp 2 ^
--accel tcg,thread=multi ^
-m 2G ^
-bios QEMU_EFI_1512.fd ^
-device VGA ^
-device ich9-usb-ehci1 ^
-device usb-kbd ^
-device usb-tablet ^
-drive if=virtio,file=%HDD% ^
-device virtio-scsi-pci,id=scsi0 ^
-device scsi-cd,drive=install,bus=scsi0.0 ^
-drive if=none,format=raw,id=install,file=%ISO%,readonly=on ^
-rtc base="2013-07-15",clock=vm
笔记:
PCI MMIO 区域存在已知问题,USB 输入因此无法工作。您可以通过使用此选项替换此选项来解决此-M virt
问题,-M virt,highmem=false
但 Windows 8.1 RT 将使用代码抛出 BSOD SYSTEM_THREAD_EXCEPTION_NOT_HANDLED
。
众所周知,适用于 ARM 的 Windows 10 不会抛出此 BSOD 代码,并且在 QEMU 中与-M virt,highmem=false
. 您可以使用谷歌获取它10.0.15035.0.rs2_release.170209-1535_armfre_client-enterprise_volume_en-us
::