上一节介绍了UEFI Driver模型的实现方式,本节介绍UEFI Driver的加载过程,驱动程序的加载分为两个过程,即注册和执行:

1、注册:在DXE阶段,通过LoadImage();函数驱动程序加载到内存,生成Image Handle,然后通过调用StartImage();调用驱动程序入口函数(xx.inf文件中定义的EntryPoint函数),入口函数中通过DRIVER_BINDING_PROTOCOL类型的实例,将驱动程序(Support();、Start();、Stop();函数)注册到Image Handle上,仅是注册,驱动程序不会执行,即不会操作任何硬件。详细的代码实现过程为:

图1 DXE入口及启动DXE dispatcher

图2 调用LoadImage函数,将驱动拷贝到内存

图3 调用StartImage函数,调用驱动模块EntryPoint();函数,实现驱动的注册

图4 PS2键盘驱动的EntryPoint函数

2、执行:DXE阶段驱动程序注册完成后,BDS阶段当查询到一个控制器后,会利用ConnectController() 函数为

该控制器寻找最好的驱动,通过调用该驱动的Support();函数确认是否支持该控制器,调用Start();函数启动该驱动。具

体代码实现过程为:

图1 调用gBS->ConnectController()函数,寻找合适驱动

图2-1 System table、Boot Service的初始化在DxeMain();函数中

图2-2 System table函数定义

图2-3 Boot Service函数定义

图3 gBS->connectcontroller()里调用support、start函数,检验驱动与激活驱动

UEFI规范驱动模型(二):驱动加载过程相关推荐

  1. ClassLoader(二)- 加载过程

    本文源代码在Github. 本文仅为个人笔记,不应作为权威参考. 原文 在前一篇文章初步了解ClassLoader里提到了委托模型(又称双亲委派模型),解释了ClassLoader hierarchy ...

  2. windows10驱动 x64--- 3环代码加载驱动(二)

    windows10驱动 x64--- 3环代码加载驱动 一:了解驱动加载工具 二:应用层--3环代码示例 一:了解驱动加载工具 平时调试.sys 我们都是用的驱动加载工具:open(打开驱动文件) - ...

  3. Linux设备驱动模型二 kobject

    Linux设备驱动模型二 kobject 1 kobject 1.1 kobject数据结构 kobject是sysfs文件系统的基础数据结构,它定义在include/linux/kobjec.h中 ...

  4. 设备树语法,加载过程和与驱动的关系

    文章目录 一.设备树语法 1.1 简介 1.2 基本数据格式 1.3 一个例子 1.3.1 根节点 2.3.2 CPU 1.3.3 节点名称 1.3.4 设备 1.3.5 status 1.3.6 编 ...

  5. Linux驱动3:驱动模块加载与卸载

    目录 一.环境配置 1.开发板环境 2.uboot环境 ①设置bootargs ②设置bootcmd 二.加载驱动与卸载驱动 1.加载命令选择 2.创建目录环境以及驱动文件复制 3.加载驱动 提示①& ...

  6. oracle10 64位odbc,图文教你64位win10添加oracle odbc驱动时提示无法加载oracle如何解决...

    现在电脑已成为我们工作生活的一部分,相信大家在操作电脑时一定会遇到这样那样的问题,64位win10添加oracle odbc驱动时提示无法加载oracle如何解决这个问题就是我们经常会遇到的,这样的问 ...

  7. nuScenes自动驾驶数据集:格式转换,模型的数据加载(二)

    文章目录 一.nuScenes数据集格式精解 二.nuScenes数据格式转换(To COCO) 数据格式转换框架 2.1 核心:convert_nuScenes.py解析 其他格式转换文件 2.1. ...

  8. OpenCvSharp人脸检测(二) DNN加载Caffe模型做人脸检测

    更多视觉图像处理相关内容,可关注[OpenCV与AI深度学习]公众号获取! 本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍OpenCvSharp人脸检测(二) DNN加载Caf ...

  9. 非即插即用型设备驱动的加载过程

    非即插即用型设备驱动的加载过程 1. 非PnP总线驱动在系统启动时通过扫描注册表发现非PnP设备的存在,并向OS报告ID信息.(例如根总线驱动通过扫描 HKLM\ SYSTEM\ CurrentCon ...

  10. 飞桨框架2.0RC新增模型保存、加载方案,与用户场景完美匹配,更全面、更易用

    通过一段时间系统的课程学习,算法攻城狮张同学对于飞桨框架的使用越来越顺手,于是他打算在企业内尝试使用飞桨进行AI产业落地. 但是AI产业落地并不是分秒钟的事情,除了专业技能过硬,熟悉飞桨的使用外,在落 ...

最新文章

  1. Matlab中的图形句柄(转载)
  2. SAP CRM WebClient UI运行时加载哪个configuration,到底是如何决定的
  3. atftp 在SUSE Linux中的源代码安装配置方法
  4. VMWare虚拟机NAT上网方法 亲测可用
  5. BZOJ3771 Triple(FFT+容斥原理)
  6. C++设计模式-中介者模式
  7. 张文宏直播再曝金句:我宁可戴口罩开空调
  8. 贵州:2018经济增速继续领先 2019“九字真言”主攻高质量
  9. Java基础教程(12)--深入理解类
  10. 面向对象(Python):学习笔记之封装
  11. 阿里云云计算 22 VPC连接
  12. 如何将pdf文件转换成可以编辑的文档
  13. 360浏览器邮件扩展添加企业邮箱
  14. cs61b实验记录(八)project 3:BearMaps 基于OSM的伯克利地图web应用
  15. 1stopt拟合步骤_1stopt快速公式拟合
  16. 向量空间的基和维数例题_向量空间基和维数的等价定义及求法
  17. oracle现金流量表逻辑,分析现金流量表填列法的逻辑
  18. 【转】那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
  19. 把你问到哑口无言,HR是专业的!
  20. 淘气网(一个仿淘宝的购物网站)

热门文章

  1. 《21天学通HTML+CSS+JavaScript Web开发(第7版)》——2.4 您要在Web上做什么
  2. 生活随记 - 开门放水
  3. 五、interfaces 和 daos
  4. python爬斗鱼直播房间名和主播名_python3爬取斗鱼某些版块的主播人气
  5. 机器学习资源备份,转载自大神https://zhuanlan.zhihu.com/p/26876504
  6. 新南威尔士 计算机硕士,新南威尔士大学计算机硕士申请条件及案例
  7. 中央处理器cpu主要由什么组成?
  8. 以太坊之dapp例子
  9. 浅析携程智能客服机器人实现
  10. APT,EPT,ET,DPD含义与理解