摘要 本文介绍WDM型USB设备驱动程序的基本概念、结构和特性,并说明了利用Driverworks进行开发的方法。

   关键词 WDM;USB设备驱动程序;Driverworks

   导言

  通用串行总线USB是1995年康柏、微软、IBM、DEC等公司推广的一种新型的通信标准,该总线接口具有安装方便、高带宽、易于扩展等优点,已逐渐成为现代数据传输的发展趋势。而在开发USB设备时,设备驱动程序的设计是其中一项重要的技术环节,它直接影响整个设备系统的性能。Windows98及其更高版本的操作系统对USB总线提供了全面的支持,并且用WDM驱动程序模型代替了VxD设备驱动程序。WDM支持USB协议,并为其提供了高效的开发平台。因此WDM已成为开发USB外设驱动程序所必须而有效的技术。

   Windows驱动程序模型(WDM)

  Windows环境下驱动程序共有三类,一类是VxD( Virtual Device Driver,虚拟设备驱动程序),起源于Windows 3.1 时代,用于Windows 95/98/Me操作系统中;一类是KMD( Kernel Mode Driver,内核模式驱动程序),用于Windows NT下;还有一类就是WDM(Win32 Driver Mode,Win32驱动程序模型),是微软从Windows 98开始,推出的一个新的驱动类型,它是一个跨平台的驱动程序模型,不仅如此WDM驱动程序还可以在不修改源代码的情况下经过重新编译后在非Intel平台上运行,毫不夸张地讲,WDM算得上是21世纪的驱动程序框架。

  WDM是在NT4.0驱动程序结构上发展起来的,所以它与NT4.0的驱动程序极为相似,但是它却有了本质上的提高,增加了对即插即用(PnP)、高级电源管理(PowerManagement)、Windows管理接口(WMl)的支持。更重要的是,WDM是一种通用的驱动模式,提供了包括USB、IEEEl394和HID等在内的一系列驱动程序类。

  1、WDM驱动程序的分层结构

  WDM体系结构实行分层处理,即设备驱动被分成了若干层,典型地分成:高层驱动程序、中间层驱动程序、底层驱动程序。每层驱动再把I/O请求划分成更简单的请求,以传给更下层的驱动执行。最底层的驱动程序在收到I/O请求后,通过硬件抽象层,与硬件发生作用,从而完成I/O请求工作。在这样的架构下,上面的驱动层就不需要对每个操作系统都要开发一遍了。如图1所示


  WDM还引入了功能设备对象FDO(Functional Device Object)与物理设备对象PDO(Physical Device Object)两个新类来描述硬件,一个PDO对应一个真实硬件。一个硬件只允许有一个PDO,但却可以拥有多个FDO,而在驱动程序中我们不是直接操作硬件而是操作相应的PDO与FDO。驱动程序和设备对象的分层情况如图2所示。


  其中总线驱动程序(Bus Driver)位于最底层,控制对总线上所有设备的访问,创建PDO代表发现的设备。功能驱动程序(Function Driver)控制设备的主要功能,分层在总线驱动的上面,负责创建FDO。在USB情况下,功能驱动程序必须使用USB类驱动程序访问设备。

  2、USB驱动程序的WDM结构

  USB驱动程序的构成层次如图3所示。其中USB客户驱动程序通过Windows系统提供的USB类驱动程序接口(USBDI)与下层驱动程序通信。


  在USB设备可用之前,必须对其进行配置和接口选择,然后所选择的接口的各个管道才是可用的。在USBDI的基础上进行编程将大大简化,用户不用关心IRP的类型,而只需要在相应的分发例程中通过构造USB块并将其通过USBDI发送下去就可以实现对USB设备的控制了。

   设备的访问

  WDM不是通过驱动程序名称,而是通过一个128位的全局惟一标识符(GUID)实现驱动程序的识别。在应用程序与WDM驱动程序通信方面系统为每一个用户请求打包形成一个I/O请求包(IRP)结构,将其发送至驱动程序,并通过识别IRP中PDO来区别是发送给哪一个设备的。内核通常通过发送IRP来运行驱动程序中的代码。

  WDM驱动程序有一个主要的初始化入口点,即一个必须称为DriverEntry的例程。它有一个标准的函数原型。当WDM驱动程序被装入时,内核调用DriverEntry例程。驱动程序的DriverEntry例程必须设置一系列的回调例程来处理IRP。每个回调例程有一个标准的函数原型。内核会在合适的环境下调用这个例程。

  大多数的WDM设备对象都是在即插即用管理器调用AddDevice例程入口点时被创建的。插入新设备后,当系统找到由安装信息文件所批示的驱动程序时,这个例程被调用。在此之后,一系列即插即用IRP被发送到驱动程序,设备驱动程序可进行相应的功能处理。

