How to run Windows 10 Server ARM64

Discuss Windows Vista, 7, 8.x, 10 and Windows Server 2008, 2008R2, 2012, 2016, 2019, Home Server, SBS 2008, SBS 2011.
LightBulbFun
FTP Access
Posts: 6
Joined: Tue Dec 12, 2017 8:19 pm

Re: How to run Windows 10 Server ARM64

Post by LightBulbFun »

Woo!

I got windows 10 build 16296 for ARM64 to boot in QEMU! :mrgreen:

it was a lot of hard work but I finally did it, I spent most of yesterday and all of today working on it but I finally did it!

the long and the short of it is.

the latest custom EFI linked in this thread is sadly a debug build and as such causes windows to BSOD

but I had come across an RELEASE EFI build that was a bit older, that DID boot windows 10, here in post 3: https://bugs.launchpad.net/qemu/+bug/1717708 unfortunately for me, from what I can tell it only worked with the bare minimum of devices, stuff like mass storage USB, NVMe or AHCI SATA none of that would show up as bootable in this EFI build but the last few posts gave me some ideas and hopes.


in that I made a VMDK file containing the USB mass storage EFI Driver linked in this thread, and loaded it. this got the EFI to see the USB CD ROM and i was able to boot from it, and the windows installer could now see "itself" but no matter what I did I could not get anything to show up for windows to install to! I tried NVMe AHCI nothing would show up, but inputting another USB Storage device would show up, but of course windows wont let you install to USB devices!

so what I did I used DISM ( https://docs.microsoft.com/en-us/window ... using-dism ) in a windows 10 x64 VM to deploy the ARM64 ISOs install.wim to a USB HDD formatted as NTFS (GUID with an EFI partition) luckily for me it did manage to deploy the .wim properly! now to make sure i had the right bootloader files, I booted into the windows ARM ISOs installer in QEMU and applied the BCD stuff from there. which also worked! (this part is basically exactly what Googulator did :) )

and I was finally able to boot windows to a desktop. it took FOREVER to do all the first time setup stuff but it did get there in the end!

this was my final cmd line in the end that I found ran the best for me (so far Cortex A53 runs a bit better then A57 for me on my System, a Mac Pro 5,1 10.13.2 Dual X5677s 32GB DDR3 ECC RDIMMs)

Code: Select all

$ sudo qemu-system-aarch64 -M virt -m 8192 -cpu cortex-a53 -smp 6 -device VGA -device nec-usb-xhci -device usb-kbd -device usb-mouse -drive file=/dev/rdisk5,id=system,if=none,format=raw -device usb-storage,drive=system -drive file=10.0.16296.0.rs3_release.170919-1503_arm64fre_client-professional_retail_en-us-J_CPRA_ARM64FRE_EN-US_DV5.iso,id=install,if=none,media=cdrom -device usb-storage,drive=install -bios /Volumes/Storage/Downloads/QEMU_EFI.fd -hda ~/Documents/windows-arm-test-2.vmdk
this is not meant to be a guide per-say but I hope it helps some people out :)

heres a screen shot for you to all enjoy :)

Image

LightBulbFun
FTP Access
Posts: 6
Joined: Tue Dec 12, 2017 8:19 pm

Re: How to run Windows 10 Server ARM64

Post by LightBulbFun »

bit of an update :)

while this post was validating I made a a thing/discovery

I managed to get windows booting via USB without the need to use the older firmware and having to preload the USB driver.

what I did was using UEFITool. take the latest release UEFI firmware from here http://snapshots.linaro.org/components/ ... -upstream/ which has no VGA driver

and take the noKVM firmware file from here that is sadly a debug build which does not boot windows but has the VGA driver. (this UEFI has basically the same thing I did done to it but Googulator did it at a source code level :) )

and then I extracted the QEMU VGA driver out of the custom debug firmware and I inserted it into the Latest UEFI firmware

