【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 中,如果a_i <a_i1 <a_i2<⋯<a_j,则称 a_i至 a_j为一段递增序列,长度为 j−i1。 定一个数列,请问数列中最长的递增序列有多长。 输入描述 输入的第一行包含一个整数 n。 第二行包含…...
华为OD机试题 - 寻找连续区间(JavaScript)| 机考必刷
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:寻找连续区间题目输入输出示例一输入输出说明示例二输入输出Cod…...

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

综合练习7 摄氏度转华氏温度(“\t“的使用,循环语句)
综合练习7 摄氏度转华氏温度 使用do…while循环,在控制台输入摄氏温度与华氏温度的对照表。 对照表从摄氏温度-30℃到50℃,每行间隔10℃,运行如下: 摄氏温度:-30℃ 华氏温度:-22.0℉ 摄氏温度:…...
AWS数据库总结
RDS – 联机事务处理OLTP(Online Transaction Processing),包括: SQL ServerOracleMySQL ServerPostgreSQLAuroraMariaDB非关系数据库DynamoDB数据仓库RedShift – 联机分析处理OLAP(Online Analytics Processing&…...

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

PHP 的运行方式有哪些?
PHP本质上的运行方式可以分为两种: 基于命令行的基于PHP-FPM的 但实际上,PHP能做的事很多,很多场景下,不同的运行方式能让开发更方便,减轻各种工作。 测试开发 PHP内置了一个HTTP 的server。这意味着,很…...
Web学习3_JavaScript
1.1 JS的调用方式与执行顺序 使用方式 HTML页面中的任意位置加上<script type"module"></script>标签即可。 常见使用方式有以下几种: 直接在<script type"module"></script>标签内写JS代码。script type"modu…...
「MySQL基础」不可重复读和幻读的区别
「MySQL基础」不可重复读和幻读的区别 文章参考: 在数据库中不可重复读和幻读到底应该怎么分? 作者:暖猫Suki、普通熊猫 文章目录「MySQL基础」不可重复读和幻读的区别一、概述二、小结一、概述 正好在琢磨这个问题,也被搞得头昏…...

CorelDRAW2023最新版新增功能200多个新模板
CorelDRAW是一款平面矢量绘图排版软件,CorelDRAW运用涵盖企业VI设计,广告设计,包装设计,画册设计,海报、招贴设计,UI界面设计,网页设计,书籍装帧设计,插画设计࿰…...
springboot自定义日志以及行号正确展示
在开发springboot项目时,我们可能需要自定义日志实现。需要对slf4j的日志实现进行一次外层包装 这个很简单,按照org.slf4j.Logger方式定义一个类Logger类MyLogger。 让后实现MyLoggerImpl: public class MyLoggerImpl implements CoreLogge…...

【GAOPS055】verilog 乘法、除法和取余
乘法硬件原理 结论 可以将乘法A x B转为A的移位相加。 利用乘2n就是左移n位的特性乘2^n就是左移n位的特性乘2n就是左移n位的特性,将数拆分为2n2^n2n表示 思路1 原始列竖式计算方法ref例2.9 思路2 B总是可以拆分为: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数据库 - 面试宝典 又到了 金三银四、金九银十 的时候了,是时候收藏一波面试题了,面试题可以不学,但不能没有!🥁🥁🥁 一个合格的 计算机打工人 ,收藏夹里必须有一份 MySQL 八…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...