首页 | 手机版 | 三国演义 | 三国志 | 史将 | 背景 | 藏书阁
首页 -> 精彩文章 -> windows设备驱动程序开发

windows设备驱动程序开发

作者supdriver 标签windows 阅读次数:144
第1章引 言 本书介绍如何编写某些类型的windows设备驱动程序,主要描述windows 98和windows 2000的windows驱动程序模型(WDM)。另外,还将介绍也可以在W1ndow s NT 3.51和NT 4中运行的设备驱动程序,称为“NT式”驱动程序。 设备驱动程序提供连接到计算机的硬件的软件接口,它是操作系统的—个信任部分。用 户应用程序以一种规范的方式访问硬件,而不必考虑必须如何控制硬件。例如,磁盘驱动程序可以隐藏数据就必须以512字节的块写这样的事实。 驱动程序是一个软件.在装入后成为操作系统内核的一部分,它使—个或多个设备可用于用户态程序员.每个设备代表一个物理的或逻辑的硬件。例如一个物理硬盘可以看成两个逻辑盘C:和D:。 在wIndows中.驱动程序总是使设备看起来像是一个文件,可以打开设备的一个句柄. 然后应用程序可以在设备句柄最后关闭之前向驱动程序发出读写请求。 显然.有许多基本上是一样的硬件,因为它们共享一个总线或完成类似的任务。Mcrosoft 提供了几个通用的驱动程序,执行这些常见任务,设备驱动程序可以使用这些标准驱动程序的功能。这个方法使公共总线的共享更容易,且更容易写出新的驱动程序。 所以,写新驱动程序的任务常常从标识可以使用哪些通用驱动程序开始。一个驱动程序 栈分阶段处理用户的请求,这些驱动程序一个个相互叠加在一起。低层的总线驱动程序可以 用于处理与硬件的所有基本通信,中间的类驱动程序对整个一类驱动程序提供共同的设施。 在windows 98和wlndows 2000中.设备驱动程序必须根据wIndows驱动程序模型(WDM)设计,这个模型将在下面介绍。WDM基于在windows NT 4和NT 351中使用的设备驱动程序模型。 1.1windows驱动程序模型 windows驱动程序模型有两个不同的但同样重要的方面。首先,核心模型描述设备驱动 程序的标准结构;其次,Microsoft为常见类型的设备提供一系列的总线驱动程序和类驱动程序。 核心wDM模型描述设备驱动程序如何安装和启动,以及如何为用户请求服务和与硬件打交道。wDM设备驱动程序必须适应于即插即用(PnP)系统,允许用户插入可以在软件中配置的设备。 Microsoft提供了一系列的系统驱动程序,它们具有为许多标准类型设备服务所需的所有基本功能。第一种系统驱动程序支持不同类型的总线,如通用串行总线(usB)、IEEE]394 (Firewire)和音频端口设备。其他的类驱动程序实现标准的windows功能,如人工输入设备 (HID)和内核流功能。最后,静态图像体系结构(sTI)提供“个处理静态图像、扫描仪等的框 架。 这些系统类驱动程序使一些类型的设备驱动程序的设计变得容易得多了。例如.UsB系统驱动程序处理usD总线上的所有低层通信,这样其他驱动程序有了一个定义好的接口可以使用、这使得向usB总线发出请求是相当直接的。 • 源代码兼容与二进制兼容 —开始,Microsort宜称wDM驱动程序会是windows 98和W1ndows 2000x86之间二进制兼容的,且与window s 2000 A1Pha平台源代码兼容。但是,现在看来并不能保证二进制兼容,尽管DDK在这方面并不清楚。 笔者为了安全起见,仅安装为正确的操作系统构造的驱动程序,也就是说在为w,ndows 98构造驱动程序时、使用W1ndows 98驱动程序开发工具包(DDK),而对Wjndows 2000使用wlndow52000 DDK。 如果使用仅在Windiws 2000中出现的一些wDM功能,则就不能达到源代码兼容。例如、window s 2000USB系统驱动程序支持一些W1ndow s 98驱动程序不可用的功能。 下面通过开发一个简单的设备驱动程序.旨先讨论wDM的核心功能。然后,讨论必须使用访问内存和处理中断这样的硬件资源的驱动程序。最后,介绍usB和HID系统驱动程序。使用内核例程IoIsWdmversionAvailabIe确定要求的wDM版本是否可用。DDK头文件定义两个常量wDM_MAJORVERSION和WDM_MINORVERSION,对于Windows 98.这些常量是1和0;而对Windows 2000,它们是1和0x10。 1.1.1 WDM与NT式驱动程序 图l—l粗略表尔了WDM和NT式驱动程序之间的差别,本书后面的内容将说明这个图中提到的所有功能。 这两种驱动程序之间的重叠是相当多的。实际写wDM和NT式驱动程序基本上是相 同的。驱动程序代码中的主要不同是如何创建设备。 在wDM驱动程序中,即插即用(PnP)管理器告知何时间系统添加一个设备,或者从系统删除设备。PnP管理器使用安装INF文件查找新设备的正确驱动程序;相反,NT式驱动程序必须发现它自己的设备,通常在它的初始化例程中。NT式驱动程序通常使用专门的安装程序安装。 新的总线驱动程序和类驱动程序仅可用于wDM设备驱动程序,新的WDM和NT式驱动程序应支持电源管理和wMI特性。 1.1.2可用的驱动程序 如果从头开始写—个驱动程序,似乎大多数的代码都与访问设备无关,在执行一些实际的输入输出(I/o)之前、有许多“基础构架”必须设置。本书使用一些实际有用的驱动程序作为例子,会帮助读者尽快入门。一些驱动程序是可以直接使用的,而其他驱动程序形成读者自己的驱动程序的基础。 一个虚拟设备驱动程序用于解释核心的wDM功能。虚拟设备不使用任何实际的硬件。3个驱动程序Wdml、wdm2和wdm3逐渐实现更多的功能。一开始、它们提供一个共享内存缓冲区,使得它们形成其他有用驱动程序的基础。实际上,wdm2驱动程序就被用作本书其他几个驱动程序的基础,包括使用系统驱动程序的驱动程序。 在本书中DebugPrint软件用于提供驱动程序的跟踪调试输出。DebugPrint驱动程序将在第4章中介绍。读者可以在自己的设备驱动程序中使用DebugPrint。 wdmlo和PHDIo是通用驱动程序,可以马上用于提供对简单硬件设备的访问,一个控制Win32程序可以使用一组简单但功能很强的命令与硬件对话。这些驱动程序支持中断驱动的I/o。应用程序例子说明这些通用驱动程序如何用于访问并行端口。 USBKbd和HidKbd驱动程序都访问连接到USB总线的键盘,这些驱动程序说明使用usB和HID类驱动程序要求的技术。最后、win 32应用程序HidKbduser说明用户态应用程序如何发现和访问HID设备。


浙ICP备06020153号-1