UEFI 基础教程 (十四) - 设置默认启动项为UEFI Shell
Posted 毛毛虫的爹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UEFI 基础教程 (十四) - 设置默认启动项为UEFI Shell相关的知识,希望对你有一定的参考价值。
一 编写源代码
OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c
UINTN
BootOptionPriority (
CONST EFI_BOOT_MANAGER_LOAD_OPTION *BootOption
)
DEBUG ((EFI_D_ERROR," [CSDN] BootOptionPriority %S .\\n", BootOption->Description));
if (StrCmp (BootOption->Description, L"Boot Device List") == 0)
return 4;
//
// Make sure Shell is last
//
if ( StrStr (BootOption->Description, L"EFI Internal Shell" ) != NULL)
return 1;
return 30;
/**
GC_TODO: add routine description
@param Left - GC_TODO: add arg description
@param Right - GC_TODO: add arg description
@retval (BOOLEAN) (BootOptionPriority (Left) < BootOptionPriority (Right)) - GC_TODO: add retval description
**/
INTN
EFIAPI
CompareBootOption (
IN CONST VOID *Buffer1,
IN CONST VOID *Buffer2
)
return (BOOLEAN) (BootOptionPriority ((EFI_BOOT_MANAGER_LOAD_OPTION *) Buffer1) > BootOptionPriority ((EFI_BOOT_MANAGER_LOAD_OPTION *) Buffer2));
VOID
EFIAPI
PlatformBootManagerAfterConsole (
VOID
)
//
// Register UEFI Shell
//
PlatformRegisterFvBootOption (
&gUefiShellFileGuid, L"EFI Internal Shell", LOAD_OPTION_ACTIVE
);
…
//Add default boot first option as uefi shell
DEBUG ((EFI_D_ERROR," [CSDN]: EfiBootManagerSortLoadOptionVariable before.\\n"));
EfiBootManagerSortLoadOptionVariable (LoadOptionTypeBoot, CompareBootOption);
DEBUG ((EFI_D_ERROR," [CSDN]: EfiBootManagerSortLoadOptionVariable after.\\n"));
…
二、 编译生成EFI文件 & 运行
设置Shell为默认启动项后,Bios启动会优先加载Shell(对于OVMD而言就不用等待前面的PXE、QEMU USB加载了, 可以节省时间)。 当然如果需要设置其他的启动项为默认项,只需要修改BootOptionPriority 中 StrCmp (BootOption->Description, L"EFI Internal Shell")为 StrCmp (BootOption->Description, L"XXXX")。
UEFI 基础教程 (零) - 目录
GitHub 主页
UEFI 基础教程 (一) — 搭建UEFI开发环境
UEFI 基础教程 (二) — 运行第一个APP HelloWorld
UEFI 基础教程 (三) — 运行第一个PEI Driver
UEFI 基础教程 (四) — 运行第一个DXE Driver
UEFI 基础教程 (五) — PPI 初探
UEFI 基础教程 (六) — PROTOCOL 简单使用
UEFI 基础教程 (七) — HOB 简单使用
UEFI 基础教程 (八) — PCD 简单使用
UEFI 基础教程 (九) — EVENT 简单使用
UEFI 基础教程 (十) — FileIO 简单使用
UEFI 基础教程 (十一) — Shell下读取SMBIOS信息
UEFI 基础教程 (十二) — 使用标准C库
UEFI 基础教程 (十三) — VFR,HFR 简单使用
UEFI 基础教程 (十四) — Variable的使用
UEFI 基础教程 (十四.1) — 设置默认启动项为UEFI Shell
UEFI 基础教程 (十五) — 获取UEFI MemoryMap
UEFI 基础教程 (十六) — ACPI 简单使用
UEFI 基础教程 (十七) — SMM的简单使用
UEFI 基础教程 (十八) — UEFI Build Process简单分析
UEFI 基础教程 (十九) — PCIe 简单使用
UEFI Refer Spec Collections
以上是关于UEFI 基础教程 (十四) - 设置默认启动项为UEFI Shell的主要内容,如果未能解决你的问题,请参考以下文章