Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ARM Windows boot #4

Open
1 of 2 tasks
mcb30 opened this issue Jul 20, 2020 · 23 comments
Open
1 of 2 tasks

ARM Windows boot #4

mcb30 opened this issue Jul 20, 2020 · 23 comments

Comments

@mcb30
Copy link
Member

mcb30 commented Jul 20, 2020

Description

As a user, I would like to be able to boot ARM versions of Windows via wimboot, so that I can take advantage of HTTP boot.

Acceptance criteria

  • Ability to boot into some version of Windows on 32-bit ARM via qemu+OVMF+iPXE+wimboot
  • Ability to boot into some version of Windows on 64-bit ARM via qemu+OVMF+iPXE+wimboot

Dependencies

@mcb30 mcb30 added this to the v2.7.0 milestone Jul 20, 2020
@mcb30 mcb30 self-assigned this Jul 20, 2020
@kji2k
Copy link

kji2k commented Aug 4, 2022

Hello Sir,
So wimboot can support ARM64 since v2.7.0, am i right?

Thanks,

@NiKiZe
Copy link

NiKiZe commented Aug 4, 2022

No changes for ARM has been made, Label not chagned.

Also see #3 which is blocking this

@kji2k
Copy link

kji2k commented Aug 4, 2022

No changes for ARM has been made, Label not chagned

Thanks, will it be supported in 2.8.0? Appreciate if any schedule/plan.

@jeffglaum
Copy link

+1, are there plans for an arm64 wimboot port? Thanks.

@lexalex1
Copy link

+1. Thanks

@tuxthepenguin84
Copy link

I see the recent commits for ARM64 support, does anyone have any instructions on how I can build this on my own?

@mcb30
Copy link
Member Author

mcb30 commented Jan 22, 2024

I see the recent commits for ARM64 support, does anyone have any instructions on how I can build this on my own?

Just type make and you'll get both the x86 and AArch64 versions built. You will need to install an appropriate cross-compiling gcc (or use clang).

@tuxthepenguin84
Copy link

Thanks I will try that. Curious if you will be publishing a new release that includes arm64 binaries?

@mcb30
Copy link
Member Author

mcb30 commented Feb 8, 2024

Yes, the next release will include the arm64 binaries.

I've been delaying the release since the ARM portion is not yet covered by the automated testing, and I was hoping to get that done first. That said, the automated testing part is likely to be cumbersome to get working since the state of ARM virtualization is very immature compared to x86: there are multiple bugs and quirks that make it difficult to spin up an ARM Windows VM that can actually get as far as running the OS. The only combination I've found so that that works is to build EDK2's SbsaQemu firmware from source and use it in a sbsa-ref QEMU virtual machine to boot an MSDN-downloaded Windows 10 (not 11) image.

I may end up making a release that includes the ARM binaries without them being covered by the automated testing support, but I'd prefer to avoid that if possible.

@mlyxshi
Copy link

mlyxshi commented Apr 8, 2024

I try to boot winpe in oracle aarch64 server.

  1. create arm64 winpe iso
  2. use dism to add virtio driver
  3. chain ipxe script
#!ipxe
kernel http://IP:PORT/wimboot.arm64
initrd http://IP:PORT/bootmgr.efi  bootmgr.efi
initrd http://IP:PORT/Boot/boot.sdi boot.sdi
initrd http://IP:PORT/EFI/Microsoft/Boot/BCD BCD
initrd http://IP:PORT/sources/boot.wim boot.wim
boot

The final message is Forcing text mode output then Loading files....
However, the gui screen of winpe didn't show up and VNC console just show "Guest disabled display"
I use the same way to boot x86-64 winpe and succeed.

@mcb30
Copy link
Member Author

mcb30 commented Apr 8, 2024

I try to boot winpe in oracle aarch64 server.

It sounds as though you're trying to boot Windows in a virtual machine. As mentioned above, getting Windows running in an ARM VM (independent of iPXE/wimboot) is irritatingly difficult. (For example: Windows requires the hypervisor and firmware to support a Secure World accessed via HVC, but this is not supported in most configurations of QEMU.)

Try getting Windows running at all first (e.g. try creating a bootable ISO), so that you know you have an ARM VM setup that is actually capable of running Windows first.

@tuxthepenguin84
Copy link

tuxthepenguin84 commented May 10, 2024

I'm trying to test this out on a Dell Inspiron 3420. It's an ARM64 Windows 11 laptop (Qualcomm Snapdragon processor).

Using pre-release 2.8.0

I get something similar to mlyxshi above. I have an identical ipxe script and when boot.wim loads I get some text that scrolls pretty fast so its hard to read but I see something similar, Forcing text mode output then Loading files... which does several progress bars then I see the Dell logo and the machine reboots.

