提交 39b2b573 编写于 作者: M MikeBeaton

OpenLinuxBoot: Add scan of /boot/loader/entries for when /boot is not separate volume

上级 987b6372
...@@ -600,8 +600,9 @@ GenerateEntriesForVmlinuzFiles ( ...@@ -600,8 +600,9 @@ GenerateEntriesForVmlinuzFiles (
return EFI_SUCCESS; return EFI_SUCCESS;
} }
STATIC
EFI_STATUS EFI_STATUS
AutodetectLinux ( InternalAutodetectLinux (
IN EFI_FILE_PROTOCOL *RootDirectory, IN EFI_FILE_PROTOCOL *RootDirectory,
OUT OC_PICKER_ENTRY **Entries, OUT OC_PICKER_ENTRY **Entries,
OUT UINTN *NumEntries OUT UINTN *NumEntries
...@@ -691,3 +692,21 @@ AutodetectLinux ( ...@@ -691,3 +692,21 @@ AutodetectLinux (
VmlinuzDirectory->Close (VmlinuzDirectory); VmlinuzDirectory->Close (VmlinuzDirectory);
return Status; return Status;
} }
EFI_STATUS
AutodetectLinux (
IN EFI_FILE_PROTOCOL *RootDirectory,
OUT OC_PICKER_ENTRY **Entries,
OUT UINTN *NumEntries
)
{
EFI_STATUS Status;
Status = InternalAutodetectLinux (RootDirectory, Entries, NumEntries);
if (EFI_ERROR (Status) && Status != EFI_NOT_FOUND) {
DEBUG ((DEBUG_WARN, "LNX: AutodetectLinux - %r\n", Status));
}
return Status;
}
...@@ -22,9 +22,20 @@ ...@@ -22,9 +22,20 @@
#include <Protocol/OcBootEntry.h> #include <Protocol/OcBootEntry.h>
#define LOADER_ENTRIES_DIR L"\\loader\\entries" //
#define GRUB2_GRUB_CFG L"\\grub2\\grub.cfg" // Required where the BTRFS subvolume is /boot, as this looks like a
#define GRUB2_GRUBENV L"\\grub2\\grubenv" // normal directory within EFI. Note that scanning / and then /boot
// is how blscfg behaves by default too.
//
#define ADDITIONAL_SCAN_DIR L"boot"
//
// No leading slash so they can be relative to root or
// additional scan dir.
//
#define LOADER_ENTRIES_DIR L"loader\\entries"
#define GRUB2_GRUB_CFG L"grub2\\grub.cfg"
#define GRUB2_GRUBENV L"grub2\\grubenv"
#define GRUB2_GRUBENV_SIZE SIZE_1KB #define GRUB2_GRUBENV_SIZE SIZE_1KB
#define BLSPEC_SUFFIX_CONF L".conf" #define BLSPEC_SUFFIX_CONF L".conf"
...@@ -664,8 +675,9 @@ ProcessLoaderEntry ( ...@@ -664,8 +675,9 @@ ProcessLoaderEntry (
return EFI_SUCCESS; return EFI_SUCCESS;
} }
STATIC
EFI_STATUS EFI_STATUS
ScanLoaderEntries ( InternalScanLoaderEntries (
IN EFI_FILE_PROTOCOL *RootDirectory, IN EFI_FILE_PROTOCOL *RootDirectory,
OUT OC_PICKER_ENTRY **Entries, OUT OC_PICKER_ENTRY **Entries,
OUT UINTN *NumEntries OUT UINTN *NumEntries
...@@ -767,6 +779,41 @@ ScanLoaderEntries ( ...@@ -767,6 +779,41 @@ ScanLoaderEntries (
return Status; return Status;
} }
EFI_STATUS
ScanLoaderEntries (
IN EFI_FILE_PROTOCOL *RootDirectory,
OUT OC_PICKER_ENTRY **Entries,
OUT UINTN *NumEntries
)
{
EFI_STATUS Status;
EFI_STATUS TempStatus;
EFI_FILE_PROTOCOL *AdditionalScanDirectory;
Status = InternalScanLoaderEntries (RootDirectory, Entries, NumEntries);
if (!EFI_ERROR (Status)) {
return Status;
}
if (Status != EFI_NOT_FOUND) {
DEBUG ((DEBUG_WARN, "LNX: ScanLoaderEntries @root - %r\n", Status));
}
TempStatus = OcSafeFileOpen (RootDirectory, &AdditionalScanDirectory, ADDITIONAL_SCAN_DIR, EFI_FILE_MODE_READ, 0);
if (EFI_ERROR (TempStatus)) {
return Status;
}
Status = InternalScanLoaderEntries (AdditionalScanDirectory, Entries, NumEntries);
if (!EFI_ERROR (Status)) {
DEBUG ((DEBUG_INFO, "LNX: ScanLoaderEntries @%s - %r\n", ADDITIONAL_SCAN_DIR, Status));
return Status;
}
if (Status != EFI_NOT_FOUND) {
DEBUG ((DEBUG_WARN, "LNX: ScanLoaderEntries @%s - %r\n", ADDITIONAL_SCAN_DIR, Status));
}
return Status;
}
VOID VOID
InternalFreeNamedLoaderEntry ( InternalFreeNamedLoaderEntry (
NAMED_LOADER_ENTRY *Entry NAMED_LOADER_ENTRY *Entry
......
...@@ -238,10 +238,6 @@ OcGetLinuxBootEntries ( ...@@ -238,10 +238,6 @@ OcGetLinuxBootEntries (
// are only unusable files in there. // are only unusable files in there.
// //
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
if (Status != EFI_NOT_FOUND) {
DEBUG ((DEBUG_WARN, "LNX: ScanLoaderEntries - %r\n", Status));
}
// //
// Auto-detect vmlinuz and initrd files on own root filesystem (Debian-like). // Auto-detect vmlinuz and initrd files on own root filesystem (Debian-like).
// //
...@@ -251,10 +247,6 @@ OcGetLinuxBootEntries ( ...@@ -251,10 +247,6 @@ OcGetLinuxBootEntries (
Entries, Entries,
NumEntries NumEntries
); );
if (EFI_ERROR (Status) && Status != EFI_NOT_FOUND) {
DEBUG ((DEBUG_WARN, "LNX: AutodetectLinux - %r\n", Status));
}
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册