USB数据采集系统论文(7)

2019-04-13 23:18

Windows9x和以后的产品提供一个通用的驱动程序框架。在Windows操作系统中提供了对USB很好的支持。WDM存在于Windows NT的驱动程序模型基础之上,并增加了对即插即用和电源管理的支持,Windows2000系列操作系统也是建立在NT构架上的。因此一个在Windows 2000下开发出来的WDM驱动程序,也可以在其它的Windows环境下运行。

4.1 Windows2000驱动程序

我们的USB设备的HOST驱动程序是在Windows2000下开发的WDM驱动程序。在讲述USB的客户驱动开发之前,先看一下关于Win2000驱动程序和WDM程序模型。图4-1是Windows2000的设备驱动程序类型框图。

图4-1 Windows2000驱动程序类型框图

虚拟设备驱动程序是一个用户态的组件,一个基于DOS的应用程序可以通过它处理X86计算机上的硬件。VDD(Virtual device driver)依靠I/O允许屏蔽位来控制端口操作,它必须仿真硬件操作,以方便那些在一个裸机上,直接对硬件操作的应用程序。内核态驱动程序这个分支包含了很多子分支,其中PnP驱动程序用来管理Windows2000的即插即用协议;一个WDM驱动程序是添加了电源管理协议,并且在Windows98和Windows2000中相兼容的一类PnP驱动程序。在WDM驱动程序中,有很多不同的类驱动程序,类驱动程序管理一类定义好的设备。而微驱动程序提供了厂商关于某类设备的特定驱动;显示驱动程序是对显示和打印的内核驱动,它们的主要特征是显示可视化数据;文件系统驱动程序在本地硬盘或者网络上实现标准的PC文件系统模型(它包括一个层次结构的目录和文件名);遗留设备驱动程序是一类可以直接控制硬件设备而不需要其它驱动程序介入的内核驱动程序,它主要包括那些在Windows NT的以前版本中开发的,现在仍在Windows2000中运行的驱动程序。

类驱动程序 文件系统驱动程序 驱动程序 PnP驱动程序 WDM驱动程序 显示驱动程序 虚拟设备驱动程序 内核态驱动程序 微驱动程序 4.2 WDM驱动程序结构模型

Windows 32模式驱动程序模型可以在Windows 98, Windows ME, Windows2000下使用。WDM是Microsoft全力推出的新驱动程序模式,目的是提供一种灵活的方式简化驱动程序开发,实现对新硬件的即插即用,减少并降低驱动程序开发的数量和复杂性。WDM驱动程序可以看作是在Windows NT4.0驱动程序基础上发展起来的驱动程序模型,它和NT驱动程序有很多相似的地方,这两种类型的驱动程序都采用层次结构,能处理系统发出的IRP请求,IRP结构基本相同,操作系统中为支持NT驱动程序提供的服务也适合于WDM驱动程序。但是WDM驱动程序提供了许多支持新硬件设备的结构。

4.2.1 USB设备驱动程序层次结构

WDM重新定义了驱动程序的分层,以适应即插即用,各个不同层次的驱动程序构成了设备的驱动程序栈。如图4-2所示。WDM驱动模型中每个硬件至少有两个驱动程序。一个是功能驱动程序,即通常硬件设备的驱动程序,负责初始化1/O操作,处理UO操作完成时带来的中断,提供设备适合的控制方式。另一个是总线驱动程序,负责管理硬件与计算机的连接。同时还存在各种类型的过滤驱动程序,它是一个中间层的驱动程序,可以截获并处理经过它的I/O请求,变更标准设备驱动程序的行为,但不重写总线驱动程序或类驱动程序,仅修改感兴趣的动作,过滤驱动程序是相对于一个特定的驱动程序层而存在并帮其完成一些辅助功能。

低层设备过滤驱动程序 总线过滤驱动程序 过滤驱动程序 低层类过滤驱动程序 上层类过滤驱动程序 上层设备过滤驱动程序 功能驱动程序

图4-2 设备驱动程序栈

4.2.2设备对象

