ARM64 chips are considered more energy efficient compared to x86 CPUs from Intel and AMD. Using the new platform, OEMs are able to create even smaller, lighter and powerful devices with the power of full Windows 10. There is a way to install and try Windows 10 for ARM SoCs in QEMU. Here is how.
QEMU is a free and open-source hosted hypervisor that performs hardware virtualization. With QEMU, it is easy to emulate a completely different set of hardware from the physical hardware you have. The software supports emulation of the AArch64/ARM64 architecture, so it can be used to install Windows 10 for ARM.
While Windows 10 runs slowly inside QEMU, it is good enough to see what exactly Windows 10 for ARM is.
Here are steps you need to take to get Windows 10 for ARM working in QEMU. Keep in mind that it won't support network because of missing drivers.
To install Windows 10 for ARM in QEMU, do the following.
- Download and install QEMU for Windows
- Download the Windows 10 (arm64) ESD/UUP files from any trusted source. For example, you can use the following web site created by adguard.
- Now, download the UUP files to ISO converter from here. It is adapted to build ISO images for ARM.
- Download the UEFI firmware and recompiled/signed arm64 storage drivers package.
- Create a new system.vhdx file of 23GB or larger (fixed size, not expanding, initialized using GPT partitioning scheme).
- To start your virtual machine, use the following batch file:
qemu-system-aarch64.exe ^ -M virt ^ -cpu cortex-a57 ^ -smp 3 ^ -m 4G ^ -pflash QEMU_EFI.img ^ -pflash QEMU_VARS.img ^ -device VGA ^ -device nec-usb-xhci ^ -device usb-kbd ^ -device usb-mouse ^ -device usb-storage,drive=install ^ -drive if=none,id=install,format=raw,media=cdrom,file=.\17083.1000.180119-1645.RS_PRERELEASE_CLIENTCOMBINED_UUP_ARM64FRE_EN-US.ISO ^ -device usb-storage,drive=drivers ^ -drive if=none,id=drivers,readonly=on,file=.\drivers.vhdx ^ -device virtio-blk,drive=system ^ -drive if=none,id=system,format=raw,file=.\system.vhdx
You are done!
Note: During setup, you will need to provide VirtIO drivers (browse to the mounted disk).
The batch file provided above will configure QEMU to emulate the following device:
- virtualize a Cortex A57 CPU (with 3 cores)
- set up 4GiB of RAM
- use my recompiled TianoCore EDKII ArmVirtPkg firmware, with minor edits to re-enable VGA support and include a whimsical boot logo to discourage serious usage. (This is similar to the build provided by Googulator in that I reverted two VGA commits. No other changes were made. Latest master.)
- use some scratch space for UEFI variable storage (e.g. boot order)
- use VGA for graphics needs
- set up a NEC USB XHCI Host Controller
- ... and plug four virtualized USB devices into it
- a USB keyboard
- a USB mouse
- a CDROM hosting our install media
- a removable hard drive hosting the VirtIO driver package vhdx
- set up a VirtIO Block Device hosting the main system vhdx
The result should be as follows:
All credits go to Rafael Rivera.
Support us
Winaero greatly relies on your support. You can help the site keep bringing you interesting and useful content and software by using these options:
How to change display resolution:
Press ESC key at “Start boot option”.
Device Manager, OVMF Platform configuration, Change Preferred, Commit Changes and Exit, ESC Key, Reset.
Cannot change display resolution from Windows.
Some words are vanished.
Device Manager, OVMF Platform configuration, Change Preferred, Commit Changes and Exit, ESC Key, Reset.
Hello ! Thanks for your work !
But I have a problem for installation in the hard drive, is not detected, screenshot here : https://zupimages.net/up/18/07/7g4v.png
Can you upload your main base files please ?
Regards
Sorry, I’ve already deleted it.
Ok don’t worry, I hope to find a fix :)
At this point you need to install the HDD driver provided in drivers.vhdx. After this you will see the drive, which you created before (system.vhdx). You will be able to install windows there.
Thanks for your feedback, can you help me to try this please ?
Not sure how i can help you further. Just looking at your screenshot, look for a button to install additional drivers, then navigate to the drivers disk, where Windows picks up the VirtIO Block driver.
I don’t know where he is :(
Where is the HDD driver inside the VirtIO image’s directory structure?
I cannot get the HD to be detected either. Strange how the top one gets detected but not the bottom one:
-drive if=none,id=drivers,readonly=on,file=drivers.vhdx ^
-drive if=none,id=system,format=raw,file=system.vhdx
I created using Disk Management in Windows 10 > Action menu > Create VHD > VHDX > 23 GB > initialised as GPT and formatted to NTFS.
Anyone managed to get anywhere with this on Android phone running Ubuntu? I only got as far as the windows + hand icon then it went to an EFI/grub screen using the same Qemu script as above.
It’s working now… needed both these lines – I must have removed one:
-device virtio-blk,drive=system ^
-drive if=none,id=system,format=raw,file=system.vhdx
I then clicked on load driver, C drive, unhide, click on listed driver, next… and then the drive appeared as an option to install windows.
Now what I would love to do is delete the first drive and create a partition on the 2nd drive and only install windows to one partition instead of one drive with multiple partitions – but I guess this UEFI boot is required for Arm64?
https://s9.postimg.org/9k9s3byrj/w10arm.png
Would have been nice if we didn’t require the 2 flash drives and could use legacy bios, but even on the Ubuntu website they mention the need for these 2 volumes:
https://wiki.ubuntu.com/ARM64/QEMU
Unable to complete installation… I had to hit escape and boot from last device in the list following the copying over of windows files, but after that it tries to get devices ready then complains that there’s a problem doing so and restarts.
https://s9.postimg.org/qfg6ucopb/w10arm5.png
Eventually it ends up with this…
https://s9.postimg.org/6wbll95fz/w10arm4.png
BTW, there’s a bug in the latest version of Qemu stopping this from working at all, so I used the the December 2017 update. Also, on Ubuntu Qemu is out of date, so I compiled the same version but still end up at the shell prompt when trying to run Rafael’s script/flash ROMs.
Hello gilius, I am so happy if you run Windows ARM with success, because I can’t do that, my installation don’t detect the Hard Drive :(
Hi, when you are to the step (which is on your screenshot) click on “load drivers” then click on “browse” button and select “local drive (c:)” after that you’ll see a driver. When the driver is install you can select your drive and start windows install.
I have the same problem, but I don’t see any drivers in C:\
If you receive the “ACPI BIOS ERROR”, you must use the 2017-december QEMU version. I’ve struggled some hours until i discovered this. As another comment in this thread said, the 2018 QEMU version won’t work with this image.
Thank you so much! I really struggled getting Windows 10 run on ARM64 in QEMU but the 2017-12-17 build of QEMU for Windows did the trick!
Do you think this will be fixed in the latest QEMU on Linux ?
i’ve tryied many times to download the windows 10 arm for that UUP site but always the same problem i choose the OS and the second option keep loading the version….
I follow the step by step in detail, and when I run the VM the installation does not start.
It goes into the BIOS and everything. I do not know what to try anymore. Can someone help me please!
PS. My English is very bad because I’m Brazilian, and this is a web translation from Google.
Followed instructions as above
But stuck at >>Start PXE over IPv4
Same problem i need to find solution, if someone can help thanks
Overwite the QEMU_EFI.img and other QEMU_VARS.img with original files.
Also recreate the system.vhdx if that doesn’t work.
for me it seems to hang after i press any key on boot prompt as asked
Same here, still no solution
Now run an x86 app on it :-)
haha :-)
hi, i need your help. I must to reinstall windows 10 on asus novago Qualcomm snapdragon processor.
have you an idea to help me? please
thank you
I have tried this with Limbo Emulator which is basically Qemu for Android. My goal was to run Windows 10 for ARM at nearly native speed on my phone since it also has an ARM64 CPU and then use the x86 emulator integrated into Windows for ARM to run some low requirement PC x86 games on my phone. Unfortunately I get stuck at the Press any key to boot from CD or DVD after cd-ing into FS0:\EFI\BOOT and executing BOOTAA64.EFI in the shell. As soon as I press a key, nothing happens.
Hi, I tried all the steps you have me however I did it in limbo which is based on qemu, and it will not even get past a black screen, I also have no idea how to import the bios into limbo
I am seeing a white Windows logo with an arm with the message “Start Boot Option” and a progress bar.
It then switches to text mode with the message: “press any key to boot from DVD or DVD”.
Pressing a key switches back to the white Windows logo and nothing seems to happen: is it supposed to be long?
Hi Nicolas,
I’m also facing the same issue. Are you able to move on from this?
For me it just stops in that screen too.
I’m trying with a W11 iso and 4 cores.
qemu-system-aarch64.exe ^
-name “Windows 11 on ARM64” ^
-M virt-2.11 ^
-cpu cortex-a57 ^
-smp 4 ^
-m 4G ^
–accel tcg,thread=multi ^
-pflash QEMU_EFI.img ^
-pflash QEMU_VARS.img ^
-device VGA ^
-device nec-usb-xhci ^
-device usb-kbd ^
-device usb-mouse ^
-device usb-storage,drive=install ^
-drive if=none,id=install,format=raw,media=cdrom,file=.\22000.1.210604-1628.CO_RELEASE_CLIENTPRO_OEMRET_A64FRE_EN-US.ISO ^
-device usb-storage,drive=moredrivers ^
-drive if=none,id=moredrivers,media=cdrom,file=.\virtio-win-0.1.208.iso ^
-device usb-storage,drive=drivers ^
-drive if=none,id=drivers,readonly=on,file=.\drivers.vhdx ^
-device virtio-blk,drive=system ^
-drive if=none,id=system,format=raw,file=.\system.vhdx
I was able to make it work with Windows 11 with this command:
“C:\Program Files\qemu\qemu-system-aarch64.exe” ^
-name “Windows 11 on ARM64” ^
-M virt,virtualization=true ^
-cpu cortex-a57 ^
-smp 4 ^
-m 4G ^
-bios QEMU_EFI.img ^
-accel tcg,thread=multi ^
-device VGA ^
-device ramfb ^
-device ich9-usb-ehci1 ^
-device nec-usb-xhci ^
-device usb-kbd ^
-device usb-mouse ^
-nic user,model=virtio ^
-device usb-storage,drive=moredrivers ^
-drive if=none,id=moredrivers,media=cdrom,file=.\virtio-win-0.1.208.iso ^
-device usb-storage,drive=drivers ^
-drive if=none,id=drivers,readonly=on,file=.\drivers.vhdx ^
-device usb-storage,drive=system ^
-drive if=none,id=system,format=raw,file=.\system.vhdx
I just had to install Windows 11 using the command prompt because of the limitations.
I followed this tutorial: yuk7(.)github(.)io/blog/2021/07/02/210702-win11arm
holy hell. thank you for this. I picked some of the pieces of this out and put it in with the original script to get windows 10 working as it was hanging at the bios splash
here’s how i got past that issue with windows 10 in case anyone else has this issue in the future:
qemu-system-aarch64.exe ^
-M virt,virtualization=true ^
-cpu cortex-a57 ^
-smp 4 ^
-m 4G ^
-bios QEMU_EFI.img ^
-accel tcg,thread=multi ^
-device VGA ^
-device ramfb ^
-device ich9-usb-ehci1 ^
-device nec-usb-xhci ^
-device usb-kbd ^
-device usb-mouse ^
-device usb-storage,drive=install ^
-drive if=none,id=install,format=raw,media=cdrom,file=.\19045.3031.230508-1728.VB_RELEASE_SVC_PROD3_CLIENTMULTICOMBINED_UUP_A64FRE_EN-US.ISO ^
-device usb-storage,drive=drivers ^
-drive if=none,id=drivers,readonly=on,file=.\drivers.vhdx ^
-device virtio-blk,drive=system ^
-drive if=none,id=system,format=raw,file=.\system.vhdx
Guys how to setup Network bridge on it for hosted Windows 10?
I couldn’t get this to run actually…used the actual insider build and also an older one as suggested here:
https://kitsunemimi.pw/notes/posts/running-windows-10-for-arm64-in-a-qemu-virtual-machine.html
It’s only “Loading Files” after that i see only a black screen. Tested Quemu on Windows and also on Linux (in a WSL2 environment). Tried may things but no success :-(
Any hekp?
I would like to run Win10 ARM on qemu on Linux on a ARM64 system. Is this possible ?
I use this command line to run:
rreddy78@jetson-nano:~/qemu/build/vm_test$ qemu-system-aarch64 -M virt -cpu cortex-a57 -smp 2 -m 2G -pflash QEMU_EFI.img -pflash QEMU_VARS.img -device VGA -device nec-usb-xhci -device usb-kbd -device usb-mouse -device usb-storage,drive=install -drive if=none,id=install,format=raw,media=cdrom,file=18362.1198.201030-1156.19H1_RELEASE_SVC_PROD1_CLIENTPRO_OEMRET_A64FRE_EN-US.ISO -device usb-storage,drive=drivers -drive if=none,id=drivers,readonly=on,file=./drivers.vhdx -device virtio-blk,drive=system -drive if=none,id=system,format=raw,file=./system.vhdx
I get a >>Start PXE over IPV4
and then boot process stops. It was not so when i ran it for the first time,. got the press any key to continue and then it was booting and then I got the ACPI BIOS error.
The issue of >>Start PXE over IPV4 is resolved by overwriting the QEMU_EFI.img and QEMU_VARS.img with the original ones.
But how to resolve the ACPI BIOS Error ? Does anyone know ?
Do you know where I can find the original imgs? I’ve searched around, found a couple, but they don’t seem to work.
Hello,
I tried under Windows and Linux, but if I press any key to run from “CD”, I see only a Windows and a arm logo and nothing happens…
Host CPU is an Intel i7 8700k (x64) and I need an arm emulation with Windows to test any compiled program from Visual Studio…
For a solution I would very thankful :-)