UEFI 基础教程 (十三) - VFR,HFR 简单使用 oneof btn
创始人
2025-05-31 15:01:02

一、 修改UEFI UiApp源代码
修改 FrontPageStrings.uni 与 FrontPageVfr.Vfr
添加字符串资源到 MdeModulePkg/Application/UiApp/FrontPageStrings.uni
//Add CSDN UI resources
#string STR_CSDN_BANNER_LEFT #language en-US “Csdn Bannder Left”
#string STR_CSDN_BANNER_RIGHT #language en-US “Csdn Bannder Right”

#string STR_CSDN_STRING #language en-US “CsdnText”
#language fr-FR “CsdnText”
#string STR_CSDN_STRING_HELP #language en-US “CsdnText the current setting.”
#language fr-FR “CsdnText the current setting.”

#string STR_CSDN_RADIO_STRING #language en-US “CsdnRdioBtn”
#language fr-FR “CsdnRdioBtn”
#string STR_CSDN_RADIO_STRING_HELP #language en-US “CsdnRadio the current setting.”
#language fr-FR “CsdnRadio the current setting.”

#string STR_CSDN_STRING_RADIO_1 #language en-US “Csdn Radio Button No 1”
#string STR_CSDN_STRING_RADIO_2 #language en-US “Csdn Radio Button No 2”
#string STR_CSDN_STRING_RADIO_3 #language en-US “Csdn Radio Button No 3”
#string STR_CSDN_STRING_RADIO_4 #language en-US “Csdn Radio Button No 4”
#string STR_CSDN_STRING_RADIO_5 #language en-US “Csdn Radio Button No 5”
#string STR_CSDN_STRING_RADIO_6 #language en-US “Csdn Radio Button No 6”
#string STR_CSDN_STRING_RADIO_7 #language en-US “Csdn Radio Button No 7”

修改 FrontPageVfr.Vfr的Lable
MdeModulePkg/Application/UiApp/FrontPageVfr.Vfr

bannertitle = STRING_TOKEN(STR_CSDN_BANNER_LEFT),line  4,align left;bannertitle = STRING_TOKEN(STR_CSDN_BANNER_RIGHT),line  4,align right;

修改 FrontPageCustomizedUi.c 与 FrontPageCustomizedUiSupport.c
添加 Oneof(RadioButton) 菜单
MdeModulePkg/Application/UiApp/FrontPageCustomizedUi.c
/**
Customize menus in the page.

@param[in] HiiHandle The HII Handle of the form to update.
@param[in] StartOpCodeHandle The context used to insert opcode.
@param[in] CustomizePageType The page type need to be customized.

**/
VOID
UiCustomizeFrontPage (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
)
{
//
// Create “Select CSDN” menu with Oneof opcode.
//
UiCreateCsdnRadioMenu(HiiHandle, StartOpCodeHandle);

//
// Create csdn menu.
//
UiCreateCsdnMenu(HiiHandle, StartOpCodeHandle);
}

MdeModulePkg/Application/UiApp/FrontPageCustomizedUiSupport.c

// 定义 CallBack
EFI_STATUS
CsdnRadioChangeHandler (
IN EFI_IFR_TYPE_VALUE *Value
)
{
EFI_STATUS Status;

CHAR8 *CsdnText = “Csdn Radio Button No 1”;
DEBUG((EFI_D_INFO,“[csdn] CsdnRadioChangeHandler value=%x\n”,Value->u8));

Status = gRT->SetVariable (
L"CSDNRadioButtonText",
&gEfiIfrFrontPageGuid,
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
22,
CsdnText
);
if (EFI_ERROR (Status)) {
DEBUG((EFI_D_INFO,“[csdn] CsdnRadioChangeHandler status=%r\n”,Status));
return EFI_DEVICE_ERROR;
}
return EFI_SUCCESS;
}

//触发 CallBack
BOOLEAN
UiSupportLibCallbackHandler (
IN EFI_HII_HANDLE HiiHandle,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest,
OUT EFI_STATUS *Status
){

switch (QuestionId) {
case FRONT_PAGE_KEY_CONTINUE:
//
// This is the continue - clear the screen and return an error to get out of FrontPage loop
//
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;
break;

//CallBack 触发入口
case FRONT_PAGE_KEY_CSDN_RADIIO:*Status = CsdnRadioChangeHandler(Value);break;default:break;
}

}

二、 编译生成EFI文件
运行edksetup.bat && build -a X64 -p OvmfPkg\OvmfPkgX64.dsc -D DEBUG_ON_SERIAL_PORT -t VS2013x86编译整个OvmfPkg Package

三、 运行 UEFI
执行setup-qemu-x64.bat | findstr csdn
四、 小结
在UEFI平台可以通过修改 VFR/HFR等相关文件来配置SETUP界面, 其中
UNI文件用来存放资源, C文件用作driver 用来动态更新配置值。
在这里插入图片描述