If I take the exact same boot.wim and USB boot it works fine and I can boot into WinPE and it does an install.

Edit: I am not using any type of external display, only the builtin display in the laptop.

@tuxthepenguin84
Copy link

2024-05-09_20-03-21_IMG_6535

@NiKiZe
Copy link

NiKiZe commented May 10, 2024

You can use pause to stop at the text gui to run the rest in full gui mode.

Only load wimboot kernel and the boot.wim, drop BCD, boot.sdi etc (these are extracted from boot.wim)

This will reduce the parameters that could be causing the reboot.

@tuxthepenguin84
Copy link

Thanks for the quick response. I played around with it some more last night and did try only loading wimboot and boot.wim but that didn't seem to change any thing. Also tried kernel wimboot pause

I also played around with Disabling automatic BCD modifications, Disabling automatic BCD modifications, Displaying graphical boot messages, found here: https://ipxe.org/wimboot#troubleshooting Nothing seemed to yield any better results.

@tuxthepenguin84
Copy link

Were there any differences between the pre-release 2.8.0 and the current release of 2.8.0?

@mcb30
Copy link
Member Author

mcb30 commented Jul 12, 2024

The only difference between a prerelease and a release is that the release is signed for Secure Boot. Other than that, the binaries are identical (and are verified to be identical).

@tuxthepenguin84
Copy link

Thanks I appreciate it. Any recommendations for troubleshooting the issues I mention above?

@NiKiZe
Copy link

NiKiZe commented Jul 12, 2024

Did you try gui command line?
Again, no BCD, no boot.sdi or other files.
Use the original boot.wim, unmodified, from the windows ISO.

Any modification, especially drivers, slipped into the wim is often causing issues, I tend to load drivers manually after completed boot.

@tuxthepenguin84
Copy link

Yes, I tried gui command line and also no BCD, no boot.sdi or other files. I'm trying to recall which boot.wim I tried previously... It did work via USB boot but not via PXE wimboot.

The hardware I'm working and testing on is the Dell Inspiron 3420 (Qualcomm)

There is the boot.wim that is included with the Dell recovery image that comes with all the necessary drivers integrated already (Windows 11 22H2 ARM64), I can USB boot this no problem.

There is also the boot.wim that is part of the Windows 11 23H2 ARM64 ISO provided by Microsoft VLC, this unfortunately does not include necessary drivers for the Dell Inspiron 3420 to boot as it lacks some Qualcomm drivers (maybe a future version of this image will, but at the moment Windows 11 23H2 ARM64 does not). To USB boot this we have to inject the Qualcomm drivers into boot.wim, once that is done I can USB boot with no issues on the Dell Inspiron 3420.

Unfortunately I don't recall which boot.wim above I was testing with back in my May comments...

I don't have my Dell Inspiron 3420 with me today but I will see if I can set aside some time in the coming weeks to get my setup going again and try the various boot.wim files to see what may work.

I appreciate everyone's effort here. If we can get wimboot working on the Dell Inspiron 3420 it can help streamline our imaging process.

@NiKiZe
Copy link

NiKiZe commented Jul 12, 2024

Which drivers does it lack to boot? Win PE runs from memory, so it shouldn't need any driver at all to boot, having access to network and disk is a different matter.

When booting from USB .wim is loaded by bootmgr using the firmware drivers for USB/disk access. I'm not looking for a "working install" here, just getting in to WinPE, probably with some kind of error, instead of the reboot you are currently seeing.

I would not want to have any driver at all included in boot.wim, NIC drivers is injected by wimboot, and then loaded by script. Disk drivers is loaded by the windows installation using unattended.xml, this way only minimal drivers is loaded and crash bugs is avoided, but if they do crash, there will be clear pointers as to which driver is causing the crash.

Parts of this kind of logic (but not yet all) can be found in https://github.com/NiKiZe/wimboot-install

@tuxthepenguin84
Copy link

The Windows 11 23H2 ARM64 ISO provided by Microsoft VLC lacks storage, keyboard, and trackpad drivers (others as well) for the Dell Inspiron 3420. But yes sorry, I can USB boot that ISO but the install fails because of the missing drivers.

I've tried again using the release version of wimboot.arm64 and the unmodified Windows 11 23H2 ARM64 ISO provided by Microsoft VLC boot.wim but I'm still not having any luck. Same issues as before described on May 9th comment above, I see Loading files... and then it reboots.

May I ask what version of Windows 11 ARM64 are you using and where you obtained the ISO from?

@tuxthepenguin84
Copy link

In the coming months I'll hopefully be trialing Windows 11 ARM64 and Parallels Desktop on Macs. I'll let you know how things go.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants