[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
- [PATCH v2] util/grub-mkrescue: use capitalised paths for removable EFI images,
Mingcong Bai <=