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

【BIOS/UEFI】HII 基本框架及概述

HII(Human Interface Infrastructure )定义了一套管理用户输入的基础框架。HII数据库主要提供用户安装、卸载以及使用各种字符串、字体和图片等资源的接口。

    HID Devices 是用户输入设备,如键盘、串口和网络;Display Devices 是输出设备,如显示器、串口和网络。HID Devices 和 Display Devices 通过 Forms Browser 交互。Forms Browser 是负责显示信息和收集输入、输出信息的模块,其要显示的信息从 HII Database 中获取。HII Database 负责所有 HII 数据的管理。Driver 将要显示的信息注册到 HII Database 中,在显示的过程中 Driver 和 Forms Browser 交互。交互后的信息通常存储在 UEFI Global Variable Store 中,也可以存储在其他地方,存储的控制权在 Driver,由 Driver 自己决定。【UEFI Spec 译文:】驱动程序和应用程序将元素(如字体、字符串、图像和表单)安装到 HII 数据库中,该数据库充当整个平台的中央存储库。Forms Browser 使用这些元素在显示设备上呈现用户界面,并通过 HID 设备从用户接收信息。之后,用户在 Form Browser 所做的更改将保存到 UEFI global variable storage(使用 GetVariable() 和 SetVariable() )或是自定义驱动提供的存储变量中。UI App 是一个启动选项。BDS (启动设备选择)阶段加载 UI App,该启动选项一方面会调用 Set Browser 所提供的 SentForm 服务,将所需要显示的页面显示出来(主页面)。从主页面中可分级找到系统其他的配置信息并显示。另一方面,UI App 驱动系统中各种 HII Driver,HII Driver 提供其配置信息注册给 HII DataBase,这些信息包括 IFR、String、Font、Image等。  Setup Browser 从 HII DataBase 获取信息用于显示和交互。页面和信息都有了,Setup Browser 就可以完整地显示了。交互后,用户修改地信息存入Flash(前文提到由 HII Driver 决定,这里只是说图中示例)。

UEFI (Spec)中 HII 组件
Strings 
在 uni 文件中描述。Strings 以 Unicode 类型(2 byte)存储,以满足多语言的支持。语言格式要符合 RFC 4646 基本格式。String Token 相当于 ID,是唯一的,是 String 的标识。在源代码中要同时指明 String Token 和语言才能获取最终的 String如果指明的语言没有相应的字符描述,则使用默认语言。我见过的情况是:在缺少中文显示的时,setup 的选项显示成一个叹号。

Fonts
Font 通过点阵的方式显示,有宽字符和窄字符,汉字需要使用宽字符,英文使用窄字符。使用的字符需要有对应的字库。

Keyboard
不同的键盘存在布局区别,Keyboard 用于键盘布局的匹配。

Forms
Forms Browser 使用应用程序或驱动在 HII Database 初始化时安装 Forms 数据。 Forms Browser 提供的用户接口包括读取 Forms 的内容、与用户交互以及存储数据。在 UEFI Spec 中定义了二进制格式的 IFR 用来描述页面如何显示、切换等信息。而 VFR 语言是 Edk2 的实现,Edk2 还提供了 IFR Compiler 工具用于实现将 VFR 语言编译成 IFR 语言。使用 XML、JavaScript 等其他语言也是可以的,只要最终能转换成 IFR 就行,UEFI Spec 只认 IFR。

    控件:

checkbox:用于选择 true 或 false,比如先择开还是关
numeric:用于选择一个范围,比如选择年月
oneof:用于从多个选项中选择一个
string:用于输入字串
显示效果 :

disableif:使选项完全失效了
suppressif:只是不显示,选项本身还是有效的,如有默认值则使用默认值
grayoutif:置灰选项,使得选项用户不能更改
.vfr ( .sd ) 文件内容示例:

Packages
Packages 是一个标准的数据结构,把包括 Strings、Fonts、Keyboard、Forms 、以及 Image 的数据组织起来,并管理。换句话说,这些数据都打包成 Package,然后注册,实际中注册使用 PackageList。

HII Database
HII Database 是 HII 框架一个核心的公共模块,用于管理所有 HII 数据,包括 String、Forms、Keyboard、Images、Device Paths等。

HII Protocols

HII Browser Engine Protocols

EFI_HII_CONFIG_ROUTING_PROTOCOL

    由 HII Database 提供。

