Как эмулировать Windows RT

Как я могу запустить Windows RT (ограниченную версию ARM для Windows 8) в эмуляторе для целей разработки? Этот вопрос состоит из двух частей:

  • Получение образа: существует ли установочный образ (для поставщиков, в MSDN, ...)? Могу ли я сделать снимок диска Surface RT (как?) Или каким-то образом извлечь его из данных восстановления (я не знаю, как работает система восстановления, но есть функция полного стирания и переустановки программного обеспечения на Surface.).
  • Запуск образа: на что я могу его эмулировать? Я слышал о QEMU, но у него репутация медленного. Также программа должна эмулировать необходимое оборудование (Tegra-3).

1 ответ

Я знаю, что этот вопрос был задан 7 лет назад, но теперь можно эмулировать Windows на ARM в последней версии QEMU 4.2.0.

Следующие шаги:

  1. Исправьте QEMU, чтобы сообщить о доступности EL3 TrustZone: https://github.com/TeoIzAwezome/rtemu/commit/0f8b8ec18725cd0f66a39b5520fb6a435a757f95 - если вы используете Windows и не хотите собирать QEMU из исходного кода, вы можете исправитьqemu-system-arm.exe: заменить эту шестнадцатеричную последовательность на NOP 4531C931D24C8D05BE515C004889F1E87AD82E00 => 9090909090909090909090909090909090909090 - заменяет эту часть:

  1. Загрузите прошивку Linaro для 32-битной платформы QEMU ARM, в частности версию 15.12, которая является последней, которая без проблем загружает Windows на ARM: https://releases.linaro.org/components/kernel/uefi-linaro/15.12/release/qemu/QEMU_EFI.fd
  2. Загрузите ESD-образ Windows RT 8.1, он общедоступен в 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. Вам потребуются драйверы VirtIO для QEMU, скомпилированные для 32-битной платформы ARM, предварительно скомпилированные 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
  5. Если вы не хотите загружаться и устанавливать с ISO, вы можете создать образ диска VHD/VHDX и отформатировать / разделить его так же, как это делается для установки Windows в системах UEFI - разделение GPT: раздел EFI - раздел FAT32, раздел MSR, Основной раздел - NTFS. Использоватьdism /Apply-Image с участием install.wim для установки файлов Windows на созданный диск и bcdboot для установки файлов EFI
  6. Поскольку вы используете драйверы с тестовой подписью, вам необходимо настроить файл BCD в разделе EFI:
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.

  • Известно, что Windows 10 для ARM не генерирует этот код BSOD и довольно хорошо работает в QEMU с -M virt,highmem=false. Вы можете использовать Google, чтобы получить это:10.0.15035.0.rs2_release.170209-1535_armfre_client-enterprise_volume_en-us:

  • Также обратите внимание, что полная эмуляция 32-битной ARM очень медленная даже на Intel Core i7-8700 @ 3,2 ГГц, поэтому лучше использовать какую-нибудь современную плату ARM, такую ​​как Raspberry Pi 4, с гипервизором KVM с аппаратным ускорением.

  • Windows для 32-разрядной ARM уже считается устаревшей, лучше переключитесь на AArch64 или Windows для ARM64, см. https://withinrafael.com/2018/02/12/boot-arm64-builds-of-windows-10-in-qemu/

Нет никакого способа по-настоящему подражать среде Windows RT на ARM. У вас есть два варианта...

1) Иди подбери себе планшет Surface.

2) Обратитесь к местному техническому евангелисту Microsoft, чтобы узнать, есть ли у них оборудование для заемщика.

Кроме того, есть вероятность, что ваша местная команда Microsoft Evangelist проводит мероприятия для разработчиков Windows 8, где они могут иметь тестовое оборудование под рукой, чтобы вы могли его попробовать. Если вы находитесь в США, вы можете найти список этих событий на http://msdnevents.com/.

Другие вопросы по тегам