and it worked! i got working VGA and i was able to boot windows directly from USB :) sadly I did not see any NVMe driver in the latest UEFI and it cant see an NVMe storage device, so far now we will still have to manually image windows since the installer refuses to install to a USB device.

(I tried looking for an ARM NVMe EFI driver but I could not find much)

here is the link to the firmware https://mega.nz/#!4AoiTSSQ!yTIk_27DVCk2 ... NZbLi5QGeI

and this is my cmd line: sudo qemu-system-aarch64 -M virt -m 4096 -cpu cortex-a53 -smp 4 -device VGA -device nec-usb-xhci -device usb-kbd -device usb-mouse -drive file=/dev/rdisk2,id=system,if=none,format=raw -device usb-storage,drive=system -bios ~/Documents/QEMU_EFI_TEST.fd

I hope this helps :)

yukitsu
Posts: 2
Joined: Mon Jun 26, 2017 6:39 am

Re: How to run Windows 10 Server ARM64

Post by yukitsu »

I think you can try to run on a real ARM64 platform.

BetaNewbie
FTP Access
Posts: 214
Joined: Sun Jul 21, 2013 7:38 am

Re: How to run Windows 10 Server ARM64

Post by BetaNewbie »

LightBulbFun wrote:Woo!

I got windows 10 build 16296 for ARM64 to boot in QEMU! :mrgreen:

it was a lot of hard work but I finally did it, I spent most of yesterday and all of today working on it but I finally did it!
...
With your tutorial I successfully installed 17074, thanks!
16299 is also working.

Image

Note: If you expand the EFI image to 64MiB, then create an empty file named VARS.fd whose size is also 64MiB, and load both of them using '-pflash' instead of '-bios', the CMOS settings may be saved.

LightBulbFun
FTP Access
Posts: 6
Joined: Tue Dec 12, 2017 8:19 pm

Re: How to run Windows 10 Server ARM64

Post by LightBulbFun »

BetaNewbie wrote:
LightBulbFun wrote:Woo!

I got windows 10 build 16296 for ARM64 to boot in QEMU! :mrgreen:

it was a lot of hard work but I finally did it, I spent most of yesterday and all of today working on it but I finally did it!
...
With your tutorial I successfully installed 17074, thanks!
16299 is also working.

Image

Note: If you expand the EFI image to 64MiB, then create an empty file named VARS.fd whose size is also 64MiB, and load both of them using '-pflash' instead of '-bios', the CMOS settings may be saved.
Awesome :)

glad to see it works for you as well :) is this using the custom UEFI image i hacked up?

I gave the pflash stuff a go and I can confirm it at least remembers the Rez I set the VM too which is nice :)

im still running 16296, as I could not find 16299 for ARM64 in the FTP?

its worth noting that theres a whole BUNCH of unknown devices in device manager, im guessing this is all the virtio stuff...

meagain
User avatar
Donator
Posts: 229
Joined: Mon Dec 07, 2015 6:04 pm
Contact:

Re: How to run Windows 10 Server ARM64

Post by meagain »

Image

This is pretty damn cool to see. I'd love to see it on real hardware - sadly the only arm64 device I have is my phone. Could pick up a Pi 3 but of course then there's that non-standard driver issue thing that stopped RT 8.x and Phone / Mobile from running AFAIK?

edit 1:

Image because why not

edit 2: nope looks like it refuses to start, dunno if that's down to the extremely slow cpu performance or compatibility
Any users with a KryoFlux in the UK: if you could dump some floppies if I send them to you, that'd be awesome. PM me.

Uncle_Yellow
Posts: 12
Joined: Sat Feb 22, 2014 3:45 pm

Re: How to run Windows 10 Server ARM64

Post by Uncle_Yellow »

Recently the 64-bit uefi of Pi3 has come out.Can anyone try it out?

shaylansherif
Posts: 1
Joined: Sun Jan 21, 2018 2:36 pm

