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

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

上级 987b6372
......@@ -600,8 +600,9 @@ GenerateEntriesForVmlinuzFiles (
return EFI_SUCCESS;
}
STATIC
EFI_STATUS
AutodetectLinux (
InternalAutodetectLinux (
IN EFI_FILE_PROTOCOL *RootDirectory,
OUT OC_PICKER_ENTRY **Entries,
OUT UINTN *NumEntries
......@@ -691,3 +692,21 @@ AutodetectLinux (
VmlinuzDirectory->Close (VmlinuzDirectory);
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 @@
#include <Protocol/OcBootEntry.h>
#define LOADER_ENTRIES_DIR L"\\loader\\entries"
#define GRUB2_GRUB_CFG L"\\grub2\\grub.cfg"
#define GRUB2_GRUBENV L"\\grub2\\grubenv"
//
// Required where the BTRFS subvolume is /boot, as this looks like a
// 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 BLSPEC_SUFFIX_CONF L".conf"
......@@ -664,8 +675,9 @@ ProcessLoaderEntry (
return EFI_SUCCESS;
}
STATIC
EFI_STATUS
ScanLoaderEntries (
InternalScanLoaderEntries (
IN EFI_FILE_PROTOCOL *RootDirectory,
OUT OC_PICKER_ENTRY **Entries,
OUT UINTN *NumEntries
......@@ -767,6 +779,41 @@ ScanLoaderEntries (
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
InternalFreeNamedLoaderEntry (
NAMED_LOADER_ENTRY *Entry
......
......@@ -238,10 +238,6 @@ OcGetLinuxBootEntries (
// are only unusable files in there.
//
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).
//
......@@ -251,10 +247,6 @@ OcGetLinuxBootEntries (
Entries,
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.
先完成此消息的编辑!
想要评论请 注册