From 42849a2d9406785266ec74ffcedc77fb960a28f9 Mon Sep 17 00:00:00 2001 From: bugprogrammer <87811991@163.com> Date: Mon, 31 Aug 2026 00:25:32 +0800 Subject: [PATCH] add (grub4dos)grldr pbr on openlegacyboot --- Platform/OpenLegacyBoot/LegacyBootInternal.h | 3 ++- Platform/OpenLegacyBoot/LegacyBootSupport.c | 4 ++++ Platform/OpenLegacyBoot/OpenLegacyBoot.c | 20 +++++++++++++++++++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/Platform/OpenLegacyBoot/LegacyBootInternal.h b/Platform/OpenLegacyBoot/LegacyBootInternal.h index df90c24bf39..5ecefc36baa 100644 --- a/Platform/OpenLegacyBoot/LegacyBootInternal.h +++ b/Platform/OpenLegacyBoot/LegacyBootInternal.h @@ -34,7 +34,8 @@ typedef enum OC_LEGACY_OS_TYPE_ { OcLegacyOsTypeNone, OcLegacyOsTypeWindowsNtldr, OcLegacyOsTypeWindowsBootmgr, - OcLegacyOsTypeIsoLinux + OcLegacyOsTypeIsoLinux, + OcLegacyOsTypeGrldr } OC_LEGACY_OS_TYPE; EFI_STATUS diff --git a/Platform/OpenLegacyBoot/LegacyBootSupport.c b/Platform/OpenLegacyBoot/LegacyBootSupport.c index 412908cbfb3..7e941d0c82e 100644 --- a/Platform/OpenLegacyBoot/LegacyBootSupport.c +++ b/Platform/OpenLegacyBoot/LegacyBootSupport.c @@ -353,6 +353,10 @@ InternalGetPartitionLegacyOsType ( || CheckLegacySignature ("isolinux", Buffer, BufferSize)) { LegacyOsType = OcLegacyOsTypeIsoLinux; + } else if ( CheckLegacySignature ("GRLDR", Buffer, BufferSize) + || CheckLegacySignature ("grldr", Buffer, BufferSize)) + { + LegacyOsType = OcLegacyOsTypeGrldr; } else { LegacyOsType = OcLegacyOsTypeNone; DEBUG ((DEBUG_INFO, "OLB: Unknown legacy bootsector signature\n")); diff --git a/Platform/OpenLegacyBoot/OpenLegacyBoot.c b/Platform/OpenLegacyBoot/OpenLegacyBoot.c index 51879712998..7423af3705d 100644 --- a/Platform/OpenLegacyBoot/OpenLegacyBoot.c +++ b/Platform/OpenLegacyBoot/OpenLegacyBoot.c @@ -34,7 +34,25 @@ GetLegacyEntryName ( OC_LEGACY_OS_TYPE LegacyOsType ) { - return AllocateCopyPool (L_STR_SIZE ("Windows (legacy)"), "Windows (legacy)"); + CONST CHAR8 *Name; + + switch (LegacyOsType) { + case OcLegacyOsTypeIsoLinux: + Name = "Linux (legacy)"; + break; + + case OcLegacyOsTypeGrldr: + Name = "Grub4dos (legacy)"; + break; + + case OcLegacyOsTypeWindowsBootmgr: + case OcLegacyOsTypeWindowsNtldr: + default: + Name = "Windows (legacy)"; + break; + } + + return AllocateCopyPool (AsciiStrSize (Name), Name); } STATIC