diff --git a/grub2/bin/BOOTX64.EFI b/grub2/bin/BOOTX64.EFI new file mode 100644 index 0000000..40a766c Binary files /dev/null and b/grub2/bin/BOOTX64.EFI differ diff --git a/src/grub2/grub/grub.cfg b/src/grub2/grub/grub.cfg index 53ac06b..71e6d51 100644 --- a/src/grub2/grub/grub.cfg +++ b/src/grub2/grub/grub.cfg @@ -2534,9 +2534,9 @@ vt_device $root hiso_dev if [ "$hiso_dev" = "tftp" ]; then set hiso_path=($root) for vtid in 0 1 2 3; do - if [ -f (hd$vtid,2)/hiperiso/hiperiso.cpio ]; then - set hiso_iso_part=(hd$vtid,1) - set hiso_efi_part=(hd$vtid,2) + if [ -f (hd$vtid,gpt2)/hiperiso/hiperiso.cpio ]; then + set hiso_iso_part=(hd$vtid,gpt1) + set hiso_efi_part=(hd$vtid,gpt2) set hisodev=hd$vtid break fi diff --git a/src/grub2/hiperiso_cmd.c b/src/grub2/hiperiso_cmd.c index bac8bfa..cc0187c 100644 --- a/src/grub2/hiperiso_cmd.c +++ b/src/grub2/hiperiso_cmd.c @@ -5194,6 +5194,7 @@ void hiperiso_prompt_end(void) static grub_err_t hiperiso_cmd_load_part_table(grub_extcmd_context_t ctxt, int argc, char **args) { int ret; + char buf[64]; (void)argc; (void)ctxt; @@ -5207,6 +5208,25 @@ static grub_err_t hiperiso_cmd_load_part_table(grub_extcmd_context_t ctxt, int a g_hiperiso_disk_part_size[0] = hiperiso_get_hiso_partsize(0); g_hiperiso_disk_part_size[1] = hiperiso_get_hiso_partsize(1); + /* Set partition variables with correct notation for GRUB2 shell. + * GRUB2 EFI requires explicit gpt/msdos prefix; the shorthand (hd0,N) + * does NOT resolve for GPT partitions. */ + if (g_hiperiso_part_info && + grub_memcmp(g_hiperiso_part_info->Head.Signature, "EFI PART", 8) == 0) + { + grub_snprintf(buf, sizeof(buf), "(%s,gpt1)", args[0]); + grub_env_set("hiso_iso_part", buf); + grub_snprintf(buf, sizeof(buf), "(%s,gpt2)", args[0]); + grub_env_set("hiso_efi_part", buf); + } + else + { + grub_snprintf(buf, sizeof(buf), "(%s,msdos1)", args[0]); + grub_env_set("hiso_iso_part", buf); + grub_snprintf(buf, sizeof(buf), "(%s,msdos2)", args[0]); + grub_env_set("hiso_efi_part", buf); + } + return 0; } @@ -7108,7 +7128,7 @@ static grub_err_t hiperiso_cmd_boot(grub_extcmd_context_t ctxt, int argc, char * } grub_snprintf(linux_script, sizeof(linux_script), - "linux ($hiso_efi_part)/EFI/hiperiso/vmlinuz %s", cmdline); + "linux ${hiso_efi_part}/EFI/hiperiso/vmlinuz %s", cmdline); grub_script_execute_sourcecode(linux_script); if (grub_errno != GRUB_ERR_NONE) { @@ -7117,7 +7137,7 @@ static grub_err_t hiperiso_cmd_boot(grub_extcmd_context_t ctxt, int argc, char * } grub_snprintf(initrd_script, sizeof(initrd_script), - "initrd ($hiso_efi_part)/EFI/hiperiso/initramfs.cpio.gz"); + "initrd ${hiso_efi_part}/EFI/hiperiso/initramfs.cpio.gz"); grub_script_execute_sourcecode(initrd_script); if (grub_errno != GRUB_ERR_NONE) {