Wimboot.mod in UEFI mode loads only first image in wim file when index is not 1.
Closed this issue · 4 comments
Wimboot.mod in UEFI mode loads only first image in wim file when index is not equals to 1. wimboot.xz used from grub2fm :)
Example code:
loopback -d loop
loopback loop (hd0,1)/winpe10.iso
wimboot --index=2 --testmode=no
@:bootmgfw.efi:(memdisk)/bootmgfw.efi
@:boot.wim:"(loop)/sources/boot.wim";
boot
please help.
It‘s a bug introduced in wimboot v2.7.5.
See: ipxe/wimboot#40
Applying this patch and compiling, the problem should be fixed:
wimboot.patch
diff --git a/grub-core/map/lib/wim.c b/grub-core/map/lib/wim.c
index b61be90..ead6f91 100644
--- a/grub-core/map/lib/wim.c
+++ b/grub-core/map/lib/wim.c
@@ -296,7 +296,8 @@ int wim_count ( struct vfat_file *file, struct wim_header *header,
int rc;
/* Count metadata entries */
- for ( offset = 0 ; ( offset + sizeof ( entry ) ) <= header->lookup.len ;
+ for ( offset = 0, *count = 0 ;
+ ( offset + sizeof ( entry ) ) <= header->lookup.len ;
offset += sizeof ( entry ) ) {
/* Read entry */
diff --git a/grub-core/map/lib/wimpatch.c b/grub-core/map/lib/wimpatch.c
index eb64840..cfd9528 100644
--- a/grub-core/map/lib/wimpatch.c
+++ b/grub-core/map/lib/wimpatch.c
@@ -688,6 +688,10 @@ static int wim_construct_patch ( struct vfat_file *file,
&patch->boot ) ) != 0 )
return rc;
+ /* Update boot image metadata in patched header, if applicable */
+ if ( boot_index )
+ memcpy ( boot, &patch->boot, sizeof ( *boot ) );
+
/* Record original boot index */
patch->boot_index = patch->header.boot_index;
As I am no longer maintaining this project, I will not update it to fix this bug.
thank you for quick answer and help!
can you please help to get wimboot.mod for UEFI for x86_64-efi and i386-efi please?
thank you for quick answer and help! can you please help to get wimboot.mod for UEFI for x86_64-efi and i386-efi please?
thank you very much, you are genius!
i've tested and it already working!!!