Not Found

The requested URL index.php was not found on this server.


Apache/2.2.22 (Linux) Server at Port 80
1 Windows 10 Pro ARM64 on a Raspberry Pi 3 Model B/B+ by Guest Author Toni Fasth – Win10.Guru
Go to ...

RSS Feed

Windows 10 Pro ARM64 on a Raspberry Pi 3 Model B/B+ by Guest Author Toni Fasth


As you might already be aware, some very clever Windows users and tinkerers have managed to run a full Windows 10 ARM64 desktop operating system on a Raspberry Pi 3 Model B/B+ with the help of some modified binaries. Yes, I am talking about the full-fledged 64-bit desktop operating system found preinstalled on many laptop and desktop computers today. I decided to put this to the test and in the coming sections I will share my experiences and thoughts. This will most likely become a multi-part series of posts. Thus, this one will only focus on setting up the system and performing some basic tests.

The motivation

The first question that probably comes to your mind at this point is, “Why on earth would someone want to install such big and clunky operating system on a low-end device like the Raspberry Pi 3?” The short answer is: “Because we can and because we’re curious!” The long answer is a bit more complex.

For me personally, Windows 10 IoT Core does not quite satisfy my tinkering needs as does it Linux counterpart Raspbian. IoT Core, while awesome, is designed for single App usage and it requires a second computer for development, deployment and debugging. In an ideal world I like to have my development toolchains on the hardware I develop for and test everything locally. Then, I do final testing on a second system that is an exact replica of my development machine. Another issue I have with IoT Core is that I like to develop unmanaged native binaries using C++ or lower level languages and access the hardware directly. With IoT Core, I must instead use a VM to manage everything for me, using more RAM and slowing things down. UWP Apps are great, but they are not always the best solution, either. My final issue with IoT comes from working remotely and across platforms: everything in my case must be cross compiled for ARM64 on an x86 or x86_64 system, which in turn complicates the process and can cause additional issues or headaches.

Wouldn’t it be exciting if we could someday install a Microsoft supported Windows desktop operating system and Visual Studio Code and be able to tinker straight from a Raspberry Pi on the fly? I think that would be very exciting and I would most certainly not carry around my desktop computer in the wild.

In the upcoming sections we will explore this possibility and find out if it’s even remotely viable to run a 64-bit Windows desktop operating system on a Raspberry Pi.

The hardware

For our test to work, we need a second computer to download all the required binaries and set up the bootable system drive. Here are my most relevant system specs.

My laptop (Asus ZenBook UX305)
• OS: Windows 10 Pro v1809
• CPU: Intel Core m3-6Y30
• RAM: 8GB
• Storage: 120GB SATA SSD
• Networking: WLAN 5GHz 802.11ac
• SD-card reader

Raspberry Pi 3 Model B
• SoC: Broadcom BCM2837
• CPU: 4× ARM Cortex-A53 @1.2GHz
• GPU: Broadcom Video Core IV @250MHz
• RAM: 1GB LPDDR2 @900MHz
• Storage: 32GB Samsung Pro µSD-card UHS-1 (R/W@90/80MB/s)
• Networking: LAN 10/100Mbit, WLAN 2.4GHz 802.11n

Other peripherals
• A power supply that can produce 2.5A stable at 5V to avoid data corruption and crashes
• Samsung µSD to SD adapter or USB to µSD adapter
• Keyboard: Logitech K800 Wireless
• Mouse: Logitech M505 Wireless
• Receiver: Logitech Unifying, connected to both mouse and keyboard
• Monitor: Samsung SyncMaster P2470HD @1080p
• Display Cable: HDMI
• A cooler with a fan to keep the Raspberry Pi from overheating

My Raspberry Pi 3 Model B is housed in a cool case

Warning!

Since I will share my full experience and the method I used, this also becomes a tutorial on how to set everything up. If you want to follow along and experiment with this yourself, you do it completely at your own risk. Under no circumstances should I, the people hosting this site, the people who created the binaries and the modified firmware nor Microsoft be held responsible for any damage this could do to your SBC or other hardware. Microsoft does not officially support running Windows 10 ARM64 on a Raspberry Pi 3, so please do not flood Microsoft support forums with possible issues. All the information needed to set up a working system appears in this article. If you run into issues, please read the article again. Maybe you missed a step the first time? Now that we have defined the rules, let’s start this experiment!

The process

This is a high-level overview of what we will do next.
1. Download Windows UUP binaries
2. Convert the Windows binaries into an ISO file
3. Download the Windows into an ARM deployer tool
4. Remove any existing partitions from the µSD-card
5. Deploy everything onto the µSD-card
6. Boot the Raspberry Pi from the µSD-card the first time
7. Configure the firmware before booting into Windows
8. Set up a local user account and complete OOBE
9. Let the system complete its post install tasks and settle down
10. Test some built-in software
11. Test Reboot time/delay
12. Draw a conclusion