Re: How to run Windows 10 Server ARM64

Post by shaylansherif »

@LightBulbFun
You can download UUP files from MS server using this site. https://uup.rg-adguard.net/index.php
Then, can convert UUP to ISO/install.wim using this tool. https://forums.mydigitallife.net/posts/1303176

LightBulbFun
FTP Access
Posts: 6
Joined: Tue Dec 12, 2017 8:19 pm

Re: How to run Windows 10 Server ARM64

Post by LightBulbFun »

shaylansherif wrote:@LightBulbFun
You can download UUP files from MS server using this site. https://uup.rg-adguard.net/index.php
Then, can convert UUP to ISO/install.wim using this tool. https://forums.mydigitallife.net/posts/1303176

awesome :)

thanks for the tip, I gave it a go and I was able to make an ISO indeed :) iv not yet tested the ISO tho as deploying it and setting it all up is quite time consuming LOL

Uncle_Yellow
Posts: 12
Joined: Sat Feb 22, 2014 3:45 pm

Re: How to run Windows 10 Server ARM64

Post by Uncle_Yellow »

jason098 wrote:
WindowsNeptune wrote:Uh, seems there aren't any other ways....
Well, has anyone tried running it on a Raspberry Pi 3 yet?
Got my 3B and tried the uefi firmware Ended up in 0xc0000225
tested 14324 14901 16299.15 and I can't get through.Added acpi tables from ms-iot's source but seems useless.

Trotsky
Posts: 1
Joined: Fri Feb 02, 2018 4:26 am

Re: How to run Windows 10 Server ARM64

Post by Trotsky »

I got "Something went wrong" error in OOBE every time.
Only can "Try again". But return back to "Something went wrong".
Does anyone know how to avoid this?
:?
I tried qemu-w64-setup-20171217.exe and qemu-w64-setup-20171116.exe.

Code: Select all

qemu-system-aarch64 -M virt -cpu cortex-a53 -smp 2 -m 2g -bios QEMU_EFI.fd -device VGA -device nec-usb-xhci -device usb-kbd -device usb-tablet -drive file=Windows10A64.qcow2,id=usbstick,if=none -device usb-storage,drive=usbstick -drive file=fat:rw:EFI,format=raw
Using QEMU_EFI.fd is https://releases.linaro.org/reference-p ... EMU_EFI.fd.
EFI directory contains USBMassStorageDxe_arm64.efi.
Tried build is 16299, 17074 and 17083.

Uncle_Yellow
Posts: 12
Joined: Sat Feb 22, 2014 3:45 pm

Re: How to run Windows 10 Server ARM64

Post by Uncle_Yellow »

Trotsky wrote:I got "Something went wrong" error in OOBE every time.
Only can "Try again". But return back to "Something went wrong".
Does anyone know how to avoid this?
:?
I tried qemu-w64-setup-20171217.exe and qemu-w64-setup-20171116.exe.

Code: Select all

qemu-system-aarch64 -M virt -cpu cortex-a53 -smp 2 -m 2g -bios QEMU_EFI.fd -device VGA -device nec-usb-xhci -device usb-kbd -device usb-tablet -drive file=Windows10A64.qcow2,id=usbstick,if=none -device usb-storage,drive=usbstick -drive file=fat:rw:EFI,format=raw
Using QEMU_EFI.fd is https://releases.linaro.org/reference-p ... EMU_EFI.fd.
EFI directory contains USBMassStorageDxe_arm64.efi.
Tried build is 16299, 17074 and 17083.
maybe Ctrl-shift-F3 will help?

adinbied
FTP Access
Posts: 3
Joined: Fri Feb 23, 2018 12:58 am

Re: How to run Windows 10 Server ARM64

Post by adinbied »

https://twitter.com/NTAuthority/status/ ... 8292430849
^ I know someone managed to get Win10 running on an RPi3, although from his comments it seems like it required a custom EFI as talked about above. Does anyone know if there's been more progress on getting it running on native ARM hardware?

