Windows 10 ARM64 on QEMU

(This is a guest post by Antoni Sawicki aka Tenox)

Microsoft is releasing Windows 10 for ARM64 CPUs and this time, unlike Windows RT fiasco, there will be a full desktop app support including a dynamic binary translator to allow running existing x86 apps on ARM CPU, much like FX!32 on Alpha NT or Rosetta on Mac OS X.

Latest Visual Studio updates now bring official ARM/ARM64 support for Desktop Apps, little hidden, but here is how to enable it.

Being able to compile Windows ARM apps, I wanted to try to actually run them, but … on what exactly? There are some developer evaluation boards. Apparently someone managed to run it on Raspberry PI. Most importantly however you can run Windows 10 ARM64 on QEMU. This is some serious Fun With Virtualization!

Windows 10 ARM64 running on QEMU

I’m not claiming to be the first. Clever people have already done it. I just wanted to make it little easier for the lazier of us. Here is how.

Follow the link above but skip the shady UUP business in step #3 and download ready made iso instead. You can google the iso image from windows.cmd and it will take you to this link. You need the rest of the files like UEFI firmware and virtio drivers.

For the even more impatient here is a ready to run image with Windows pre-installed. Because QEMU now comes with DLL HELL I’m not including it in the archive. You will have to install it separately.

If you want to transfer files in/out of the image a tip from Pete Batard of Rufus:

Create a folder named say “transfer” and add the following option to the launch script:
-hdb fat:rw:transfer

This will create a second FAT32 formatted disk, that maps your transfer\
directory to the QEMU virtual machine. In our case, Windows 10 will see it
and make it automatically accessible as “QEMU VVFAT (D:)”. You can even
use this to write file from the VM to the host (though, depending on how
fast Windows flushes its disk cache, they may take a while to appear).

Go have fun and port some apps to ARM64 with free community edition of Visual Studio. I’m going to start with Aclock 🙂

9 thoughts on “Windows 10 ARM64 on QEMU

  1. I keep hearing conflicting reports that Microsoft is going to limit running true ARM Win32 API binaries from running on this, limiting native software to Metro/Modern APIs instead (and leaving Win32 stuff to being x86 emulated apps only). It would be a shame, as many programs just need a re-compile to run on ARM.

    • Native ARM64 binaries run just fine on this, as long as you don’t install Windows 10 S or enable “S mode” in recent builds.

      ARM32 binaries are also supported using the same WoW64 mechanism that runs x86 binaries on x64. Unfortunately x64 binaries aren’t currently supported (due to the binary translator being based on Connectix, which is 32-bit only).

  2. strangely doesn’t work with latest qemu 3.0 windows..
    also had older qemu 2.10 floating around and doesn’t work..
    so seems only qemu 2.11 and possibly 2.12 work..
    any clue as to why 3.0 doesn’t work?

  3. @oscar > Just add the following line, it worked for me.
    -machine highmem=off ^

    Although, I don’t think the virtio-win drivers are install in this build

  4. Once booted, how do you transfer files from the host to the emulated machine? There is no network, and I need to test some arm64 builds I have made on the host.

    • there is an option to mount a local folder as a drive in the guest

      Create a folder and add the following option:
      -hdb fat:rw:folder_name

      This will create a second FAT32 formatted disk, that maps your image\
      directory to the QEMU virtual machine. In our case, Windows 10 will see it
      and make it automatically accessible as “QEMU VVFAT (D:)”. You can even
      use this to write file from the VM to the host (though, depending on how
      fast Windows flushes its disk cache, they may take a while to appear).

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.