Downloading the software

This part includes 3 steps. Acquiring Windows binaries download and conversion scripts. We will download Windows 10 Pro EN-US ARM64 v1803 Windows Insider build 17134.1 base image download and conversion scripts using UUP-Dump. Version 1809 and later Insider Builds are already available but, in my experience, 1809 was unstable but 1803 caused no issues. Thus, we pick 1803.

Here are the steps to take on your computer:
1. Using a web browser, navigate to https://uupdump.ml
2. In the search box, type insider 17134.1 arm64 and press ENTER
3. Click on Windows 10 Insider Preview 17134.1 (rs4_release) arm64
4. From Language dropdown select English (United States) and press Next
5. From Editions dropdown, select Windows 10 Pro and press Next
6. Click on Download using aria2 and convert (this will download the scripts)
7. You will end up with a file 17134.1_arm64_en-us_561e1a0f_convert.zip
8. Move the file to C:\WoA (this will be our working directory so create the folder if necessary)

Downloading the Windows binaries and converting to ISO

The following steps will download all Windows base binaries for v1803, upgrade it to the latest cumulative update if applicable, and create an ISO-image/install media. Depending on the hardware, this might take a very long time.
1. Extract 17134.1_arm64_en-us_561e1a0f_convert.zip to C:\WoA\1803
2. Open Command Prompt as Administrator
3. Type CD C:\WoA\1803 and press Enter
4. Type aria2_download_windows.cmd and press Enter

After a long wait, you will end up with a file C:\WoA\1803\ 17134.1.180410-1804.RS4_RELEASE_CLIENTPRO_OEMRET_ARM64FRE_EN-US.ISO. Creation of the ISO-image succeeded!

Preparing the µSD-card

The following steps require at least .NET framework version 4.6.1 and access to install.wim, found in the ISO-image. Using the latest Windows 10 release (version 1803 or 1809) is advisable. To keep things simple, next you must download a deployment tool. There currently exist two community created tools, WOA Deployer for Raspberry Pi and Windows on Raspberry imager. These instructions will use the easier one which automatically downloads all currently available drivers and the latest modified UEFI firmware, partitions the µSD-card, deploys the firmware plus Windows image and finally injects the drivers.
1. Using your favorite web-browser, head over to https://github.com/WOA-Project/WOA-Deployer-Rpi/releases/tag/v2.1.0

2. Download WOA.Deployer.zip to C:\WoA
3. Extract the content to C:\WoA\WOADeployer
4. Insert an empty µSD-card to your card reader using an µSD to SD adapter
5. If the µSD-card has any partitions, delete them by running diskpart from an elevated Command Prompt.

6. Mount the ISO-image
7. Navigate to C:\WoA\WOADeployer and launch WoaDeployer.exe as Administrator
8. ! WARNING ! Because this is experimental software, pay close attention to the following step or you might overwrite your system drive and render it unusable. ! WARNING !
Select the SD-Card in the Drive Selection section. In my case it is Disk 2.
9. In the Windows Image section press Browse and navigate to the mounted DVD and then find and select the install.wim file. In my case this is F:\sources\install.wim

10. Press Deploy
11. Read the confirmation prompt and if everything looks to be in order, press OK

12. Read the TrueTask USB EULA and press Accept

13. When Windows prompts you that you must format your disk, just press Cancel

14. Done! Eject the SD-card safely to avoid data corruption.

Booting the Pi for the first time

Now it’s time to boot your RPi for the first time. There are a few configuration steps we need to take before continuing into Windows. NOTE do NOT insert a network cable at this stage. We will explore networking in another article. Now we only want to focus on making the core OS work.
1. Insert the µSD-card into your RPi
2. Connect Mouse and keyboard to the USB ports
3. Connect power cable
4. When you see the Raspberry Pi splash screen, press ESC

5. Now you are greeted with the UEFI firmware

6. As you can see, the CPU clock speed is at 600MHz, so first step is to go and change that to 1.2GHz for better performance, because currently Windows can not adjust the frequency on demand. Head over to Device Manager -> Raspberry Pi Configuration -> Chipset Configuration and set Frequency to MAX

7. Press F10 followed by Y to save the changes
8. Navigate back to the first screen and go to Boot Maintenance Manager -> Boot Options -> Change boot order.
9. Press ENTER while the list of boot options is selected
10. Using your arrow keys select Broadcom SDHOST and press + to move it on top.

11. Press ENTER, F10 and Y to save the configuration.
12. Head back to the first screen and select reset and press ENTER. The RPi will reboot.
13. During the RPi splash screen, press ESC to enter the UEFI again.
14. Verify that the frequency is set to 1.2GHz. If not, do the above steps again.