WDM中驱动程序和设备对象的层次关系如图4-3所示。图的左侧是一个设备对象的堆栈,设备对象是系统创建的一种数据结构,软件通过它来管理硬件。对一个物理上的硬件来说,可以对应很多的设备对象。堆栈中最底层的设备对象称为物理设备对象(PDO, physical device object),堆栈中间底称为功能设备对象(FDO,functional device object),在FDO的上下存在一些过滤设备对象的驱动程序,在FDO之上的称之为上层过滤设备对象,在FDO之下,PDO之上的称之为下层过滤设备对象。功能驱动程序是驱动程序完成控制设备操作功能最主要的部分,这个层位于总线驱动程序上面。驱动程序在功能驱动程序层创建一个功能设备对象,放在驱动程序设备栈中,在这个功能驱动程序分层之上,还可能会有多个功能驱动程序分层,以完成相应任务。

总线驱动程序控制对总线上所有设备的访问。如果想要访问USB设备,必须使用USB总线驱动程序。总线驱动程序负责枚举它的总线,即发现总线上的全部设备和检测设备何时被添加和删除。总线创建一个PDO代表它发现的设备。一些总线驱动程序简单控制对总线的访问,一旦有了控制权,就可以对总线做任何想做的事情。

FDO FDO FDO FDO 上层过滤驱动程序 功能设备驱动程序 下层过滤驱动程序 总线驱动程序 IRP 图4-3 WDM中设备对象和驱动程序层次结构

在其它情况下,总线驱动程序为我们处理总线上的所有事务。功能驱动程序知道如何控制设备的主要功能,它分层在总线驱动程序的上面。功能设备驱动程序创建一个FDO,放在设备栈中。在USB情况下,功能驱动程序必须使用USB类驱动程序访问它的设备。但在其余情况下,一旦总线驱动程序接管,功能驱动程序可以直接访问硬件。各种类型的过滤驱动程序可以插在设备栈内。对总线上的所有设备,下层过滤驱动程序被加在总线驱动程序之上;对一个特定类的所有功能驱动程序,上层过滤驱动程序被添加在功能驱动程序之上。任何用户请求总是从设备栈的顶部进入的。假设用户程序标识了一个它想访问的功能设备,UO管理器保证它的全部请求被发送到设备栈的顶部,这样任何高层的过滤驱动程序或功能驱动程序就得到首先处理这些请求的机会。

4.2.3标准总线驱动程序和类驱动程序

Windows系统提供了许多标准总线驱动程序和类驱动程序,作为系统中总线驱动程序和功能驱动程序的通用驱动程序。通常,标准驱动程序和支持实际硬件设备接口的另一个驱动程序或另一类驱动程序一起使用来操作实际硬件设备。这些辅助的另一个驱动程序或另一类驱动程序通常称为小类驱动程序或者是小端口驱动程序。系统提供的标准总线驱动程序和类驱动程序,有以下几类:

1. 人工输入设备(HID)类驱动程序。HID类驱动程序提供了输入设备一个抽象视图,实际输入硬件可以使用不同的方法和系统链接,这些具体链接方法通过HID类驱动程序实现。 2. USB总线驱动程序。USB总线驱动程序可以枚举和控制低速USB总线,USB客户驱动程序使用各种IOCTL通过USB类驱动程序来访问它们的硬件设备。

3. 静态图像体系结构。确切地说,静态图像体系结构不是驰动程序,而是使用小驱动程序获得扫描仪和静态图像的一种手段,STI目前支持SCSI设备、串行设备、并行设备和USB设备。

4. 流类驱动程序。这类驱动程序提供了访问高带宽、时间关键的视频音频数据基础,通过流类小驱动程序的使用,可以接到实际硬件。

5. 端口类驱动程序。使用端口类,可以很容易地将硬件不同部分表示成不同的子设备,音频端口类驱动程序使COM标志这些子设备,子设备和小端口驱动程序用于控制实际硬件。

6. IEEE1394总线驱动程序。IEEE1394总线驱动程序枚举和控制IEEF1394的高速总线,这个总线驱动程序使用端口驱动程序访问IEEE1394控制电路。

7. SCSI类驰动程序和CDROM/DVD类驱动程序。SCSI和CDROM/DVD驱动程序用于访问硬盘、软盘、光盘和DVD.

