UEFI驱动模型的核心是通过EFI_DRIVER_BINDING_PROTOCOL管理驱动程序。UEFI驱动模型包含两个部分:Efi Driver Binding Protocol和驱动服务本身。

UEFI中所有符合UEFI Driver Model的驱动在模块的入口点,都会去安装EFI_DRIVER_BINDING_PROTOCOL;gBS->ConnectController()会去遍历系统中所有的EFI_DRIVER_BINDING_PROTOCOL,并调用其中的Support函数,来做判断,如果匹配成功,就接着调用Start函数来初始化硬件。而这个函数中就包含设备初始化所需要的代码。大概流程如下:

1. 当扫描的这个设备的时候(设备用Controller表示),先判断它是否安装了DevicePathProtocol,没有就表示这个设备还没有准备好(或者说不是设备),后面的xxxStart()不用执行;

2. 然后判断NetworkInterfaceIdentifierProtocol是否安装,这个是网卡驱动一定会装的Protocol,Snp驱动底层的操作需要依赖于它,所以一定要安装,如果没有就不会执行后面的操作;

3. 判断NetworkInterfaceIdentifierProtocol是否满足要求,如果不满足则不会执行xxxStart()函数。

如果以上条件都满足,就可以认为该设备是一个网卡,然后这个驱动就会被执行,而之前获取到的DevicePathProtocol和NetworkInterfaceIdentifierProtocol就会成为操作正确设备的基础。

当调用ConnectController的时候,代码首先会去执行EFI_DRIVER_BINDING_PROTOCOL中的XXXSupported函数,判断传入的Handle是否符合该Protocol执行的要求,如果符合就执行XXXStart函数,否则就直接退出;而DisconnectController会去执行Protocol中的XXXStop函数。

该类Protocol用在一种叫做UEFI Driver Model类型的驱动中,这种驱动在DXE阶段安装,但实际使用是在BDS阶段。

Supported函数用于检测一个设备是否支持该驱动。

Start用于将驱动安装到设备上并启动硬件设备。

Stop用于将驱动从设备上卸载并停止驱动。

这里的EFI_DRIVER_BINDING_PROTOCOL通常是不会通过HandleProtocol等函数去获取的,而是使用ConnectController、DisconnectController。

【UEFI实战】DXE驱动相关_jiangwei0512的博客-CSDN博客_dxe驱动

Eg:    pci bus driver是什么? - 知乎

UEFI----EFI_DRIVER_BINDING_PROTOCOL相关推荐

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

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

  2. UEFI Specification 第二章 概述

    UEFI支持通过加载UEFI驱动和UEFI应用程序映象来扩展平台固件.当UEFI驱动程序和UEFI应用程序加载时,它们可以访问所有UEFI定义的运行时和引导服务. UEFI允许将OS加载程序和平台固件 ...

  3. 【UEFI基础】Protocol介绍

    简要说明 Protocol是UEFI中的一个重要概念(事实上<UEFI SPEC>中有超过70%的内容都是在讲Protocol),下面简单说明下: 1. 首先,非常重要的一点,Protoc ...

  4. BIOS/UEFI基础——Protocol介绍

    简要说明 Protocol是UEFI中的一个重要概念(事实上<UEFI SPEC>中有超过70%的内容都是在讲Protocol),下面简单说明下: 1. 首先,非常重要的一点,Protoc ...

  5. UEFI下的Gmac驱动实现

    1.mac的分类: mac按照传输的速率可以分为 emac 和 gmac. mac: 它是一个controller,它的主要的作用有两个方面:帧发送: 接受来自协议层的数据,加上控制信息,然后以位数据 ...

  6. UEFI Console Splitter

    之前在写UEFI程序的时候如果想在终端打印信息,或者接收用户输入的时候调用SystemTable下的ConIn/ConOut protocol就ok了. //向终端设备输出字符 Status = gS ...

  7. 【UEFI基础】EFI_HANDLE

    EFI_HANDLE EFI_HANDLE其实就是一个指针: /// /// A collection of related interfaces. /// typedef VOID *EFI_HAN ...

  8. 【UEFI基础】UEFI网络框架之概述

    概述 UEFI中的网络框架大致如下: 其中最底下部分并不在UEFI代码中,它实际上代表的是网卡的驱动.它提供的接口可以与SNP对接. 而SNP是UEFI下操作网络的基本接口. 另外关于安全启动部分,在 ...

  9. PCI Option ROM 在UEFI中加载流程

    目录 一.UEFI Driver 是什么? 二.UEFI Driver 加载流程 1.EFI_DRIVER_BINDING_PROTOCOL 2. PCI扫描过程中是如何确定PCI设备是支持optio ...

  10. UEFI原理与编程实践--UEFI工程模块文件

    标准应用程序工程模块 该模块是其他应用程序工程模块的基础,也是UEFI中常见的一种应用程序工程模块,标准应用程序工程模块,UefiMain就是这个模块的入口函数 EFI_STATUS EFIAPI U ...

最新文章

  1. VSEARCH操作实战-免费使用无内存限制的USEARCH!
  2. python模块 init py_Python模块包中__init__.py文件的作用
  3. mysql函数及解析,Mysql研究之MySQL常用内置函数完全解析
  4. ts watch路由 参数变化_vue watch 监听路由变化
  5. kali字典_kali黑客系统wpscan工具扫描wordpress漏洞入侵攻击测试教程
  6. Java学习之斐波那契数列实现
  7. CodeForces - 540D Bad Luck Island —— 求概率
  8. 【CF 600E】Lomsat gelral(树上启发式合并, dsu on tree, 静态链分治,模板题)
  9. ftp用的是tcp还是udp_TCP与UDP的区别究竟在哪
  10. Windows Server 2008通过计划任务定时执行bat文件
  11. python学习多久可以就业_南昌多长时间能学会python(Python能去从事的工作)
  12. Case when的用法
  13. 全球气象数据网站(大气、海洋数据应有尽有)
  14. Java项目源码下载S2SH基于java的保险业务管理系统
  15. 路由器与交换机的作用及区别
  16. linux samba文件共享,网络凭据总是出错解决方法
  17. 写给Krpano小白们的最最最入门级教程(一)
  18. 读 TiDB: A Raft-based HTAP Database
  19. 一、创建线程的三种方式
  20. VS用SSIS实现SQL Server数据库与Excel表格数据的相互导入

热门文章

  1. 数字IC设计----MOS管与逻辑门
  2. verilog版的1602+ps2
  3. linux下repo文件的配置
  4. 正则表达式匹配标签及其中的内容
  5. Linux-lsxxx
  6. 大数据_02【大数据基础知识】
  7. 讲述 Android 开发代号的故事:Cupcake - Donut - Eclair - Flan - Gingerbread
  8. Android:ButterKnife的简单使用
  9. 基于Html5的兼容所有主流浏览器的在线视频播放器videoJs
  10. xilinx 高速收发器Serdes深入研究 GTX-3(时钟纠正clock correction)