Skip to content

v6.2.0-winrt-v2

Compare
Choose a tag to compare
@binarymaster binarymaster released this 08 May 20:50
· 1 commit to winrt since this release

See the latest release, this one is outdated now.

Archival # QEMU that can emulate Windows on ARM (Windows RT)

Patched version by @driver1998 plus new UEFI firmware.

Fixed issues in this release:

  • Keyboard is now working in UEFI
  • UEFI now can boot from:
    • SD card (this is our HDD)
    • USB thumbdrive
    • USB CD/DVD-ROM

Prebuilt QEMU binaries are compiled with MSYS/MinGW64 for Windows x64 host.

While testing, make sure to use firmware binary from this release.

Configuration with boot priority: 1) SD card, 2) USB disk

This is how you install WoA from WinPE disk image, and then boot the system.

@echo off
set HDD=sdcard.vhd
set USB=winpe9600.vhd

qemu-system-arm ^
-M virt,highmem=false ^
-cpu cortex-a15 ^
--accel tcg,thread=multi ^
-m 2G ^
-bios QEMU_EFI_1512_driver1998.fd ^
-device VGA ^
-device usb-kbd ^
-device usb-tablet ^
-drive id=mydrive,if=none,file=%HDD% -device sd-card,drive=mydrive ^
-drive id=usbstick,if=none,file=%USB% -device usb-storage,drive=usbstick ^
-rtc base=2013-07-15,clock=vm
Configuration with boot priority: 1) USB CD-ROM, 2) SD card

This is how you install WoA from CD/DVD ISO image, and then boot the system.

@echo off
set ISO=9600.17053.winblue_refresh.141120-0031_woafre_client_CoreARM_O15_en-us-IR5_CCSA_WOAFRER_EN-US.iso
set HDD=sdcard.vhd

qemu-system-arm ^
-M virt,highmem=false ^
-cpu cortex-a15 ^
--accel tcg,thread=multi ^
-m 2G ^
-bios QEMU_EFI_1512_driver1998.fd ^
-device VGA ^
-device usb-kbd ^
-device usb-tablet ^
-drive id=usbcdrom,if=none,media=cdrom,format=raw,file=%ISO%,readonly=on -device usb-storage,drive=usbcdrom ^
-drive id=mydrive,if=none,file=%HDD% -device sd-card,drive=mydrive ^
-rtc base=2013-07-15,clock=vm

Result should look like this: https://twitter.com/x86corez/status/1523303255438028800

Tested Windows on ARM builds:

  • Windows RT beta - build 6.2.8330.0.armfre.fbl_woa.120424-2227
    • ❌ Windows PE
    • ✔️ Full installation (works, albeit very unstable)
  • Windows RT 8.1 - build 6.3.9600.17328.armfre.winblue_r3.140827-1500
    • ✔️ Windows PE
    • ✔️ Full installation
  • Windows 10 Enterprise - build 10.0.15035.0.woafre.rs2_release.170209-1535
    • ✔️ Windows PE
    • ✔️ Full installation

Known issues:

  • Booting from SD card is slow, you may think the OS is hung (give it some time)
  • USB EHCI emulation is not perfect and may get broken, especially during installation
  • Works only on 1 CPU core, it's possible to add more, but they are not being started:
    • ACPI MADT table is missing
    • MpPark protocol is not implemented in CPU
    • WFI has to be handled
    • Each CPU should have own GIC
  • Not tested on Linux with KVM yet, maybe SMP will work there

Appendix A - building UEFI firmware:

UEFI firmware was built on Debian 11 with GCC 11.

git clone https://github.com/driver1998/edk2-winrt
cd edk2-winrt
make -C BaseTools
source edksetup.sh
export GCC49_ARM_PREFIX=arm-linux-gnueabihf-
build -a ARM -t GCC49 -b RELEASE -p ArmVirtPkg/ArmVirtQemuWinRt.dsc