15. Navigate down to continue, and press ENTER.
16. Now Windows will boot.

Booting into Windows for the first time

This will take a very long time to complete ,so be patient. But eventually you will be greeted with the OOBE screens. If for some reason you experience BSODs, then head over to the UEFI and select the Arasan SDCI host, instead of Broadcom. Don’t forget to change the boot order also. Using Arasan will be a lot slower, but much more compatible. On Windows 1803, I had no issues, but on 1809 I got random BSODs and I could never complete Windows Setup nor boot Windows while the Broadcom host was enabled.

Alright, so now let’s configure Windows. We want to enable as little features as possible.
1. Select your preferred region (I chose Finland)
2. Select your preferred keyboard layout (I chose Finnish)
3. Configure additional keyboards if you prefer (I chose Skip)
4. When asked to connect to a network, press Skip for now (because we do not want networking at this stage)
5. Accept the EULA
6. Enter a username (I chose Pi)
7. Enter a password (I chose Raspberry)
8. Confirm your password
9. Configure the security questions (I chose something random that works for me)
10. Select Don’t use speech recognition
11. Do not let MS use your location
12. Do not let Windows find your device
13. Only send Basic diagnostic data to MS
14. Do not let Windows improve Inking and Typing
15. Do not let Windows give you tailored experiences
16. Do not let Apps use advertising ID

Now Windows will make the final configurations, which will take a lot longer than “several minutes”. You will eventually even see a slide that says it is taking longer than expected.

Voila! We have a desktop. But it’s very slow with almost constant 100% CPU usage and 100% Disk usage. Don’t worry, let Windows complete its post processing work. It will take some time but will eventually settle down.

Looking at Device Manager

As you can notice from the screenshot above, some devices do not yet work, but most of them do and they work surprisingly well. We are still missing WiFi and BT drivers, so no wireless communication available. Connecting to the internet works indifferently well using the wired connection. The VideoCore IV GPU drivers are also completely missing. Currently, Windows is running a generic display driver which does not even show up in Device Manager. For the same reason HDMI audio will not work, but the 3.5 audio jack will gladly produce some noise for us. There are also two System Devices that do not start properly. This is most likely caused by the experimental UEFI, because these devices work on Windows IoT for Raspberry Pi. The only difference is that here we have 64-bit drivers compiled from the publicly available source repository and on IoT they are compiled into 32-bit. The current driver status can be checked at https://discourse.pi64.win/t/status-of-the-arm64-device-drivers-as-of-12-feb-2019/38

Testing some software

First thing I tried, was launching my favorite text editor, Notepad. Wow, to my surprise it launched in a blink of an eye! What about WordPad? Ok, clearly that took a bit longer with about 5s delay. Next up on my list was my favorite image editor Paint. I got about a 3 second delay.

What about some UWP apps? I tried Calculator next. First time it launched in about 6-8 seconds, but the next time I tried, it was almost instantaneous. Next, I tried Paint 3D. First launch took about 25 seconds before it was ready to be used. The second try took only 15 seconds. Clearly an improvement because of caching.

Testing reboot time

We clearly are limited by a µSD-card with very high read and write latencies, but I decided to test how long it takes to do a full reboot loop. Here are the results:

Shutdown portion took about 1.5 minutes, startup to login screen about 2 minutes and for the system to show the desktop and settle down and become usable it took around 3.5 minutes. While not that bad, there is clearly room for improvements here.

Final words

I am quite impressed with how well everything works so far. What I am even more impressed with is how little RAM the Windows 10 ARM64 version 1803 uses. I saw usage as low as 320MB RAM, which is nothing for a 64-bit operating system, considering how many services run in the background. CPU usage was 0-4% at idle, which mostly was caused by Task Manager. Disk usage hovered between 0-1%. Both usages were more often 0% than anything else.

Next, I will explore options to make Windows faster using an SSD, remove extra graphical bling, and disable services so Windows uses even less resources and should feel snappier. I will also connect to the internet and install some software. Hopefully, I can share even more exciting findings in an upcoming article, so stay tuned for more.

Toni

Author: Toni Fasth

16 Responses “Windows 10 Pro ARM64 on a Raspberry Pi 3 Model B/B+ by Guest Author Toni Fasth”

  1. Alex
    June 9, 2019 at 20:50

    Hello Toni
    Congrats for the tutorial
    Everything works as you said!
    For my part the Windows is not exploitable 🙁
    The least clik generates big slow.
    Disk usage goes directly to 100%
    Maybe my SD card is bad …

    Alex from France

    • Toni Fasth
      June 10, 2019 at 11:31

      Thanks Alex. Glad to hear you got it working.

      It will take quite a while before Windows settles down. Running Windows from an SD-card is far from optimal and is a big bottleneck. It helps if you install everything on an external USB-disk (preferably an SSD). The problem with having Windows installed on an USB-drive is that Windows refuse to upgrade, so one has to manually re-deploy Windows if one wants to use the latest version available.

      • June 11, 2019 at 14:13

        Just an idea: In case you are not able to upgrade Windows on a USB drive, create a full Macrium image of it and import the image to a Hyper-V host machine. Now use Macrium viBoot to mount that image as a virtual machine with no network connection to prevent driver updates, upgrade it using ISO, save the changes and restore the image on Raspberry’s USB drive. Should work.

        The process detailed here: Macrium viBoot & A hassle-free, no risk Windows 10 upgrade

  2. venkat
    August 3, 2019 at 07:04

    Hai Toni
    Your article was excellent. In first round i was able to boot win 10 on ras pi. Tnx for article. Can you pl suggest how to enable network which was skipped in this article, (When asked to connect to a network, press Skip for now (because we do not want networking at this stage))
    regards

    • Toni Fasth
      August 5, 2019 at 08:51

      Hi Venkat and thank you.

      The reason why we did not connect to the network at the setup stage is, because we wanted to make sure Windows does not try to update drivers or files during setup and break things. It’s a lot faster to get to the desktop this way too. You can plug in a network cable after the operating system has settled down. It should work out of the box. I’ve even tried to update to later Cumulative Updates, while it works, is very slow, because we’re running from an SD-card. There is also a risk of breaking the SD-card because of too many disk writes.

      Later I’ve re-imaged the installation to an SSD, which made the OS a lot faster. But because of how Windows upgrades work, it is not possible to upgrade to newer builds. It is completely blocked when running over USB. Cumulative, Virus Definition and Store App Updates should work fine though.

  3. Julien GALINEAU
    September 5, 2019 at 16:15

    Hi, how did you re-imaged the installation to an SSD? Dis you just clone the SD Card on a SSD drive? No problem to make the Pi boot on the SSD?
    Thanks

    • Toni Fasth
      September 5, 2019 at 18:36

      Hi Julien,

      Excellent question. You can deploy the Windows image exactly the same way you do for the SD-Card using WoA Deploy. That’s the easiest way. You should also be able to clone your working system from the SD-Card to your USB hdd/ssd, but make sure your USB drivers are working properly before you do so.

  4. Julien GALINEAU
    September 6, 2019 at 11:26

    Thanks, I will try using WoA. But how do you get the raspberry to boot on the usb drive? I did the modification on the config.txt and reboot the raspbian OS with it, I will see if it works.

  5. Toni Fasth
    September 6, 2019 at 16:14

    Yes, you need to enable the usb boot flag in the Raspberry Pi by booting using that modified config.txt. I assume you have found the correct instructions to do that. It’s a one time operation, and once done, the USB boot option will be enabled forever.

  6. Julien GALINEAU
    September 9, 2019 at 14:11

    Hi, I manage to boot on the USB drive but I have a error booting windows: INACCESSIBLE_BOOT_DEVICE
    I tried to clone the SD card that work or to boot from a new installation but same problem. I already change in the boot manager device to the USB drive (it was not booting on windows if I didn’t do that). Any idea?
    Thanks

    • Toni Fasth
      September 9, 2019 at 14:27

      It sounds like your USB drivers aren’t working properly or something went wrong during deployment of Windows.

  7. Julien GALINEAU
    September 9, 2019 at 14:38

    DOes it mean my USB drive is the problem? What USB drivers are you refering to? From windows or from the loader?

    • Toni Fasth
      September 9, 2019 at 18:52

      I really don’t know what the reason is in your case. It works fine for me.

      Are you using the same image I mentioned in this article? Not all versions work reliably on the Raspberry Pi.

  8. Julien GALINEAU
    September 10, 2019 at 09:58

    Yes I used exactly the same. I will try to deploy it again, it is very very long, so maybe something had gone wrong. Thnaks for your help.

  9. billa
    October 19, 2019 at 08:04

    Hi, i am so thankfull for your execelent article.
    i am follow of your tutorial and it work fine and the windows was installed at rasp pi but i want to connect to wifi, how another way to connect the wifi except plug in network cable ?

    • Toni Fasth
      October 19, 2019 at 10:45

      Hi Billa,

      Unfortunately the RPi3 built-in WiFi and BT does not currently work because of missing drivers. There may exist some WiFi dongles, that could work via USB. However I have not tested this.

      I am hoping that the release of RPi4 will spark some new interest in Windows 10 ARM64 on RPi. Since the new board is more powerful, it could become a very good platform for Windows users.

      I’ll definitely write a new post if this happens. Hopefully we get a 100% working solution then.

Leave a Reply