[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] util/grub-mkrescue: use capitalised paths for removable EFI imag
From: |
Mingcong Bai |
Subject: |
[PATCH] util/grub-mkrescue: use capitalised paths for removable EFI images |
Date: |
Wed, 12 Jun 2024 00:24:35 +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 | 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
- [PATCH] util/grub-mkrescue: use capitalised paths for removable EFI images,
Mingcong Bai <=