All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] util/grub-mkrescue: use capitalised paths for removable EFI images
@ 2024-06-11 16:24 Mingcong Bai
  2024-06-11 18:35 ` Thomas Schmitt via Grub-devel
  0 siblings, 1 reply; 6+ messages in thread
From: Mingcong Bai @ 2024-06-11 16:24 UTC (permalink / raw)
  To: grub-devel

Per UEFI Specification, section 3.4.1.1:

... If FilePathList[0] points to a device that supports the
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL, then the system firmware will attempt 
to boot
from a removable media FilePathList[0] by adding a default file name in 
the
form \EFI\BOOT\BOOT{machine type short-name}.EFI.

While FAT < 32 filesystems are not case sensitive (which grub-mkrescue 
creates
as a FAT12 image via mformat with a size of 2.88MiB), it seems that
some of Loongson's LoongArch-based firmware (namely those found on their
latest XA61200 boards) seems to treat this file system as 
case-sensitive. In
this case, at least the XA61200 board seems incapable of identifying
/efi/boot/bootloongarch64.efi as a valid removable EFI image.

In any case, according to the UEFI Specification, all paths and image
filenames should be capitalised (with the exception of BOOTx64.EFI, 
according
to section 3.5.1.1, for some reason) to stay compliant. The Loongson 
case is
only one example of users running into buggy firmware and unbootable 
GRUB
ISO images.

Signed-off-by: Mingcong Bai <jeffbai@aosc.io>
---
  util/grub-mkrescue.c | 24 ++++++++++++------------
  1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/util/grub-mkrescue.c b/util/grub-mkrescue.c
index 27696e034..963b47117 100644
--- a/util/grub-mkrescue.c
+++ b/util/grub-mkrescue.c
@@ -769,8 +769,8 @@ main (int argc, char *argv[])
        || source_dirs[GRUB_INSTALL_PLATFORM_RISCV64_EFI])
      {
        FILE *f;
-      char *efidir_efi = grub_util_path_concat (2, iso9660_dir, "efi");
-      char *efidir_efi_boot = grub_util_path_concat (3, iso9660_dir, 
"efi", "boot");
+      char *efidir_efi = grub_util_path_concat (2, iso9660_dir, "EFI");
+      char *efidir_efi_boot = grub_util_path_concat (3, iso9660_dir, 
"EFI", "BOOT");
        char *imgname, *img32, *img64, *img_mac = NULL;
        char *efiimgfat, *iso_uuid_file, *diskdir, *diskdir_uuid;
        grub_install_mkdir_p (efidir_efi_boot);
@@ -792,52 +792,52 @@ main (int argc, char *argv[])
        free (diskdir_uuid);
        free (diskdir);

-      imgname = grub_util_path_concat (2, efidir_efi_boot, 
"bootia64.efi");
+      imgname = grub_util_path_concat (2, efidir_efi_boot, 
"BOOTIA64.EFI");
        make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_IA64_EFI, 
"ia64-efi", imgname);
        free (imgname);

        grub_install_push_module ("part_apple");
-      img64 = grub_util_path_concat (2, efidir_efi_boot, 
"bootx64.efi");
+      img64 = grub_util_path_concat (2, efidir_efi_boot, 
"BOOTx64.EFI");
        make_image_abs (GRUB_INSTALL_PLATFORM_X86_64_EFI, "x86_64-efi", 
img64);
        grub_install_pop_module ();

        grub_install_push_module ("part_apple");
-      img32 = grub_util_path_concat (2, efidir_efi_boot, 
"bootia32.efi");
+      img32 = grub_util_path_concat (2, efidir_efi_boot, 
"BOOTIA32.EFI");
        make_image_abs (GRUB_INSTALL_PLATFORM_I386_EFI, "i386-efi", 
img32);
        grub_install_pop_module ();

-      imgname = grub_util_path_concat (2, efidir_efi_boot, 
"bootarm.efi");
+      imgname = grub_util_path_concat (2, efidir_efi_boot, 
"BOOTARM.EFI");
        make_image_abs (GRUB_INSTALL_PLATFORM_ARM_EFI, "arm-efi", 
imgname);
        free (imgname);

-      imgname = grub_util_path_concat (2, efidir_efi_boot, 
"bootaa64.efi");
+      imgname = grub_util_path_concat (2, efidir_efi_boot, 
"BOOTAA64.EFI");
        make_image_abs (GRUB_INSTALL_PLATFORM_ARM64_EFI, "arm64-efi", 
imgname);
        free (imgname);

-      imgname = grub_util_path_concat (2, efidir_efi_boot, 
"bootloongarch64.efi");
+      imgname = grub_util_path_concat (2, efidir_efi_boot, 
"BOOTLOONGARCH64.EFI");
        make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_LOONGARCH64_EFI,
  			     "loongarch64-efi",
  			     imgname);
        free (imgname);

-      imgname = grub_util_path_concat (2, efidir_efi_boot, 
"bootriscv32.efi");
+      imgname = grub_util_path_concat (2, efidir_efi_boot, 
"BOOTRISCV32.EFI");
        make_image_abs (GRUB_INSTALL_PLATFORM_RISCV32_EFI, "riscv32-efi", 
imgname);
        free (imgname);

-      imgname = grub_util_path_concat (2, efidir_efi_boot, 
"bootriscv64.efi");
+      imgname = grub_util_path_concat (2, efidir_efi_boot, 
"BOOTRISCV64.EFI");
        make_image_abs (GRUB_INSTALL_PLATFORM_RISCV64_EFI, "riscv64-efi", 
imgname);
        free (imgname);

        if (source_dirs[GRUB_INSTALL_PLATFORM_I386_EFI])
  	{
-	  imgname = grub_util_path_concat (2, efidir_efi_boot, "boot.efi");
+	  imgname = grub_util_path_concat (2, efidir_efi_boot, "BOOT.EFI");
  	  /* For old macs. Suggested by Peter Jones.  */
  	  grub_install_copy_file (img32, imgname, 1);
  	}

        if (source_dirs[GRUB_INSTALL_PLATFORM_I386_EFI]
  	  || source_dirs[GRUB_INSTALL_PLATFORM_X86_64_EFI])
-	img_mac = grub_util_path_concat (2, core_services, "boot.efi");
+	img_mac = grub_util_path_concat (2, core_services, "BOOT.EFI");

        if (source_dirs[GRUB_INSTALL_PLATFORM_I386_EFI]
  	  && source_dirs[GRUB_INSTALL_PLATFORM_X86_64_EFI])
-- 
2.45.1


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-06-13 15:43 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-11 16:24 [PATCH] util/grub-mkrescue: use capitalised paths for removable EFI images Mingcong Bai
2024-06-11 18:35 ` Thomas Schmitt via Grub-devel
2024-06-13  7:40   ` Mingcong Bai
2024-06-13  8:30     ` Thomas Schmitt via Grub-devel
2024-06-13  8:37       ` jeffbai
2024-06-13 15:43         ` Thomas Schmitt via Grub-devel

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.