Document:Installing ARM32-based Windows 8 releases on QEMU

Prerequisites[edit | edit source]

The following requirements used in order to install this build onto a virtual machine are listed below:

  • A copy of QEMU v6.2.0, modified for Windows RT compatibility
  • A version of the TianoCore EDK II firmware designed for ARM32 emulation (included above), to be placed in the QEMU installation directory under fw/QEMU_EFI_1512_driver1998.fd
  • One virtual hard disk image (for storing the operating system)

Precautions[edit | edit source]

The "Recovery" screen appearing after the HAL failed to load
  • Certain Windows 8 builds (such as 8330 (fbl_woa) or 8422 (fbl_woa)) may fail to properly load certain binaries on most startup attempts due to an emulation bug that causes the boot environment to read files incorrectly (especially the Hardware Abstraction Layer) causing an invalid checksum error, despite the files themselves being unmodified. This can be worked around by attempting to retry the startup attempt multiple times.
  • USB emulation is largely unstable and may result in all input devices failing to register any user inputs. To restore input, switch to the QEMU compatibility monitor (Ctrl+Alt+2) and run the following commands:
device_del kbd
device_add usb-kbd,id=kbd
device_del mice
device_add usb-tablet,id=mice
  • Multiple BSODs might cause "Preparing Automatic Repair" messages, an early boot error will appear afterwards.
  • As of 2024, builds within the 85xx-9200 range cannot be booted on QEMU because the Hardware Abstraction Layer (HAL) implementation in these builds is not compatible with the current state of emulated ARM system. This can be resolved by replacing hal.dll with the one in 8439 and disabling Driver Signing Enforcement (DSE).

Instructions[edit | edit source]

Create the needed virtual disk image through the diskpart utility by running the below script; they will be created under a directory in the C: drive named ARM8. The partitions it will contain will be respectively mounted under drive letters F and P.

create vdisk file="C:\ARM8\HDD.vhd" maximum=65536 type=expandable
select vdisk file="C:\ARM8\HDD.vhd"
attach vdisk
convert gpt
create partition efi size=100
format quick fs=fat32
assign letter=F
create partition primary
format quick fs=ntfs
assign letter=P
exit

Deploy the image and apply the generic product key from the build's installation media by invoking the following DISM commands, then add the boot files to the EFI partition:

DISM /Apply-Image /ImageFile:"X:\path\to\install.wim" /ApplyDir:P:\ /Index:1
DISM /Image:P:\ /Set-ProductKey:NFV72-RG2HG-7FTTP-8FJTB-FF848 /AcceptEula
bcdboot "P:\Windows" /s F: /f UEFI

Eject the currently attached virtual disk from the machine, then paste and run the contents of the below script onto a batch file within the QEMU installation directory, replacing YYYY-MM-DD with the build's compile date:

set MAIN="C:\ARM8\HDD.vhd"

qemu-system-arm ^
    -M virt,highmem=false -cpu cortex-a15 -smp cores=4,threads=2 -m 2048 ^
    -device usb-kbd,id=kbd -device usb-tablet,id=mice ^
    -drive id=SD,if=none,file=%MAIN% -device sd-card,drive=SD ^
    -bios fw\QEMU_EFI_1512_driver1998.fd -device VGA ^
    -rtc base=YYYY-MM-DD,clock=vm ^
    --accel tcg,thread=multi

Continue installing the operating system through normal means.