如何模拟Windows RT

jdm*_*jdm 7 arm emulation windows-8 windows-rt

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

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

Sta*_*s'M 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/ 或使用带有以下字符串的谷歌: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-Image具有install.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
Run Code Online (Sandbox Code Playgroud)
  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
Run Code Online (Sandbox Code Playgroud)

笔记:

  • PCI MMIO 区域存在已知问题,因此 USB 输入将无法工作。您可以通过替换为此选项来解决此问题-M virt-M virt,highmem=false但 Windows 8.1 RT 会抛出带有代码的 BSOD SYSTEM_THREAD_EXCEPTION_NOT_HANDLED

  • 众所周知,Windows 10 for ARM 不会抛出此 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 aka Windows for ARM64,请参阅https://withinrafael.com/2018/02/12/boot-arm64-builds-of-windows-10-in-qemu /


小智 3

无法在 ARM 上真正模拟 Windows RT 环境。你有两个选择...

1) 去挑选一台 Surface 平板电脑。

2) 联系您当地的 Microsoft 技术推广人员,了解他们是否有可用的借用硬件。

此外,您当地的 Microsoft Evangelist 团队很可能正在举办 Windows 8 开发人员活动,他们可能会准备好测试硬件供您尝试。如果您在美国,可以在http://msdnevents.com上找到这些事件的列表。