8. ACPI总线驱动程序。ACPI是高级配置和电源接口总线驱动程序,它和PCACPI BIOS打交道,枚举系统中的设备并控制这些设备的功率使用。

9. PCI总线驱动程序。PCI是外设组件互联总线驱动程序,用来枚举和配置PCI总线上的设备。

10. PnPISA总线驱动程序。PnPISA总线驱动程序,对可以使用即插即用配置的工业标准体系结构ISA设备作枚举和配置。

4.2.4 WDM驱动程序的结构

WDM驱动程序采用入口点模型,驱动程序由驱动程序入口点和一系列分发例程组成。在NT驱动程序中入口点函数为DriverEntry(),此函数完成驱动程序的一切初始化驱动工作和设备所需要的资源信息,为每个查找到的设备创建设备对象,通过驱动程序对象输出分派函数入口点。而在WDM驱动程序模型中,在其入口点方面,主要增加了两个重要的入口点:一个是AddDeviceU入口点,指向这个入口点的指针存放在DriverObject->

DriverExtension->AddDevice()里。另一个是处理即插即用IRP_MJ_PNP输入/输出请求包的分派入口点,指向这个分派入口点的指针应该存放在DriverObject->

MajorFunction[IRP_MJ_PNP]里。在WDM驱动程序中,以前在NT驱动程序入口点函数DriverEntry()中完成的功能,被分为三个不同的部分,由不同的入口点来完成。①同初始化驱动程序自身相关的工作。这些工作,如输出入口点等仍然在DriverEntry()中完成。②同查找驱动程序支持的设备相关的工作。这些工作包括创建设备对象等,在驱动程序入口点AddDevice()中执行。③同设备资源和设备初始化相关的工作。同设备硬件自身相关的工作,实际上要等到调用IRP_MJ_PNP输入/输出请求包和微函数IRP_MJ_START_DEVICE时,才会进行处理。对于这部分工作,只是将其简单地连接到中断服务例程中去处理。

WDM驱动程序按其功能可分为以下几个模块:(1)初始化驱动程序自己。(2)创建和删除设备。(3)处理Windows32打开和关闭文件句柄的请求。(4)处理Windows32输入/输出请求。(5)串行化对设备的访问。(6)访问硬件。(7)调用其它驱动程序。(8)取消I/O请求。(9)超时I/O请求。(10)处理一个可热拔插的设备被加入或者删除的情况。(11)使用电源管理请求。(12)使用WMI和NT事件向系统管理员报告。

4.2.5驱动程序装入的实现

在刚开始PnP就有一个对“根总线”的内嵌“驱动程序”,这个“根总线”实际并不存在,它在概念上包括所有的连到计算机上但不能通过电子的方式表明自己存在的硬件一包括最初的硬件总线(如PCI总线)。根总线驱动程序从系统的安装过程中取得信息,系统安全

程序通过检测硬件并询问用户相应的信息,从而得到关于这个计算机的信息。因此,根总线驱动程序有足够的信息可以创建主总线的PDO。

主总线的功能驱动程序这时可以枚举它们自己的硬件。如PCI总线,它对每一个连到总线上的设备保留一个特殊的配置空间,这个配置空间包括了对设备的描述和对资源的需求。当总线驱动程序枚举硬件时,它好像是一个普通的功能驱动程序,一旦检测到一个硬件,驱动程序就转换了角色:它变成了一个总线驱动程序并为这个硬件创建了一个PDO, PnP管理器为这个设备的PDO装入驱动程序。也可能功能设备驱动程序枚举到多个硬件,这时上述过程递归调用。此时总线设备驱动程序堆栈分支成其它的设备驱动程序堆栈,这些堆栈对应于连接到这个总线上的硬件。

Windows使用驱动程序枚举可用的硬件,枚举是指查找并列出任何可用的设备,然后使用仲裁器调整所有的资源请求。对每个设备查找合适的驱动程序,然后告诉这些驱动程序使用哪些资源,并运行这些驱动程序。例如,枚举从最低层开始,PC


USB数据采集系统论文(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2015年考研公共课必看书籍及时间规划一览

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: