当前位置: 首页 > news >正文

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")。

http://www.lryc.cn/news/45175.html

相关文章:

  • python编程:判断一个数是否是超级素数
  • 雷迪RD8200管线探测仪参数/管线仪使用方法/管线仪说明书
  • 会话共享保存到redis
  • python 曲线平滑处理——方法总结(Savitzky-Golay 滤波器、make_interp_spline插值法和convolve滑动平均滤波)
  • 小驰私房菜_10_camx Otp Dump
  • priority_queue(堆)干货归纳+用法示例
  • miniprogram-to-uniapp使用指南(各种小程序项目转换为uni-app项目)
  • BZOJ2720: [Violet 5]列队春游 【概率与期望】
  • 脉诊之脉象——平脉,常见病脉,七绝脉
  • 第05章_存储引擎
  • 【新2023Q2押题JAVA】华为OD机试 - 挑选字符串
  • 职场「OKR」,魔幻又内卷
  • mysql8计算商家距离,按照由近及远排序
  • c语言函数使用记录
  • VBA智慧办公4——符号运算及语法结构
  • ChatGPT角色扮演提示语
  • 【Java面试题】设计模式之七种结构性模式——代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式
  • 【从零开始学习 UVM】6.3、UVM 激励产生 —— start() 方法执行sequence详解
  • 「Python 机器学习」Matplotlib 数据探索
  • 3.24-3.26学习总结
  • OpenAI Translator 基于 ChatGPT API 的划词翻译工具
  • git常用指令---复习向
  • 安卓开发学习记录(持续学习)
  • 【redis】AOF日志:宕机了,Redis如何避免数据丢失
  • 第三章Vue中的Ajax
  • 在 Python3 中使用 JSON
  • 图神经网络GNN介绍
  • 【面试】TCP、UDP、Socket、HTTP网络编程面试题
  • Python语言的文件读写
  • 面向对象 ( 上 )