【问题标题】:How to emulate Windows RT如何模拟 Windows RT
【发布时间】:2012-11-19 13:30:34
【问题描述】:

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

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

【问题讨论】:

  • 也许有人可以为此创建一个windows-rt 标签?
  • 抱歉,我指的是操作系统“Windows RT”,而不是称为“WinRT”或“Windows Runtime”的新 API(位于 windows-runtime 后面)。将其改回新标签。
  • 根据 Wikipedia 与 Windows 8 的所有其他变体不同,Windows RT 只能作为参与 OEM 生产的设备上的预加载操作系统由用户获得。
  • 您可以使用板载 Recovery ToolMaking a Recovery Drive for the Microsoft Surface RT 创建一个恢复盘,然后尝试使用 QEMU 模拟操作系统,但不确定它会有多难它设置并安装。微软可能还有更多花招。
  • 如果您反对windows-rt,我们也可以使用windows-arm 标签。无论如何,我相信这个特别版的 Windows 8 需要一个标签 - 对于与 x86 Windows 8 相比它的特殊性的问题。

标签: windows-8 arm emulation windows-rt


【解决方案1】:

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

要遵循的步骤:

  1. 修补 QEMU 以报告可用的 EL3 TrustZone:https://github.com/TeoIzAwezome/rtemu/commit/0f8b8ec18725cd0f66a39b5520fb6a435a757f95 - 如果您使用 Windows 并且不想从源代码构建 QEMU,您可以修补 qemu-system-arm.exe:将此十六进制序列替换为 NOP 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.7z 提取它:https://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 文件);驱动程序准备好后,您可以使用dism /Mount-Wim + /Add-Driver + /Unmount-Wim 将它们滑入boot.wiminstall.wim
  5. 如果您不想从 ISO 启动和安装,您可以创建一个 VHD/VHDX 磁盘映像并对其进行格式化/分区,方法与在 UEFI 系统上安装 Windows 相同 - GPT 分区:EFI 分区 - FAT32 ,MSR 分区,主分区 - NTFS。使用dism /Apply-Imageinstall.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 将使用代码SYSTEM_THREAD_EXCEPTION_NOT_HANDLED 抛出 BSOD。

  • 众所周知,Windows 10 for ARM 不会抛出此 BSOD 代码,并且与 -M virt,highmem=false 一起在 QEMU 中运行良好。你可以通过谷歌获取: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/

【讨论】:

  • 是否可以使用“最新”的 uefi-linaro 而不是 15.12? linaro 下载链接中有一个 qemu64 文件夹,是用于 qemu-system-aarch64 还是用于 Windows 10 ARM64?
  • @Biswapriyo 我没有用 Linaro 和 Windows 10 ARM64 测试 QEMU AArch64,所以不能肯定。是的,qemu64 目录正是为此而生的。
【解决方案2】:

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

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

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

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

【讨论】:

  • 但是 .. Windows Surface SDK 能做到这一点吗?仿真,我认为是的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多