相关内容

热门资讯

湾财周报|大事记 比亚迪驳斥“... 一周大事记(5月26日-6月1日) 头条 比亚迪驳斥! 长城“车圈恒大论”是行业警示还是危言耸听?...
通源石油跌1.96%,成交额1... 5月30日,通源石油跌1.96%,成交额1.03亿元,换手率4.40%,总市值23.54亿元。 异动...
中国邮储银行浙江分行2025校... 点这里 ↑ 老满说高考 作者 l 老满 生涯规划师l 升学顾问l 拆书家 这是 老满说高考公众号 的...
公募基金规模首次突破33万亿元... 每经记者:肖芮冬 每经编辑:叶峰 天赐良基日报第654期 一、今日基金新闻速览 1、华润元大基金贾...
湾财周报 大事记 比亚迪驳斥“... 一周大事记(5月26日-6月1日)头条比亚迪驳斥!长城“车圈恒大论”是行业警示还是危言耸听?近日,关...
EL表达式JSTL标签库 EL表达式     EL:Expression Language 表达式语言     ...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
工信部、中汽协紧急发声!汽车“... 文/刘育英新一轮汽车价格战再起。近日,工信部、中汽协纷纷发声表示反对。工业和信息化部表示,将加大对汽...
3 ROS1通讯编程提高(1) 3 ROS1通讯编程提高3.1 使用VS Code编译ROS13.1.1 VS Code的安装和配置...
募资39亿,全亏光了,账上不到... 关于天然气,用户的感觉是价格一直在上涨,但很奇怪,不管怎么涨,天然气企业仍然亏,还亏得一塌糊涂。这是...
资阳房产评估公司 这是(tel-15828298733)整理的信息,希望能帮助到大家 在当今社会,随着经济的发展和城...
华桥汇利(中国)投资基金管理有... 今年第一季度,美国企业利润出现大幅下降,且面临着来自关税上升的持续压力,这一局面可能会在今年进一步加...
ESG 报告合规与鉴证:全球政... 在当下全球经济格局里,ESG(环境、社会和公司治理)已然成为衡量企业可持续发展能力的关键指标。随着全...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...
与锤巨子生物的大嘴博士持股同一... 医美龙头巨子生物“成分争议”风波持续发酵。日前,美妆博主大嘴博士(香港大学化学博士郝宇)发文,质疑巨...
Linux之进程间通信 目录 进程间通信介绍 一、为什么要进行进程间通信? 二、进程间通信目的 三、进程间通信...
从“造城”到“留客”,文旅局长... 你有没有刷到最近各地文旅局局长全体“尬舞”的视频?领导们放下架子开始跳魔性舞蹈,这场舞的背后啊,可不...
Hazel引擎学习(十一) 我自己维护引擎的github地址在这里,里面加了不少注释,有需要的可以看...
孩子的教育金,分享3个「有效」... 点击 “简七读财” ,发送消息“ 理财小工具 ”免费领取“40个赚钱工具资源包”晚上好,我是简七编...
iZotope RX 10(专... iZotope RX 10是一款专业的音频修复和增强软件,具有音频修复工具、音频增强工...
我的docker随笔40:cl... 本文介绍 clickhouse 数据库的容器化部署。 起因 某项目需生产环境数据库,因...
透视一周牛熊股:最牛股路桥信息... 过去一周(5月26日—5月30日)A股三大指数集体下跌。截至5月30日收盘,上证指数报3347.49...
基于matlab创建地面固定雷... 一、前言此示例演示如何创建和显示包含地面固定雷达、转弯飞机、等速飞机和移动地面车辆的多平台方案。二、...
暗夜发光,独自闪耀,盘点网页暗... 众所周知,网页的暗黑模式可以减少屏幕反射和蓝光辐射,减少眼睛的疲劳感&#...
C语言-程序环境和预处理(2) 文章目录预处理详解1.预定义符号2.#define2.1#define定义的标识符2.2#defin...
MySQL数据库知识整理 MySQL数据库知识整理 MySQL事务详解 事务四大特性ACID 原子性(Atomi...
Docker基础篇——最全讲解 文章目录一、CentOS安装docker二、启动帮助类命令三、镜像命令1.名词概念2.常用命令2.1...
五问“恒大论”,比亚迪回应车圈... “车圈恒大”引发的舆论风暴还在进一步发酵。近日,比亚迪集团品牌及公关处总经理李云飞在微博发文,引用多...
javafx实现聚光灯效果,圆... 系列文章专栏:javafx图形绘制、桌面录屏录音源码合集 目录 一、实现的效果 二、实现思路
300左右哪款蓝牙耳机适合学生... 近年来,随着蓝牙耳机的发展,不管是音质、外观、佩戴还是降噪都有了很大的提...