微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 高速PCI信号采集卡设计与实现综合实例之:PCI卡的驱动程序设计

高速PCI信号采集卡设计与实现综合实例之:PCI卡的驱动程序设计

时间:06-04 来源:互联网 点击:

13.4PCI卡的驱动程序设计

13.4.1WDM驱动程序模型

设计完成的信号采集设备在插入计算机后,在对其进行控制之前,需要编写基于操作系统平台上的驱动程序。设备驱动程序是一个包含了许多操作系统可调用例程的容器,这些例程可以使硬件设备执行相应的动作,它是硬件与上层软件之间沟通的桥梁。

在本案例中,我们针对最常使用的操作系统Windows98/2000/XP系统,使用了WDM(WindowsDriverModel)驱动程序模型进行程序开发。

WDM模型是从WinNT3.51和WinNT4的内核模式设备驱动程序发展而来的。WDM主要的变化是增加了对即插即用、电源管理、WindowsManagementInterface(WMI)、设备接口的支持。WDM模型的主要目标是实现能够跨平台使用、更安全、更灵活、编制更简单的Windows设备驱动程序。

WDM采用了“基于对象”的技术,建立了一个分层的驱动程序结构。通过WDM模型的引入,可以减轻设备驱动程序的开发难度和周期,逐渐规范设备驱动程序的开发,应该说,WDM是当前基于Windows平台的设备驱动程序的主流。

WDM模型主要采用分层的方法,模仿面向对象的技术,先进行逻辑上的“分层”,然后将标准的实现和低层细节“封装”起来,形成“基类”,客户程序通过“继承”的方式来扩展“基类”的功能,完成所需要的实现。

13.4.2设备和驱动程序的层次结构

在WDM模型中,每个硬件设备至少有两个驱动程序:一个功能驱动程序(functiondriver)和一个总线驱动程序(busdriver)。

如图13.14所示为WDM中设备对象和驱动程序的层次结构。

图13.14WDM中设备对象和驱动程序的层次结构

1.过滤驱动程序

过滤驱动程序是一个可选项,当一个用户需要改变或新添一些功能到一个设备、一类设备或一种总线时,就可以编写一个过滤驱动程序。在设备栈里,过滤驱动程序安装在一个或几个设备驱动程序的上面或下面。

过滤驱动程序拦截对具体设备、类设备、总线的请求,做相应的处理,以改变设备的行为或添加新的功能。但过滤驱动程序只处理那些它所关心的I/O请求,对于其他的请求可以交给其他的驱动程序来处理,这样可以非常灵活地改变设备的行为。

2.功能驱动程序

功能驱动程序是物理设备的主要驱动程序,它实现设备的具体功能,一般由设备的生产商来编写。功能驱动程序的主要功能是:提供对设备的操作接口、操作对设备的读写、管理设备的电源策略等。

功能驱动程序由类驱动程序和微型驱动程序组成。类驱动程序实现了某一类设备的常用操作,驱动程序的开发者可以只编写非常小的微型驱动程序,去处理具体设备特殊的操作,而对于其他大量的常规操作,可以调用该类的类驱动程序,这也是WDM驱动程序的优点之一。

微软公司提供的类驱动程序处理常用的系统任务,比如,即插即用功能和电源管理。类驱动程序保证了操作系统在处理类似的任务时的一致性,从而提高了系统的稳定性。

设备生产商提供微型驱动程序,以实现自己设备的特殊功能,同时调用合适的类驱动程序完成其他的通用工作。将大量的标准操作的代码通过各种类驱动程序来实现,并集成在操作系统中,这样的方式可以有效地减少具体设备的微型驱动程序的大小,也就减小了程序出错的可能。

如果某一类设备存在着工业标准,微软公司就会提供一个该类设备的WDM类驱动程序。这个类驱动程序实现了该类设备所有必须的任务,但不实现任何具体设备所特有的东西。

3.总线驱动程序

总线驱动程序为实际的I/O总线服务。在WDM的定义中,总线是用来连接其他的物理的、逻辑的、虚拟的设备。总线包括传统的总线SCSI和PCI,也包括并口、串口以及i8042端口。微软公司已经为Windows操作系统提供了总线驱动程序。总线驱动程序已经包含在操作系统里了,用户不必安装。

一个总线驱动程序负责以下的工作:枚举总线上的设备,向操作系统报告总线上的动态事件,响应即插即用和电源管理的I/O请求,提供总线的多路存取,管理总线上的设备等。

13.4.3PCI设备驱动程序例程

PCI设备的WDM驱动程序一般需要使用WindowsDDK(DriversDevelopKits)及C语言进行开发。下面介绍一些PCI设备最常见的例程,这些例程将告诉我们如何对PCI设备进行控制。

1.DriverEntry例程

每个WDM驱动程序,不管它的用途是什么,都要对外界显示一个名字为DriverEntry的例程。该例程初始化各种驱动程序数据结构,并为所有其他驱动程序组件准备好执行环境。主要的工作是在传递的DriverObject中存储一系列的回调例程指针。DRIVER_OBJECT结构有操作系统用于存储与驱动程序有关的任何信

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top