grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2] util/grub-mkrescue: use capitalised paths for removable EFI


From: Mingcong Bai
Subject: [PATCH v2] util/grub-mkrescue: use capitalised paths for removable EFI images
Date: Thu, 13 Jun 2024 15:41:16 +0800

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 | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/util/grub-mkrescue.c b/util/grub-mkrescue.c
index 27696e034..cfb749967 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,39 +792,39 @@ 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);

--
2.43.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]