/waq

Run Windows 10 for ARM64 on QEMU

Primary LanguageBatchfileMIT LicenseMIT

WAQ - Windows 10 for ARM on QEMU

Update

For anyone who wants newer Windows version, please refer to this tutorial by Vogtinator

Quick note

It has been a long time since the last time I touched this Readme file. Now's 2022 already and you can build yourself a newer EDKII image instead of using this (if you have problem with using this). And also, if you really want a usable Windows on ARM (not too slow), get a Raspberry Pi and install directly on it (check out WoA project) or run on KVM on it.

Why do this?

To run Windows on ARM on an emulator without finding a real hardware :)


There are some pages show how to do this on the Internet. But the problem is, you will have to download the iso and install yourself and this takes really long time to install on QEMU (about 3 -> 4 days on my machine with Pentium Dualcore T4300). Another way is to apply the install.wim to a vhd file and put it to QEMU, but this might not work due to missing EFI loader (I have tried this too).


So in this repo I will give you my modified version of preinstalled img file originally from this post and the download link is here.

What have been modified?

  • Disable Pagefile
  • Disable Search Index
  • Disable Printer Service
  • Fixed EFI

Download link

If there is a password prompt, type in win10arm64

How to use

Step 1: Install QEMU: Goto qemu.org and install QEMU if you haven't installed it yet. On Linux just run sudo apt install qemu-system-aarch64

Step 2: Download the script: Goto Release and download it. Or you can copy the script here:

  • For Windows:
@echo off
title WOA
qemu-system-aarch64.exe ^
-name "Windows 10 on ARM64" ^
-M virt ^
-cpu cortex-a72 ^
-smp 3 ^
--accel tcg,thread=multi ^
-m 2048 ^
-pflash QEMU_EFI.img ^
-pflash QEMU_VARS.img ^
-device VGA ^
-device nec-usb-xhci ^
-device usb-kbd ^
-device usb-mouse ^
-device usb-storage,drive=boot ^
-drive if=none,id=boot,file="woa_17134.img" ^
-device usb-storage,drive=drivercdrom ^
-drive file="virtio-win-0.1.185.iso",media=cdrom,if=none,id=drivercdrom
  • For Linux/MacOS:
#/bin/bash
qemu-system-aarch64 -name "Windows 10 on ARM64" -M virt -cpu cortex-a72 -smp 3 --accel tcg,thread=multi -m 2048 -pflash QEMU_EFI.img -pflash QEMU_VARS.img -device VGA -device nec-usb-xhci -device usb-kbd -device usb-mouse -device usb-storage,drive=boot -drive if=none,id=boot,file="woa_17134.img" -device usb-storage,drive=drivercdrom -drive file="virtio-win-0.1.185.iso",media=cdrom,if=none,id=drivercdrom

Step 3: (Optional) Install Virtio driver: Download the driver iso here and put it to the vm directory.
IMPORTANT: If you don't want to install Virtio driver or you finished install it, you can delete it (if you have downloaded it) and comment out the 2 last line in the script. For Linux/MacOS script, just remove -device usb-storage,drive=drivercdrom -drive file="virtio-win-0.1.185.iso",media=cdrom,if=none,id=drivercdrom from arm.sh

Step 4: Start the script
Just like normal script, ./arm.sh for Linux/MacOS and arm.sh for Windows

On boot

When it boot to EFI shell, enter exit. Then it will come to a list of options, select 'Boot Manager', then select 'UEFI QEMU QEMU HARDDRIVE ...3' or 'UEFI QEMU QEMU HARDDRIVE ...4.1'. If this does not work and you return to that menu, please try another boot device in that list. That should work.

Notes:

  • The emulator may be so lag when you boot it. After a while when the desktop loaded, you can use it normally.
  • This image file can be used to flash the real rpi
  • You can use --enable-kvm when you are on a real ARM cpu with virtualization. I'm about to run this on my phone here

Todo

  • Add saved state image so you can just restore it.