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

【5】理解GUID和Handle:解锁UEFI驱动和应用程序的钥匙

如何理解UEFI中的GUID和Handle
在UEFI(统一可扩展固件接口)架构中,GUID(全局唯一标识符)和Handle(句柄)是核心概念,它们共同构成了UEFI协议管理和资源调用的基础机制。以下从技术定义、作用机制及实际应用三个层面展开分析。

一、GUID:128位全局唯一标识符

GUID(Globally Unique Identifier)是UEFI中用于唯一标识协议、设备、镜像等实体的128位标识符,其结构由4部分组成:32位数据1、16位数据2、16位数据3及8字节数据4(共8字节)。例如,EFI_DRIVER_BINDING_PROTOCOL的GUID定义为:

#define EFI_DRIVER_BINDING_PROTOCOL_GUID \
{ 0x18a031ab, 0xb443, 0x4d1a, {0xa5,0xc0,0x0c,0x09,0x26,0x1e,0x9f,0x71} }

该结构通过组合时间戳、机器标识和随机数生成,确保全球范围内唯一性[2]

技术作用

  1. 协议命名:每个协议通过GUID注册到句柄数据库(Handle Database),驱动或应用通过GUID查找协议服务。例如,EFI_BOOT_SERVICES.LocateProtocol()通过GUID定位协议接口[1]
  2. 资源隔离:避免命名冲突。UEFI规范要求同一GUID仅对应一个协议实现,确保服务调用的确定性。
  3. 扩展性:开发者需为自定义协议生成新GUID(如使用uuidgen工具),防止与现有协议冲突[2]

二、Handle:协议接口的容器

Handle是UEFI中管理关联协议的逻辑单元,其核心结构为IHANDLE,包含以下关键字段:

  • 协议列表:通过LIST_ENTRY Protocols链接该句柄支持的所有协议接口(PROTOCOL_INTERFACE)。
  • 全局键值UINT64 Key记录句柄创建或修改时的数据库状态,用于并发控制。
  • 句柄链表:通过LIST_ENTRY AllHandles链接到全局句柄列表gHandleList[1]

技术作用

  1. 协议聚合:将多个相关协议接口(如设备路径、驱动绑定)组合到一个句柄,简化管理。例如,总线驱动通过InstallMultipleProtocolInterfaces()将子设备协议安装到同一句柄[1]
  2. 资源访问:通过句柄操作协议接口。如EFI_BOOT_SERVICES.OpenProtocol()通过句柄和GUID打开协议,获取接口指针(VOID* Interface[1]
  3. 生命周期管理:句柄的创建、修改和删除由UEFI内核通过Key值跟踪,确保数据一致性。

三、GUID与Handle的协同机制

  1. 协议注册:驱动通过EFI_BOOT_SERVICES.InstallProtocolInterface()将协议接口(PROTOCOL_INTERFACE)安装到句柄,同时将协议条目(PROTOCOL_ENTRY)注册到全局协议数据库mProtocolDatabase。每个协议条目包含GUID、关联句柄列表及通知处理器[1]
  2. 协议查找:应用通过GUID在协议数据库中定位协议条目,再通过句柄列表获取支持该协议的所有句柄,最终通过句柄访问具体接口。例如:
    EFI_STATUS Status;
    EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;
    Status = gBS->LocateProtocol(&EFI_DRIVER_BINDING_PROTOCOL_GUID, NULL, (VOID**)&DriverBinding);
    
  3. 并发控制OPEN_PROTOCOL_DATA结构记录协议的打开次数(OpenCount)和访问属性(Attributes),防止多线程竞争[1]

四、实际应用场景

  1. 总线驱动开发:使用InstallMultipleProtocolInterfaces()避免重复安装设备路径协议,确保子设备句柄唯一性[1]
  2. 服务句柄管理:如HII(人机接口基础设施)服务通过专用服务句柄提供全局配置接口,其他驱动通过GUID调用其服务[2]
  3. 协议卸载:通过UninstallMultipleProtocolInterfaces()从句柄移除协议,清理资源。

总结

GUID作为UEFI的“命名空间”,确保协议和资源的唯一标识;Handle作为“容器”,聚合相关协议并管理生命周期。二者通过句柄数据库和协议数据库的联动,实现了UEFI高效、可扩展的架构设计。开发者需严格遵循GUID唯一性原则,并合理利用句柄的协议组合能力,以构建稳定的固件驱动。[1][2]
参考文献:
[1]08-UEFI中的Device、Driver、Handle、Protocol、Image.pdf
[2]edk2-UefiDriverWritersGuide-draft.pdf

http://www.dtcms.com/a/565089.html

相关文章:

  • [手机AI开发sdk] docs | AidLearning平台(四合一环境)
  • CTFHub XSS通关:XSS-过滤关键词
  • Java设计模式精讲---简单工厂模式
  • Spring Boot + EasyExcel 枚举转换器:通用方案
  • Pandas-之数据合并与连接
  • 大数据毕业设计项目推荐 基于大数据的广西医疗机构数据可视化分析系统 1.85w条数据【大数据毕业设计项目选题】
  • Node.Js 实现模板生成Word、Word转Pdf文件、Excel生成、上传和下载
  • 山西省建设监理协会官方网站好书推荐ppt模板免费下载
  • 机器学习中的Hello World:线性回归(一)
  • RT-DETR解码模块(Decoder)
  • 做炫舞情侣头像动态图网站建设公司网站怎么弄
  • 诚通凯胜生态建设有限公司网站莆田企业网站建设
  • IVWorks率先将8英寸GaN纳米线片商业化
  • ip网段扫描机器shell脚本
  • 智能家居品牌出海新打法:用海外网红营销讲好“未来生活剧本”
  • 做网站有效果吗网络推广公司方案
  • 基于ROS与YOLOv3的智能采购机器人设计(智能车创意组-讯飞智慧生活组)
  • 优化Elasticsearch批量写入性能:从单分片瓶颈到多索引架构
  • 高效文献阅读与笔记整理方法:从 筛选 到 3Pass 精读
  • 一步一步教你做网站后台视频广东新闻联播主持人
  • 如何用 Simulink 驱动 UE5 的海况切换
  • 多线程——并发三特性
  • 5.25基于labview交通灯+分时段控制红绿灯时间。手动输入控制labview交通灯labview版本2018,比我高都能打开。
  • 访问网站速度很慢discuz 做家教网站
  • 【树莓派5安装实时RT内核】最新版
  • CANN自定义算子开发实战:Softmax优化全流程解析
  • XAI 面经分享|从模型解释到面试考察,全流程复盘
  • 免费做简历下载的网站wordpress thetime
  • python实现象棋
  • 开发巴西外贸客户有什么好方法