EFI_HII_CONFIG_ACCESS_PROTOCOL

    EFI_HII_CONFIG_ACCESS_PROTOCOL 由HII Driver 提供。每个 HII Driver 都需要提供自己的 EFI_HII_CONFIG_ACCESS_PROTOCOL  用来负责自己数据的读和写以及交互。ExtractConfig()和RouteConfig()通常被实现 HII Configuration Routing Protocol 的驱动调用,Callback() 通常被 Forms Browser 调用。ExtractConfig() 函数用于提取元素(Strings)到当前的配置中,RouteConfig() 函数用于存储已经配置好的信息,Callback() 函数用于记录用户的操作(被修改的信息)。

EFI_FORM_BROWSER2_PROTOCOL

SentForm():用于显示页面(主页面);
BrowserCallback():HII Driver 可以通过 BrowserCallback 获取到当前 HII Driver 的配置选项里用户已经修改但还未存储的信息
HII Driver 初始化流程:
HII Driver 提供Config Access Protocols;
安装 Device Path Protocol;
安装 Config Access Protocol。Config Access Protocol 一定是安装在某一个 Device Path 上的;
Create PackageList。PackageList 通常要包含 Form、String、
调用 HII Database Protocol 里的 NewPackageList,将 Package List 安装到 HII Database 里。输入的参数包括 Config Access Protocol 所装在的 Device Path,最终得到 HII handle,至此,信息都安装完毕。一个 HII Handle 对应一个 Device Handle,通过 HII Handle 可以找到 Device Handle,相反的,通过 Device Hanlde 可以找到其对应的 Config Access Protocol。

Form Browser 的处理流程:

BlockToConfig 和 ConfigToBlock
HII Driver 通常调用的是 Browser Callback函数;UI App 调用 SentForm 函数,用于显示主页面。
HII Driver 自己的 Config Access Protocol 里的CallBack 函数调用 UEFI Browser Protocol 里的 CallBack 函数。
————————————————
版权声明:本文为CSDN博主「@一水间」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45258382/article/details/128113834

相关文章:

【BIOS/UEFI】HII 基本框架及概述

HII(Human Interface Infrastructure )定义了一套管理用户输入的基础框架。HII数据库主要提供用户安装、卸载以及使用各种字符串、字体和图片等资源的接口。 HID Devices 是用户输入设备,如键盘、串口和网络;Display Devices 是输…...

sprintf(...)溢出边界导致程序崩溃的问题

文章目录小结问题及解决参考小结 使用sprintf(...)进行格式化是一种标准的做法,但是这样做是有一个极大的风险,由于sprintf(...)不进行边界检查,这样会有写操作溢出边界的风险,并导致程序崩溃。本文进行了简单写操作溢出边界的测…...

公式推导+dfs简版

写在前面的话:心可以冷,但手不能停 第一题:C. Flexible String 题目大意:给一个aaa字符串和bbb字符串和数字kkk,首先设置一个计数器cntcntcnt,其中可以对aaa字符串做以下操作:替换aaa中的一个字母xxx&#…...

论文笔记 | 标准误聚类问题

关于标准误的选择,如是否选择稳健性标准误、是否采取聚类标准误。之前一直是困惑的,惯用的做法是类似主题的文献做法。所以这一次,借计量经济学课程之故,较深入学习了标准误的选择问题。 在开始之前推荐一个知乎博主。他阅读了很…...

银行管理系统--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)

实例1:银行管理系统 从早期的钱庄到现如今的银行,金融行业在不断地变革;随着科技的发展、计算机的普及,计算机技术在金融行业得到了广泛的应用。银行管理系统是一个集开户、查询、取款、存款、转账、锁定、解锁、退出等一系列的功…...

【18】组合逻辑 - VL18 实现3-8译码器①

VL18 实现3-8译码器① 1 题目 【这题我的思路非常绝境】奈斯 !! 看真值表的思路:Yi所在列【0仅一个其余全1】,故【以0为对象求解】 观察发现:E3 E2_n E1_n = 100 时 是 译码的使能信号 ; 并且E3 E2_n E1_n为其他值时,都不使能译码 然后就很简单,没有仿真就成功了 2 代…...

2020蓝桥杯真题最长递增 C语言/C++

题目描述 在数列a_1 ,a_2,⋯,a_n 中&#xff0c;如果a_i <a_i1 <a_i2<⋯<a_j&#xff0c;则称 a_i至 a_j为一段递增序列&#xff0c;长度为 j−i1。 定一个数列&#xff0c;请问数列中最长的递增序列有多长。 输入描述 输入的第一行包含一个整数 n。 第二行包含…...

