Booting Windows 11

Ilias Apalodimas ilias.apalodimas at linaro.org
Wed Aug 16 09:11:29 CEST 2023


Hi Simon, 

On Tue, Aug 15, 2023 at 07:22:56PM -0600, Simon Glass wrote:
> Hi Heinrich,
> 
> I thought I would try booting Windows on U-Boot but it does not get
> very far. Have you tried that? I note a ew odd things below. Is there
> a validation suite for it?
> 
> https://github.com/sjg20/u-boot/tree/efi2
> 
> qemu-system-x86_64  -smp 4 -m 8G -serial mon:stdio -bios
> /tmp/b/qemu-x86_64/u-boot.rom -drive
> id=fisk,file=root.img,if=virtio,driver=raw -drive
> id=disk,if=virtio,file=/vid/software/win/Win11_22H2_English_x64v2.iso
> 
> Scanning bootdev 'virtio-blk#0.bootdev':
> efi_install_multiple_protocol_interfaces_int() EFI: Call:
> efi_locate_device_path(protocol, &dp, &old_handle)
> efi_locate_device_path()   EFI: Entry efi_locate_device_path(Device
> Path, 00000000becf6848, 00000000becf6840)
> efi_locate_device_path()     EFI: Call:
> efi_locate_handle_buffer(BY_PROTOCOL, protocol, NULL, &no_handles,
> &handles)
> efi_locate_handle_buffer()       EFI: Entry
> efi_locate_handle_buffer(2, Device Path, 0000000000000000,
> 00000000becf67b8, 00000000becf67b0)
> efi_locate_handle_buffer()       EFI: Exit: efi_locate_handle_buffer: 0
> efi_locate_device_path()     EFI: 0 returned by
> efi_locate_handle_buffer(BY_PROTOCOL, protocol, NULL, &no_handles,
> &handles)
> efi_locate_device_path()   EFI: Exit: efi_locate_device_path: 14
> efi_install_multiple_protocol_interfaces_int() EFI: 14 returned by
> 
> 
> ^ This seems unhappy because it is a virtio device?
> 
>  efi_locate_device_path(protocol, &dp, &old_handle)
> efi_install_multiple_protocol_interfaces_int() EFI: Call:
> efi_install_protocol_interface(handle, protocol, EFI_NATIVE_INTERFACE,
> protocol_interface)
> efi_install_protocol_interface()   EFI: Entry
> efi_install_protocol_interface(00000000becf6948, Device Path, 0,
> 00000000bdcf2040)
> efi_install_protocol_interface()     EFI: handle 00000000bed1f820
>     efi_add_protocol()     EFI: installed device path
> '/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,0000000000000000)/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,5400000000000000)/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,8200000000000000)/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,1600820000000000)'
> efi_install_protocol_interface()   EFI: Exit: efi_install_protocol_interface: 0
> efi_install_multiple_protocol_interfaces_int() EFI: 0 returned by
> efi_install_protocol_interface(handle, protocol, EFI_NATIVE_INTERFACE,
> protocol_interface)
> efi_install_multiple_protocol_interfaces_int() EFI: Call:
> efi_install_protocol_interface(handle, protocol, EFI_NATIVE_INTERFACE,
> protocol_interface)
> efi_install_protocol_interface()   EFI: Entry
> efi_install_protocol_interface(00000000becf6948, Block IO, 0,
> 00000000bed1f850)
> efi_install_protocol_interface()     EFI: handle 00000000bed1f820
> efi_install_protocol_interface()   EFI: Exit: efi_install_protocol_interface: 0
> efi_install_multiple_protocol_interfaces_int() EFI: 0 returned by
> efi_install_protocol_interface(handle, protocol, EFI_NATIVE_INTERFACE,
> protocol_interface)
> Scanning bootdev 'virtio-blk#1.bootdev':
> efi_install_multiple_protocol_interfaces_int() EFI: Call:
> efi_locate_device_path(protocol, &dp, &old_handle)
> efi_locate_device_path()   EFI: Entry efi_locate_device_path(Device
> Path, 00000000becf6848, 00000000becf6840)
> efi_locate_device_path()     EFI: Call:
> efi_locate_handle_buffer(BY_PROTOCOL, protocol, NULL, &no_handles,
> &handles)
> efi_locate_handle_buffer()       EFI: Entry
> efi_locate_handle_buffer(2, Device Path, 0000000000000000,
> 00000000becf67b8, 00000000becf67b0)
> efi_locate_handle_buffer()       EFI: Exit: efi_locate_handle_buffer: 0
> efi_locate_device_path()     EFI: 0 returned by
> efi_locate_handle_buffer(BY_PROTOCOL, protocol, NULL, &no_handles,
> &handles)
> efi_locate_device_path()   EFI: Exit: efi_locate_device_path: 14
> efi_install_multiple_protocol_interfaces_int() EFI: 14 returned by
> efi_locate_device_path(protocol, &dp, &old_handle)
> efi_install_multiple_protocol_interfaces_int() EFI: Call:
> efi_install_protocol_interface(handle, protocol, EFI_NATIVE_INTERFACE,
> protocol_interface)
> efi_install_protocol_interface()   EFI: Entry
> efi_install_protocol_interface(00000000becf6948, Device Path, 0,
> 00000000bdcf0040)
> efi_install_protocol_interface()     EFI: handle 00000000bed24ef0
>     efi_add_protocol()     EFI: installed device path
> '/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,0000000000000000)/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,5400000000000000)/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,8200000001000000)/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,1600820001000000)'
> efi_install_protocol_interface()   EFI: Exit: efi_install_protocol_interface: 0
> efi_install_multiple_protocol_interfaces_int() EFI: 0 returned by
> efi_install_protocol_interface(handle, protocol, EFI_NATIVE_INTERFACE,
> protocol_interface)
> efi_install_multiple_protocol_interfaces_int() EFI: Call:
> efi_install_protocol_interface(handle, protocol, EFI_NATIVE_INTERFACE,
> protocol_interface)
> efi_install_protocol_interface()   EFI: Entry
> efi_install_protocol_interface(00000000becf6948, Block IO, 0,
> 00000000bed24f20)
> efi_install_protocol_interface()     EFI: handle 00000000bed24ef0
> efi_install_protocol_interface()   EFI: Exit: efi_install_protocol_interface: 0
> efi_install_multiple_protocol_interfaces_int() EFI: 0 returned by
> efi_install_protocol_interface(handle, protocol, EFI_NATIVE_INTERFACE,
> protocol_interface)
> efi_install_multiple_protocol_interfaces_int() EFI: Call:
> efi_locate_device_path(protocol, &dp, &old_handle)
> efi_locate_device_path()   EFI: Entry efi_locate_device_path(Device
> Path, 00000000becf6818, 00000000becf6810)
> efi_locate_device_path()     EFI: Call:
> efi_locate_handle_buffer(BY_PROTOCOL, protocol, NULL, &no_handles,
> &handles)
> efi_locate_handle_buffer()       EFI: Entry
> efi_locate_handle_buffer(2, Device Path, 0000000000000000,
> 00000000becf6788, 00000000becf6780)
> efi_locate_handle_buffer()       EFI: Exit: efi_locate_handle_buffer: 0
> efi_locate_device_path()     EFI: 0 returned by
> efi_locate_handle_buffer(BY_PROTOCOL, protocol, NULL, &no_handles,
> &handles)
> efi_locate_device_path()   EFI: Exit: efi_locate_device_path: 0
> efi_install_multiple_protocol_interfaces_int() EFI: 0 returned by
> efi_locate_device_path(protocol, &dp, &old_handle)
> efi_install_multiple_protocol_interfaces_int() EFI: Call:
> efi_install_protocol_interface(handle, protocol, EFI_NATIVE_INTERFACE,
> protocol_interface)
> efi_install_protocol_interface()   EFI: Entry
> efi_install_protocol_interface(00000000becf6918, Device Path, 0,
> 00000000bdced040)
> efi_install_protocol_interface()     EFI: handle 00000000bed1f9e0
>     efi_add_protocol()     EFI: installed device path
> '/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,0000000000000000)/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,5400000000000000)/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,8200000001000000)/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,1600820001000000)/CDROM(1,0x80c,0x8)'
> efi_install_protocol_interface()   EFI: Exit: efi_install_protocol_interface: 0
> efi_install_multiple_protocol_interfaces_int() EFI: 0 returned by
> efi_install_protocol_interface(handle, protocol, EFI_NATIVE_INTERFACE,
> protocol_interface)
> efi_install_multiple_protocol_interfaces_int() EFI: Call:
> efi_install_protocol_interface(handle, protocol, EFI_NATIVE_INTERFACE,
> protocol_interface)
> efi_install_protocol_interface()   EFI: Entry
> efi_install_protocol_interface(00000000becf6918, Block IO, 0,
> 00000000bed1fa10)
> efi_install_protocol_interface()     EFI: handle 00000000bed1f9e0
> efi_install_protocol_interface()   EFI: Exit: efi_install_protocol_interface: 0
> efi_install_multiple_protocol_interfaces_int() EFI: 0 returned by
> efi_install_protocol_interface(handle, protocol, EFI_NATIVE_INTERFACE,
> protocol_interface)
> efi_install_multiple_protocol_interfaces_int() EFI: Call:
> efi_locate_device_path(protocol, &dp, &old_handle)
> efi_locate_device_path()   EFI: Entry efi_locate_device_path(Device
> Path, 00000000becf6818, 00000000becf6810)
> efi_locate_device_path()     EFI: Call:
> efi_locate_handle_buffer(BY_PROTOCOL, protocol, NULL, &no_handles,
> &handles)
> efi_locate_handle_buffer()       EFI: Entry
> efi_locate_handle_buffer(2, Device Path, 0000000000000000,
> 00000000becf6788, 00000000becf6780)
> efi_locate_handle_buffer()       EFI: Exit: efi_locate_handle_buffer: 0
> efi_locate_device_path()     EFI: 0 returned by
> efi_locate_handle_buffer(BY_PROTOCOL, protocol, NULL, &no_handles,
> &handles)
> efi_locate_device_path()   EFI: Exit: efi_locate_device_path: 0
> efi_install_multiple_protocol_interfaces_int() EFI: 0 returned by
> efi_locate_device_path(protocol, &dp, &old_handle)
> efi_install_multiple_protocol_interfaces_int() EFI: Call:
> efi_install_protocol_interface(handle, protocol, EFI_NATIVE_INTERFACE,
> protocol_interface)
> efi_install_protocol_interface()   EFI: Entry
> efi_install_protocol_interface(00000000becf6918, Device Path, 0,
> 00000000bdceb040)
> efi_install_protocol_interface()     EFI: handle 00000000bed2b050
>     efi_add_protocol()     EFI: installed device path
> '/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,0000000000000000)/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,5400000000000000)/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,8200000001000000)/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,1600820001000000)/CDROM(2,0x814,0x0)'
> efi_install_protocol_interface()   EFI: Exit: efi_install_protocol_interface: 0
> efi_install_multiple_protocol_interfaces_int() EFI: 0 returned by
> efi_install_protocol_interface(handle, protocol, EFI_NATIVE_INTERFACE,
> protocol_interface)
> efi_install_multiple_protocol_interfaces_int() EFI: Call:
> efi_install_protocol_interface(handle, protocol, EFI_NATIVE_INTERFACE,
> protocol_interface)
> efi_install_protocol_interface()   EFI: Entry
> efi_install_protocol_interface(00000000becf6918, Block IO, 0,
> 00000000bed2b080)
> efi_install_protocol_interface()     EFI: handle 00000000bed2b050
> efi_install_protocol_interface()   EFI: Exit: efi_install_protocol_interface: 0
> efi_install_multiple_protocol_interfaces_int() EFI: 0 returned by
> efi_install_protocol_interface(handle, protocol, EFI_NATIVE_INTERFACE,
> protocol_interface)
>   0  efi          ready   virtio       2  virtio-blk#1.bootdev.part
> efi/boot/bootx64.efi
> ** Booting bootflow 'virtio-blk#1.bootdev.part_2' with efi
> efi_set_blk_dev_to_system_partition() No EFI system partition
> efi_set_blk_dev_to_system_partition() No EFI system partition
>      efi_var_to_file() Failed to persist EFI variables
>     efi_add_protocol() EFI: installed device path
> '/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,0000000000000000)/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,5400000000000000)/MAC(525400123456,1)'
> EFI using ACPI tables at f0060
>      efi_install_fdt() WARNING: Can't have ACPI table and device tree
> - ignoring DT.
>        efi_run_image() Booting /efi\boot\bootx64.efi
>       efi_load_image() EFI: Entry efi_load_image(0, 00000000becfb110,
> /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,0000000000000000)/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,5400000000000000)/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,8200000001000000)/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,1600820001000000)/CDROM(2,0x814,0x0)/efi\boot\bootx64.efi,
> 0000000001000000, 904560, 00000000becf6820)
>       efi_load_image() EFI: Exit: efi_load_image: 0
>      efi_start_image() EFI: Entry efi_start_image(00000000bed3d820,
> 00000000becf67e0, 00000000becf67e8)
>      efi_start_image()   EFI: Call: efi_open_protocol(image_handle,
> &efi_guid_loaded_image, &info, NULL, NULL,
> EFI_OPEN_PROTOCOL_GET_PROTOCOL)
>    efi_open_protocol()     EFI: Entry
> efi_open_protocol(00000000bed3d820, Loaded Image, 00000000becf6730,
> 0000000000000000, 0000000000000000, 0x2)
>    efi_open_protocol()     EFI: Exit: efi_open_protocol: 0
>      efi_start_image()   EFI: 0 returned by
> efi_open_protocol(image_handle, &efi_guid_loaded_image, &info, NULL,
> NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL)
>      efi_start_image()   EFI: Jumping into 0x00000000bdbaf090
>      efi_start_image()   EFI: Call: image_obj->entry(image_handle, &systab)
>    efi_open_protocol()     EFI: Entry
> efi_open_protocol(00000000bed3d820, Loaded Image, 00000000becf66c8,
> 00000000becfb110, 0000000000000000, 0x1)
>    efi_open_protocol()     EFI: Exit: efi_open_protocol: 0
>    efi_open_protocol()     EFI: Entry
> efi_open_protocol(00000000bed2b050, Device Path, 00000000becf6670,
> 00000000becfb110, 0000000000000000, 0x1)
>    efi_open_protocol()     EFI: Exit: efi_open_protocol: 0
> efi_allocate_pages_ext()     EFI: Entry efi_allocate_pages_ext(2, 2,
> 0x1, 00000000becf66d8)
> efi_allocate_pages_ext()       EFI: - type address
> efi_allocate_pages_ext()       EFI: - address 102000
> efi_allocate_pages_ext()       EFI: - returning memory 102000
> efi_allocate_pages_ext()     EFI: Exit: efi_allocate_pages_ext: 0
> 
> Here it hangs for about 10 seconds, then reboots.


How are you launching QEMU? 
IIRC by default the VM spawns in EL1 and sets the PSCI conduit to HVC. But Windows 
issues an SMC unconditionally and blows up.  Can you try with
virtualization=on?

Regards
/Ilias
> 
> Regards,
> Simon


More information about the U-Boot mailing list