Uncle_Yellow
Posts: 12
Joined: Sat Feb 22, 2014 3:45 pm

Re: How to run Windows 10 Server ARM64

Post by Uncle_Yellow »

hmm..Does anyone know what 0xc0000225 means?

Benjiman43
Posts: 4
Joined: Fri Mar 02, 2018 7:58 pm

Re: How to run Windows 10 Server ARM64

Post by Benjiman43 »

For some reason I can't seem to get this working - I always get a BSOD with an "KMODE EXCEPTION NOT HANDLED' error. I've tried all the mentioned build numbers here without success, as well as different versions of QEMU on different platforms. I always get the same error.

Any idea what could be going on?

WindowsNeptune
Donator
Posts: 437
Joined: Thu Dec 20, 2012 1:13 pm
Location: People's Republic of China
Contact:

Re: How to run Windows 10 Server ARM64

Post by WindowsNeptune »

Friends, I don't know whether you've seen this or not: A user called Rafael Rivera compiled ARM64 version of VirtIO Harddisk driver, so we can install Windows 10 ARM64 directly boot from CDROM. He also compiled his modded firmware (he said the firmware re-enabled VGA support). His article about all things is here: https://withinrafael.com/2018/02/11/boo ... 0-in-qemu/

I am very grateful to him and people like @never-released who helped him. Well here's my persional point of view: I think use some regedit trick to skip OOBE is a good way to avoid using a lot of time (On my machine OOBE crashs or error each time). The way is, press Shift+F10, enable Administrator using command: net user Administrator /Active:yes, Then open regedit and locate to HKLM\system\setup, change ALL VALUE to 0, at last use shutdown -r -t 0 to restart.

gilius
Posts: 7
Joined: Mon Mar 26, 2018 9:17 pm

Re: How to run Windows 10 Server ARM64

Post by gilius »

Hi Guys... I'm new here! I spent the whole weekend trying to get this to work, but had limited success.

I tested 4 different firmware/bios posted in this thread:
QEMU_EFI.fd
QEMU_EFIa.fd
QEMU_EFI_TEST.fd
QEMU_EFI.img+QEMU_VARS.fd

One did not initialize the display. Two got as far as a blue screen (first stage). Only Rafael's got to "copy across installation files", but crashes after next reboot with a blue screen following "getting devices ready". Incidentally, with Rafael's firmware, it crashed on my windows desktop host (2nd stage), but on my Linux host on a different Intel laptop it got as far as a network screen (2nd stage) and could not continue after having to hit retry/skip on some similar screens with prefix "Ober", i.e. "Oberregion" or "Oberlocal".

Now, here comes the really interesting part... so far I've only got this to boot up fully on my Android phone via Linux Deploy - none of my pre-6th generation intel PCs have been successful - and ONLY after I changed the QEMU CPU settings from cortex-a57 to cortex-a53 to match my phone (Huawei Mate 10 Pro with Kirin 970 cortex-a53 based processor)! There was also a noticeable speed increase too...just from changing a57>a53 (doesn't really affect anything on my old Intels though it seems).

Following that partial success, I'm now on an even more impossible mission to get KVM to work on Android phone via Linux Deploy. Do we even know if -enable-kvm works on Aarch64/rafael's newest firmware? There was a rumour that old firmware was deliberately incompatible with KVM, but could the situation have changed since Rafael's firmware, the latest windows 10 arm insider, and the latest version of QEMU?

Of course without an actual Arm64 host one cannot really know for sure if -enable-kvm will work. I could test it right now, but a problem with Linux Deploy's CHROOT container and my lack of technical know-how is what's standing in my way... By default, the container doesn't pull across the correct CPU details, as it appears to be isolating direct access to certain devices and services.

In my Android /proc/cpuinfo I got 8 cores listed 0-7 as follows:
processor : 7
model name : ARMv8 Processor rev 2 (v8l)
BogoMIPS : 3.84
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd09
CPU revision : 2

But in my Linux Deploy CHROOT container file system /proc/cpuinfo displays the following (incorrect) entries:
processor : 7
BogoMIPS : 3.84
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd09
CPU revision : 2

There are far less CPU flags/features and that's probably why no KVM is being detected inside the container environment. I think, somehow, a command like this needs to be run against the container:
mount -t proc none /proc

What is everyone else's thoughts on this...?

BTW, if you would like to get started with Windows on Linux on Android then please see my Youtube video I recently published:
https://www.youtube.com/watch?v=vkSOrhqzXUY

So... how to take this to the next stage and get windows 10 ARM running on new ARMv8-A based smart phones with full KVM acceleration? However - see this article:
https://www.techspot.com/review/1599-wi ... rformance/

BetaNewbie
FTP Access
Posts: 214
Joined: Sun Jul 21, 2013 7:38 am

Re: How to run Windows 10 Server ARM64

Post by BetaNewbie »

It is said that the incompatibility with KVM is the actual reason why VGA support is removed, so you may have no luck there.

gilius
Posts: 7
Joined: Mon Mar 26, 2018 9:17 pm

Re: How to run Windows 10 Server ARM64

Post by gilius »

BetaNewbie wrote:It is said that the incompatibility with KVM is the actual reason why VGA support is removed, so you may have no luck there.
Is there an official statement for this published anywhere? Could Rafael's custom EFI drivers nullify that?

We at least know for sure that based on all the non-specific guides floating about, qemu-system-aarch64 and -enable-kvm, go hand-in-hand. So, what exactly affects the running of Windows ARM on Android/Linux hosts with full acceleration?

Being from a Windows background I am struggling to understand Linux terminology and concepts - often lacking clear definitions as to what exactly is being achieved through published scripts - but I was at least able to build up a partial picture of this problem and glean a potential solution:

Back in 2015 some guys were able to get Windows 10 (x86) running on Asus Zenfone 2 (one of the few phones with an Intel chip inside), but he needed a "KVM-enabled kernel":
https://forum.xda-developers.com/zenfon ... m-t3153299

Even the year before, in 2014, this guy was able to run KVM on aarch64 using a "KVM-enabled kernal" and a technique known as "Cross-compiling":
http://insanum.com/blog/arm-kvm-fast-model.html

He was using source code obtained from this site, which is still maintained today - but for what purpose exactly...?
https://releases.linaro.org/archive/14. ... /binaries/

I got no real idea what these guys are doing, but I know it's very close to what we need to achieve KVM acceleration on Android/Linux hosts for aarch64 and Windows ARM - unless it truly remains a stumbling block.

Also, we know that CPU flags have got something to do with it:
Q: Do I have hardware virtualization support?
vmx – Intel VT-x, virtualization support enabled in BIOS.
svm – AMD SVM,virtualization enabled in BIOS.
https://unix.stackexchange.com/question ... uinfo-mean

But what are the flags for Arm64 virtualization?? Does it even use the same system to determine such support?

gilius
Posts: 7
Joined: Mon Mar 26, 2018 9:17 pm

Re: How to run Windows 10 Server ARM64

Post by gilius »

BetaNewbie wrote:It is said that the incompatibility with KVM is the actual reason why VGA support is removed, so you may have no luck there.
Still haven't been able to find out any further information regarding the above - what is the source? Anyhow, I finally got to test this with a KVM-enabled kernel on a 64-bit Linux distro, and I can now confirm that the screen goes black when device -vga is used in conjunction with -enable-kvm. Turn off KVM and it displays fine, albeit very slow. So what's the problem here exactly...?

Uncle_Yellow
Posts: 12
Joined: Sat Feb 22, 2014 3:45 pm

Re: How to run Windows 10 Server ARM64

Post by Uncle_Yellow »

Well now we can get this to boot on a RaspberryPi3 using windbg.
The discussion on github:
https://github.com/andreiw/RaspberryPiPkg/issues/12
The driver for usb is also open source now.

BetaNewbie
FTP Access
Posts: 214
Joined: Sun Jul 21, 2013 7:38 am

Re: How to run Windows 10 Server ARM64

Post by BetaNewbie »

gilius wrote:
BetaNewbie wrote:It is said that the incompatibility with KVM is the actual reason why VGA support is removed, so you may have no luck there.
Still haven't been able to find out any further information regarding the above - what is the source? Anyhow, I finally got to test this with a KVM-enabled kernel on a 64-bit Linux distro, and I can now confirm that the screen goes black when device -vga is used in conjunction with -enable-kvm. Turn off KVM and it displays fine, albeit very slow. So what's the problem here exactly...?
Okay, now I have a good news and a bad news.

Good news is a custom qemu that supports ramfb device, which somewhat emulates what a VGA device will do (linear framebuffer) and is compatible with KVM.

The bad news is, I can't get it to work yet. It works in arm64 full emulation, but in KVM mode, it stucks at Windows boot screen (at least we have a working display). I am not sure whether the problem is in the KVM side or the ramfb side. So I need your help.

My test environment: Raspberry Pi3 (BCM2837), Arch Linux Arm Latest (Kernel 4.16.8).

QEMU source: https://www.kraxel.org/cgit/qemu/log/?h=sirius/ramfb

EFI with ramfb drivers: https://github.com/kraxel/edk2/commits/ramfb
my build: https://pan.baidu.com/s/1vxbBc6euhxSX9ICbSBNAqA
Last edited by BetaNewbie on Sat May 12, 2018 8:13 pm, edited 1 time in total.

BetaNewbie
FTP Access
Posts: 214
Joined: Sun Jul 21, 2013 7:38 am

Re: How to run Windows 10 Server ARM64

Post by BetaNewbie »

The BCM2837 in RPi3 has its own oddities like a non-standard interrupt controller, so I think that may be a chip specific issue.

gilius
Posts: 7
Joined: Mon Mar 26, 2018 9:17 pm

Re: How to run Windows 10 Server ARM64

Post by gilius »

Thanks for your efforts! What do we do with these 2 files exactly?
QEMU_EFI.fd
QEMU_VARS.fd

Raphael added his versions using -pflash, but they were in IMG format. Instead of -pflash, I tried just -bios QEMI_EFI.fd without including the QEMU_VARS.fd in my script, but it's stuck on "waiting for guest to initialize display".

Incidentally, KVM notwithstanding, Raphael's solution boots all the way through without any kernel panics using the latest Intel CPU host (i7-8700K), so for all those who were unable to get this to boot up in any shape or form: qemu-system-aarch64 works better with newer Intel CPUs even though the guest is ARM64!

BetaNewbie
FTP Access
Posts: 214
Joined: Sun Jul 21, 2013 7:38 am

Re: How to run Windows 10 Server ARM64

Post by BetaNewbie »

gilius wrote:Thanks for your efforts! What do we do with these 2 files exactly?
QEMU_EFI.fd
QEMU_VARS.fd

Raphael added his versions using -pflash, but they were in IMG format. Instead of -pflash, I tried just -bios QEMI_EFI.fd without including the QEMU_VARS.fd in my script, but it's stuck on "waiting for guest to initialize display".

Incidentally, KVM notwithstanding, Raphael's solution boots all the way through without any kernel panics using the latest Intel CPU host (i7-8700K), so for all those who were unable to get this to boot up in any shape or form: qemu-system-aarch64 works better with newer Intel CPUs even though the guest is ARM64!
You'll need that custom QEMU above, and use -device virtio-ramfb, otherwise it will have no graphics.
That EFI has no other graphic driver other than virtio-ramfb.
And actually this is a little bit useless if not using KVM, since -device VGA will be faster.

Post Reply