Как эмулировать Windows RT
Как я могу запустить Windows RT (ограниченную версию ARM для Windows 8) в эмуляторе для целей разработки? Этот вопрос состоит из двух частей:
- Получение образа: существует ли установочный образ (для поставщиков, в MSDN, ...)? Могу ли я сделать снимок диска Surface RT (как?) Или каким-то образом извлечь его из данных восстановления (я не знаю, как работает система восстановления, но есть функция полного стирания и переустановки программного обеспечения на Surface.).
- Запуск образа: на что я могу его эмулировать? Я слышал о QEMU, но у него репутация медленного. Также программа должна эмулировать необходимое оборудование (Tegra-3).
1 ответ
Я знаю, что этот вопрос был задан 7 лет назад, но теперь можно эмулировать Windows на ARM в последней версии QEMU 4.2.0.
Следующие шаги:
- Исправьте QEMU, чтобы сообщить о доступности EL3 TrustZone: https://github.com/TeoIzAwezome/rtemu/commit/0f8b8ec18725cd0f66a39b5520fb6a435a757f95 - если вы используете Windows и не хотите собирать QEMU из исходного кода, вы можете исправить
qemu-system-arm.exe
: заменить эту шестнадцатеричную последовательность на NOP4531C931D24C8D05BE515C004889F1E87AD82E00
=>9090909090909090909090909090909090909090
- заменяет эту часть:
- Загрузите прошивку Linaro для 32-битной платформы QEMU ARM, в частности версию 15.12, которая является последней, которая без проблем загружает Windows на ARM: https://releases.linaro.org/components/kernel/uefi-linaro/15.12/release/qemu/QEMU_EFI.fd
- Загрузите 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
- Либо конвертируйте ESD в ISO, либо просто извлеките его с помощью
esd-decrypter-wimlib-8.7z
: https://www.tenforums.com/software-apps/27180-windows-10-recovery-tools-bootable-rescue-disk-2.html - Вам потребуются драйверы 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
- Если вы не хотите загружаться и устанавливать с ISO, вы можете создать образ диска VHD/VHDX и отформатировать / разделить его так же, как это делается для установки Windows в системах UEFI - разделение GPT: раздел EFI - раздел FAT32, раздел MSR, Основной раздел - NTFS. Использовать
dism /Apply-Image
с участиемinstall.wim
для установки файлов Windows на созданный диск иbcdboot
для установки файлов EFI - Поскольку вы используете драйверы с тестовой подписью, вам необходимо настроить файл BCD в разделе EFI:
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 выдаст 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/.