How to Install Windows 10 for ARM in QEMU

Cpu Microchip Sys Computer Electronic Processor Icon

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.

  1. Download and install QEMU for Windows
  2. Download the Windows 10 (arm64) ESD/UUP files from any trusted source.  For example, you can use the following web site created by adguard.
  3. Now, download the UUP files to ISO converter from here. It is adapted to build ISO images for ARM.
  4. Download the UEFI firmware and recompiled/signed arm64 storage drivers package.
  5. Create a new system.vhdx file of 23GB or larger (fixed size, not expanding, initialized using GPT partitioning scheme).
  6. 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:

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:

If you like this article, please share it using the buttons below. It won't take a lot from you, but it will help us grow. Thanks for your support!

Author: Sergey Tkachenko

Sergey Tkachenko is a software developer who started Winaero back in 2011. On this blog, Sergey is writing about everything connected to Microsoft, Windows and popular software. Follow him on Telegram, Twitter, and YouTube.

43 thoughts on “How to Install Windows 10 for ARM in QEMU”

  1. 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.

    1. Some words are vanished.
      Device Manager, OVMF Platform configuration, Change Preferred, Commit Changes and Exit, ESC Key, Reset.

  2. 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

    1. 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.

        1. 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.

  3. 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.

    1. 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

    2. 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.

      1. 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 :(

        1. 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.

  4. 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.

    1. 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!

  5. 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….

  6. 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.

  7. 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

  8. 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.

  9. 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

  10. 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?

      1. 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

        1. 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

          1. 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

  11. 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?

    1. 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.

      1. 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 ?

        1. Do you know where I can find the original imgs? I’ve searched around, found a couple, but they don’t seem to work.

  12. 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 :-)

Leave a Reply

Your email address will not be published.

Exit mobile version
Using Telegram? Subscribe to the blog channel!
Hello. Add your message here.