Protocol是服务器和客户端的一种约定,他们按照这种约定互通信息。 UEFI使用C语言实现的但是Protocol使用了面向对象的思想。用struct模拟class,用函数指针模拟成员函数,此种函数第一个参数必须是指向Protocol的指针模拟this。

每个Protocol必须有一个GUID,可以根据GUID来寻找Protocol。成员函数的第一个参数是指向所属Protocol的this指针,这也是成员函数区别于一般函数的重要特征。

EFI_HANDLE是指向某种对象的指针,UEFI扫描总线后会为每个设备建立一个controller对象,用于控制设备,所有该设备的驱动以Protocol的形式安装到这个controller之中,这个controller就是EFI_HANDLE。

每个EFI_HANDLE都有一个Protocols链表用来存放Protocol,所有HANDLE通过AllHandles连接起来。Protocols是一个双向链表链表中存放PROTOCOL_INTERFACE,通过PROTOCOL_INTERFACE的Protocol指针可以找到对应的GUID。

使用OpenProtocol HandleProtocol LocateHandle三种服务用于找出指定的 Protocol。

Open用于打开指定句柄上的Protocol,Handle是简化版的Open,Locate用于找出指定Protocol在系统中的第一个实例,一般要使用服务需要得到设备的句柄而找句柄并不是很容易,而不在意Protocol在哪个设备上时可使用Locate服务。

使用Protocol:

1.使用gBS->O、H、L(其中一个)找出Protocol对象

2.使用其提供的服务

3.通过gBS->CloseProtocol关闭。

LocateHandleBuffer和LocateHandle服务提供找到支持某个Protocol设备的服务。函数有三种SearchType:1.AllHandles用于找到系统中的所有Handle;2.ByRegisterNotify用于在RegisterNotify中找出匹配SearchKey的Handle;3.ByProtocol用于从系统Handle数据库中找到支持指定Protocol的Handle。

UEFI Protocol相关推荐

  1. UEFI——protocol服务详解

    文章目录 InstallProtocolInterface CoreInstallProtocolInterfaceNotify 输入参数 入参判断 CoreHandleProtocol CoreOp ...

  2. 【Android SDM660源码分析】- 01 - 如何创建 UEFI XBL Protocol DXE_DRIVER 驱动及UEFI_APPLICATION 应用程序

    [Android SDM660源码分析]- 01 - 如何创建 UEFI XBL Protocol DXE_DRIVER 驱动及UEFI_APPLICATION 应用程序 一.创建DXE_DRIVER ...

  3. 【Android SDM660源码分析】- 03 - UEFI XBL GraphicsOutput BMP图片显示流程

    [Android SDM660源码分析]- 03 - UEFI XBL GraphicsOutput BMP图片显示流程 1. GraphicsOutput.h 2. 显示驱动初化 DisplayDx ...

  4. 「RISC-V Arch」RISC-V 规范结构

    日期:20230228 规范分类 根据 RISC-V 设计哲学,其规范文档也是高度模块化的: ISA 规范(2 篇) 非特权规范 特权规范 非 ISA 规范(6篇) Trace规范 ABI 规范 外部 ...

  5. udk开发-稀里糊涂

    一.EDK2简介 1.EDK2工作流 ​ 二.EDK2 Packages 1.Packages介绍 ​ EDK2 Packages是一个容器,其中包含一组模块及模块的相关定义.每个Package是一个 ...

  6. BIOS知识枝桠——Device Path

    EFI Device Path 定义&原型 文本表示形式 EFI Device Path种类 Hardware Device Path ACPI Device Path Messaging D ...

  7. 【GRUB】GRUB2代码初步解析

    目录说明 使用GRUB版本2.02,目录如下(非完全,还有文件没有包含): asm-tests:这里面是几个汇编代码文件,似乎没有什么用: build-aux:包含了编译时可能用到的脚本: conf: ...

  8. EDK II Module Writers Guide下

    三.常见UEFI Module类型 1.UEFI APP ​ UEFI Application是EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION类型的EFI Image. UEF ...

  9. 【我所认知的BIOS】—gt; uEFI AHCI Driver(5) — 第一个protocol最终要開始安装了

    [我所认知的BIOS]-> uEFI AHCI Driver(5) - 第一个protocol最终要開始安装了 LightSeed 4/28/2014 文章对EFI_DRIVER_BINDING ...

最新文章

  1. linux命令端口探测
  2. java tf值搜索_搜索引擎优化 TF_IDF之Java实现
  3. WIFI只sta和ap建立连接的过程
  4. openresty开发系列30--openresty中使用http模块
  5. 函数_月隐学python第9课
  6. 常见DDoS技术方法和对应防御措施
  7. linux下mysql 有双机_在Linux环境下配置mysql cluster双机集群
  8. HTML5的新特性(1) -pattern
  9. jQuery实现锚点滑动定位
  10. 【复习+知识补充】EL表达式:只能调用静态方法
  11. java内嵌html5浏览器_Jcef内嵌浏览器windows版本的编译及使用
  12. java压缩和解压ZIP和RAR文件踩坑实践
  13. word转html,word转pdf
  14. 融云会话界面自定义功能_Android快速集成融云
  15. 2022年团体程序设计天梯赛记录(部分题解)
  16. 使用开源的协同办公OA项目,实现规范高效的公文管理
  17. 移动端web设计尺寸_手机移动端网页按钮设计尺寸及间距规范
  18. 前段听一个仁兄说jbpm4 改变了很多
  19. RuntimeError: CUDA out of memory. Tried to allocate 6.38 GiB (GPU 0; 10.76 GiB total capacity; 708.0
  20. 【题解】 [SCOI2012]滑雪

热门文章

  1. 一分钟生成1000份Excel随机数工作簿
  2. 史上最全的小白兔的笑话
  3. EasyUI(1) 使用方法、引入、创建组件、LinkButton、panel、tree、Menu
  4. 获得marginLeft
  5. PlayerControllerRotation
  6. 值得考虑的 9 个开源 ERP 系统
  7. Linux命令之-----top命令
  8. 家庭园艺专栏- 植物幼苗徒长等于步入死亡
  9. 如何用h5标签canvas画柱状图【立体】
  10. 【共识专栏】共识的分类(下)