华为OD机试题 - 寻找连续区间(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:寻找连续区间题目输入输出示例一输入输出说明示例二输入输出Cod…...

一次疲惫的调试--累了及时透气

原创 射频清茶 深山小老虎 2023-03-11 14:32发表于广东 收录于合集 #射频调试3个 #网分4个 #Wi-Fi 2个 进来透透气 道不尽红尘舍恋 诉不完人间恩怨 世世代代都是缘 喝着相同的水 留着相同的血 这条路漫漫又长远 红花当然配绿叶 这一辈子谁来陪 渺渺茫茫来又回 往日情景再…...

综合练习7 摄氏度转华氏温度(“\t“的使用,循环语句)

综合练习7 摄氏度转华氏温度 使用do…while循环&#xff0c;在控制台输入摄氏温度与华氏温度的对照表。 对照表从摄氏温度-30℃到50℃&#xff0c;每行间隔10℃&#xff0c;运行如下&#xff1a; 摄氏温度&#xff1a;-30℃ 华氏温度&#xff1a;-22.0℉ 摄氏温度&#xff1a;…...

AWS数据库总结

RDS – 联机事务处理OLTP&#xff08;Online Transaction Processing&#xff09;&#xff0c;包括&#xff1a; SQL ServerOracleMySQL ServerPostgreSQLAuroraMariaDB非关系数据库DynamoDB数据仓库RedShift – 联机分析处理OLAP&#xff08;Online Analytics Processing&…...

2个步骤就能批量给视频添加滚动字幕

现在很多小伙伴在剪辑视频的时候都会给自己的视频添加适配的字幕&#xff0c;但是有很多的视频想要添加一样的滚动字幕时&#xff0c;有一个能批量添加剪辑的工具非常重要&#xff0c;今天小编就给大家分享一个可以批量剪辑大量视频的工具&#xff0c;下面一起看看具体的操作步…...

PHP 的运行方式有哪些?

PHP本质上的运行方式可以分为两种&#xff1a; 基于命令行的基于PHP-FPM的 但实际上&#xff0c;PHP能做的事很多&#xff0c;很多场景下&#xff0c;不同的运行方式能让开发更方便&#xff0c;减轻各种工作。 测试开发 PHP内置了一个HTTP 的server。这意味着&#xff0c;很…...

Web学习3_JavaScript

1.1 JS的调用方式与执行顺序 使用方式 HTML页面中的任意位置加上<script type"module"></script>标签即可。 常见使用方式有以下几种&#xff1a; 直接在<script type"module"></script>标签内写JS代码。script type"modu…...

「MySQL基础」不可重复读和幻读的区别

「MySQL基础」不可重复读和幻读的区别 文章参考&#xff1a; 在数据库中不可重复读和幻读到底应该怎么分&#xff1f; 作者&#xff1a;暖猫Suki、普通熊猫 文章目录「MySQL基础」不可重复读和幻读的区别一、概述二、小结一、概述 正好在琢磨这个问题&#xff0c;也被搞得头昏…...

CorelDRAW2023最新版新增功能200多个新模板

CorelDRAW是一款平面矢量绘图排版软件&#xff0c;CorelDRAW运用涵盖企业VI设计&#xff0c;广告设计&#xff0c;包装设计&#xff0c;画册设计&#xff0c;海报、招贴设计&#xff0c;UI界面设计&#xff0c;网页设计&#xff0c;书籍装帧设计&#xff0c;插画设计&#xff0…...

springboot自定义日志以及行号正确展示

在开发springboot项目时&#xff0c;我们可能需要自定义日志实现。需要对slf4j的日志实现进行一次外层包装 这个很简单&#xff0c;按照org.slf4j.Logger方式定义一个类Logger类MyLogger。 让后实现MyLoggerImpl&#xff1a; public class MyLoggerImpl implements CoreLogge…...

【GAOPS055】verilog 乘法、除法和取余

乘法硬件原理 结论 可以将乘法A x B转为A的移位相加。 利用乘2n就是左移n位的特性乘2^n就是左移n位的特性乘2n就是左移n位的特性&#xff0c;将数拆分为2n2^n2n表示 思路1 原始列竖式计算方法ref例2.9 思路2 B总是可以拆分为&#xff1a;B(an2nan−12n−1...a121a020)B(…...

TCP UPD详解

文章目录TCP UDP协议1. 概述2. 端口号 复用 分用3. TCP3.1 TCP首部格式3.2 建立连接-三次握手3.3 释放连接-四次挥手3.4 TCP流量控制3.5 TCP拥塞控制3.6 TCP可靠传输的实现3.7 TCP超时重传4. UDP5.TCP与UDP的区别TCP UDP协议 1. 概述 TCP、UDP协议是TCP/IP体系结构传输层中的…...

金三银四、金九银十 面试宝典 MySQL面试题 超级无敌全的面试题汇总(超万字的面试题,让你的MySQL无可挑剔)

MySQL数据库 - 面试宝典 又到了 金三银四、金九银十 的时候了&#xff0c;是时候收藏一波面试题了&#xff0c;面试题可以不学&#xff0c;但不能没有&#xff01;&#x1f941;&#x1f941;&#x1f941; 一个合格的 计算机打工人 &#xff0c;收藏夹里必须有一份 MySQL 八…...

开源短剧源码|短剧小程序源码短剧App源码双端适配,即开即用

在当下这个注意力稀缺的时代&#xff0c;短剧以其“爽点密集、节奏明快、情感代入强”的特点&#xff0c;迅速抢占了海量用户的碎片化时间。无论是国内的微信/抖音小程序生态&#xff0c;还是出海的短剧App市场&#xff0c;都呈现出爆发式的增长态势。然而&#xff0c;对于想要…...

音乐解锁终极指南:打破平台限制,释放你的音乐收藏

音乐解锁终极指南&#xff1a;打破平台限制&#xff0c;释放你的音乐收藏 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址…...

Axure RP中文语言包技术深度解析:从键值对到国际化架构的工程实践

Axure RP中文语言包技术深度解析&#xff1a;从键值对到国际化架构的工程实践 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 在…...

SAP物料主数据维护时,计量单位从Z变成ZA?一文搞懂CUNI配置与转换例程

SAP计量单位转换机制深度解析&#xff1a;从Z到ZA的幕后逻辑 引言 在SAP系统中维护物料主数据时&#xff0c;许多用户都曾遇到过这样的困惑&#xff1a;明明在MM02事务中输入的计量单位是"Z"&#xff0c;保存后查询数据库却发现变成了"ZA"。这种现象并非系…...

为智能硬件项目集成大模型能力利用Taotoken实现低成本高可用的方案

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为智能硬件项目集成大模型能力利用Taotoken实现低成本高可用的方案 在智能家居、物联网等嵌入式硬件项目中引入大模型能力&#xf…...

插入排序,选择排序,希尔排序

一、插入排序从头开始依次选取一个元素&#xff0c;和他前面的数比较&#xff0c;先把值存为 c &#xff0c;这样就不用交换值了若比前面的元素大&#xff0c;就让 qq 1的位置的值改为前面的数&#xff0c;qq 往前移一位若前面的数小&#xff0c;就把 qq 1的位置的值改为cvo…...

我让 AI 学会了“拆“App——Antigravity 逆向分析能力搭建手记

你能想象吗&#xff1f;对着 AI 说一句"帮我分析这个 APK"&#xff0c;它就自己打开 IDA、拆解代码、Hook 运行时、提取密钥、还原源码……全程不用你碰一下鼠标。先说结论我给 AI 编程助手 Antigravity 装上了 4 把"瑞士军刀"&#xff0c;让它从一个只会写…...

Zotero插件市场TOP1新势力:Perplexity Connector v2.3正式发布,支持LLM上下文感知文献溯源,仅限前500名开发者早鸟激活

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity Zotero整合方案全景概览 Perplexity 作为新一代 AI 驱动的研究型搜索引擎&#xff0c;其核心优势在于实时引用溯源与上下文感知问答&#xff1b;Zotero 则是学术工作者广泛采用的开源文献管…...

OpenAI面向欧洲部分用户开放网络安全专用模型GPT-5.5-Cyber,应对AI网络威胁

OpenAI推出欧洲专属网络安全模型 5月12日消息&#xff0c;据eWeek报道&#xff0c;OpenAI正式面向欧洲地区的部分用户开放了网络安全专用模型GPT-5.5-Cyber。该模型基于GPT-5.5架构开发&#xff0c;专为经过OpenAI验证的网络安全防御人员打造。 满足网络安全关键任务需求 GPT-5…...

新手工程师别慌!从零开始搞定一颗新Sensor的完整调试手册(附常见问题排查清单)

新手工程师别慌&#xff01;从零开始搞定一颗新Sensor的完整调试手册 刚拿到一颗新Sensor时&#xff0c;面对厚厚的Datasheet和复杂的原理图&#xff0c;很多新手工程师都会感到无从下手。本文将带你系统性地梳理整个Sensor调试流程&#xff0c;从关键参数提取到问题排查&#…...