windows-8 - 如何模拟 Windows RT

标签 windows-8 arm emulation windows-rt

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

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

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

    要遵循的步骤:

  • 修补 QEMU 以报告 EL3 TrustZone 可用:https://github.com/TeoIzAwezome/rtemu/commit/0f8b8ec18725cd0f66a39b5520fb6a435a757f95 - 如果您使用的是 Windows 并且不想从源代码构建 QEMU,您可以修补 qemu-system-arm.exe : 将此十六进制序列替换为 NOP 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.wiminstall.wim通过使用 dism /Mount-Wim + /Add-Driver + /Unmount-Wim
  • 如果您不想从 ISO 启动和安装,您可以创建一个 VHD/VHDX 磁盘镜像并对其进行格式化/分区,就像在 UEFI 系统上的 Windows 安装所做的那样 — GPT 分区:EFI 分区 - FAT32、MSR 分区,主分区- NTFS。使用 dism /Apply-Imageinstall.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 将抛出带有代码 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,也就是用于 ARM64 的 Windows,参见 https://withinrafael.com/2018/02/12/boot-arm64-builds-of-windows-10-in-qemu/
  • 关于windows-8 - 如何模拟 Windows RT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13454841/

    相关文章:

    windows - 为 Windows 8 获取稳定的唯一设备 ID

    c - BullsEye代码覆盖率

    java - 运行 Android 模拟器时出错

    angular - 使用模拟器时,Firestore 规则中的 request.auth 为 null

    windows-8 - 是否可以在 Windows 8 上模拟 ARM?

    visual-studio-2012 - 在 Windows 8 上安装并执行 cocos2dx 项目

    random - 在 WinRT 中创建随机数有哪些加密安全选项?

    c - ARM 处理器的链表问题

    ubuntu - 无法打开链接描述文件 libgcc_s.so.1 : Too many open files

    android - 如何从 VS Android 模拟器连接到本地主机