开发WDM型USB设备驱动程序(一)相关推荐

  1. 转-用Driver Studio工具包开发WDM型的USB设备驱动程序

    前文所提及的WDM驱动程序开发方法,笔者都曾尝试过.个人认为用DriverStudio开发工具包来开发USB驱动程序行之有效.其中的Driver Wizard是创建WDM驱动程序框架的一个很好的工具, ...

  2. usb扫描枪驱动下载 wince_wince下USB设备驱动程序

    随着USB设备的不断增加,我们这些开发人员也就多了对USB设备进行驱动程序开发的工作.但是对于很多初学者来说,存在以下三个困难: 一是对WinCE的驱动程序结构了解得太少,没办法得心应手的专注于驱动程 ...

  3. USB设备驱动程序导读(4)

            在上次了解了所有USBD接口函数以后,我们已经有了很多基础知识了,回顾USB样例的文件夹结构,我们还能记得USB/CLASS/COMMON这个文件夹下是存放所公共部分的源程序,它是微软 ...

  4. 嵌入式linux查看usb设备驱动程序,嵌入式Linux下USB驱动程序的设计

    嵌入式Linux下USB驱动程序的设计 usb概念:  USB(Universal Serial Bus)即通用串行总线,是一种全新的双向同步传输的支持热插拔的数据传输总线,其目的是为了提供一种兼容不 ...

  5. USB协议与Windows USB设备驱动程序笔记

    USB概述 USB主控制器负责数据处理,USB根集线器(ROOT HUB)提供一个连接USB主控制器与USB设备之间的接口和通路.USB集线器(USB HUB)可以对原有的USB端口在数量上进行扩展. ...

  6. USB设备驱动程序导读(9)

            以Bot.c文件中的BOT_DataTransfer()函数为例,在这个函数中,读写操作全部是调用了IssueBulkTransfer()函数,这个函数是由USBD提供的接口并且被us ...

  7. 基于Windows8与Visual Studio11开发第一个USB内核驱动程序

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! USB ...

  8. 《WDF USB驱动开发指南》-- USB 设备硬件结构

    PDF全文下载地址:http://download.csdn.net/source/2320280 驱网介绍:http://bbs3.driverdevelop.com/read.php?tid-12 ...

  9. USB开发基础:USB设备的开发流程

    USB设备的开发一般包括主机端(上位机)驱动程序的开发(如果您的USB设备符合某一标准设备类且主机端已经提供了此类设备的驱动程序的话,则可以省掉此步骤)和USB设备端驱动程序的开发,有时还可能包括主机 ...

最新文章

  1. XSD标准架构-----xsd:element 元素详解
  2. 64位Fedora运行32位C++程序中int精度溢出处理
  3. Vue学习之路1 小白起步
  4. 格式化输出中的%s和%S的区别
  5. 最实用的logback讲解(2)—appender
  6. Oracle发布Oracle数据库的官方Node.js驱动node-oracledb
  7. java书籍_腾讯大牛每天都要花一小时读的这11本java电子书籍,你还不看?
  8. 支付行业常用名词解释
  9. BATT入局,小程序成超级APP连接一切的枢纽
  10. android 华为打开usb调试模式,华为H60-L01 开启USB调试模式
  11. rgb转hsv (Verilog)
  12. 2020电赛F题–简易无接触温度测量与身份识别装置
  13. js中value^= 是什么意思
  14. android这只椭圆背景,Android 背景样式shape - oval椭圆、圆
  15. 数据科学家的修行之路---基本功
  16. gym101908 C. Pizza Cutter(平面几何欧拉定理,树状数组求逆序对)
  17. 项目记录-手机号码限制频次
  18. unity 关闭所有日志输出
  19. 互联网实习面试的一些心得(非计算机专业)
  20. CDQ分治——学习笔记

热门文章

  1. 新建了一个A5纸张的带有小月历的周计划模
  2. 【机器学习 吴恩达】P4弓形函数 bow-shaped function
  3. 普利司通遨然者001正式配套丰田全球旗舰MPV“赛那SIENNA”
  4. input禁止中文输入
  5. 查看 Ubuntu 上所有 python 版本
  6. 记MFC俄罗斯方块制作过程
  7. 小程序视频截gif_3个简单的应用程序,可让您深入视频和GIF
  8. Nexus 5X手机在支付宝的蚂蚁森林自动收能量的过程
  9. nginx官网文档地址
  10. 森林笔记:Linux+Qt的广告机小项目实践