10

出于开发目的,我如何在模拟器中运行 Windows RT(Windows 8 的受限 ARM 版本)?这个问题包含两个部分:

  • 获取映像:是否存在安装映像(对于供应商,在 MSDN 中,...)?我可以拍摄 Surface RT 磁盘的快照(如何?),或者我可以以某种方式从恢复数据中提取它(我不知道恢复系统是如何工作的,但是有一个功能可以完全擦除并重新安装 Surface 上的软件)。
  • 运行图像:我可以在什么上模拟它?我听说过 QEMU,但它以速度慢着称。此外,该程序必须模拟必要的硬件 (Tegra-3)。
4

2 回答 2

5

我知道这个问题是 7 年前提出的,但现在可以在最新的 QEMU 4.2.0 中模拟 ARM 上的 Windows。

要遵循的步骤:

  1. 修补 QEMU 以报告可用的 EL3 TrustZone:https ://github.com/TeoIzAwezome/rtemu/commit/0f8b8ec18725cd0f66a39b5520fb6a435a757f95 - 如果您使用的是 Windows 并且不想从源代码构建 QEMU,您可以修补qemu-system-arm.exe:将这个十六进制序列替换为NOPs 4531C931D24C8D05BE515C004889F1E87AD82E00=> 9090909090909090909090909090909090909090- 它取代了这部分:

  1. 下载 QEMU 32 位 ARM 平台的 Linaro 固件,特别是 15.12 版本,这是最后一个在 ARM 上引导 Windows 没有问题的版本:https ://releases.linaro.org/components/kernel/uefi-linaro/15.12/release/qemu /QEMU_EFI.fd
  2. 下载 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
  3. 要么将 ESD 转换为 ISO,要么将其提取为esd-decrypter-wimlib-8.7zhttps ://www.tenforums.com/software-apps/27180-windows-10-recovery-tools-bootable-rescue-disk-2.html
  4. 您将需要为 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.wiminstall.wim使用dism /Mount-Wim+ /Add-Driver+/Unmount-Wim
  5. 如果您不想从 ISO 启动和安装,您可以创建一个 VHD/VHDX 磁盘映像并对其进行格式化/分区,就像在 UEFI 系统上安装 Windows 一样 - GPT 分区:EFI 分区 - FAT32、MSR 分区, 主分区 - NTFS。使用dism /Apply-Imagewithinstall.wim将 Windows 文件安装到创建的磁盘,并bcdboot安装 EFI 文件
  6. 由于您使用的是测试签名的驱动程序,因此您需要调整 EFI 分区上的 BCD 文件:
set BCD=E:\EFI\Microsoft\Boot\BCD
bcdedit /store %BCD% /set {globalsettings} testsigning on
bcdedit /store %BCD% /set {globalsettings} nointegritychecks on
  1. 一切完成后,使用以下参数启动 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::

  • 另请注意,即使在 Intel Core i7-8700 @ 3.2 GHz 上,32 位 ARM 的完全仿真也非常慢,因此最好使用一些现代 ARM 板,例如具有硬件加速 KVM 管理程序的 Raspberry Pi 4。

  • 32 位 ARM 的 Windows 已经被认为是旧版,最好切换到 AArch64 也就是 ARM64 的 Windows,请参阅https://withinrafael.com/2018/02/12/boot-arm64-builds-of-windows-10-in-qemu /

于 2020-05-13T15:03:08.127 回答
3

There's no way to truly emulate a Windows RT enivonrment on ARM. You have two options...

1) Go pick yourself up a Surface tablet.

2) Contact your local Microsoft Technical Evangelist to see if they have loaner hardware available.

Also, chances are your local Microsoft Evangelist team is holding Windows 8 developer events where they may have test hardware on hand for you to try. If you're in the US, you can find a list of these events at http://msdnevents.com.

于 2012-12-04T14:47:10.160 回答