ISA数据采集卡的WDM驱动程序实现
发布时间:2007/8/29 0:00:00 访问次数:573
摘要:ISA设计在WINOWS新的驱动程序模型WDM(WINDOWS DRIVER MODEL)中没有获得很好的支持,使用WDM实现需要一些特殊处理。主要讨论老式ISA设备的WDM驱动程序的设计与实现。
关键词:Windows驱动程序模型(WDM) 工业标准结构(ISA) 数据采集
WDM作为微软为WINDOWS 2000及以后版本准备的新驱动模型,它可以在WINDOWS 98及以后的操作系统上共享。这种具有跨平台性的设备驱动模型可以大大简化驱动程序的开发工作。WDM支持PNP(即插即用),为用户的PNP设备驱动完成了大量的底层工作。这也使得WDM对各种老设备,特别是那些不具有即插即用特性硬件的支持明显的不足。在科研和工控中,最常用的数据采集卡通常都是基于PC总线的不能为PNP提供硬件支持的ISA设备。为这类硬件编写非WDM驱动程序只能局部支持PNP特性,而且需要做大量额外的工作如:必须检测硬件,为硬件创建设备对象(用于代表硬件),配置并初始化硬件使其正常工作,这些工作非常复杂。利用WDM可以避免这些麻烦。
1 WDM的结构
WDM实际上是一个编写驱动程序的规范。其驱动程序结构的特点和WINDOWS程序设计的消息驱动机制很相像,采用IRP驱动机制。WINDOWS 98和WINDOWS 2000处理IRP的方式一样,本质却完全不同。
WINDOWS 2000主要由I/O管理器来管理驱动程序的行为,管理的方法就是给驱动程序发送各种IRP,同时I/O管理器还负责传递这个设备的用户请求给驱动程序。驱动程序不能直接操作硬件设备,而是通过一个叫做HAL(硬件设备抽象层)的层来访问底层设备。HAL完成对各种硬件差异的屏蔽。Windows 98内核与Windows 2000内核有很大的差别。Windows 98操作系统的内核称为虚拟机管理器(VMM)。虚拟设备驱动程序(VxD)则使设备虚拟化,从而与虚拟机管理器形成虚拟机。Windows 9x的内核不支持IRP,它通过模拟的方法支持WDM和IRP。Windows 98包含了NTKERN.VXD(VMM32.VXD)系统模块,该模块含有大量Windows NT内核支持函数的Windows实现。NTKERN.VXD使用与Windows 2000相同的方式创建IRP并发送IRP到WDM驱动程序。也就是说,Windows 98是使用VxD技术实现WDM的。尽管Windows 98和Windows 2000的内核完全不同,但是WDM的结构在Windows 98和2000下可以认为是完全相同的。
WDM驱动程序面对的主要内容是一系列内核驱动对象。这些对象包括驱动对象、设备对象,还有一系列的资源抽象对象如中断对象、适配器对象(处理DMA操作)、内核模式派发器对象、控制器对象、推迟过程对象、定时器对象、设备队列对象、回调对象等。其中驱动对象由I/O管理器负责创建和管理。设备对象代表用户需要操作的物理或者是逻辑设备。设备对象负责管理自己设备所需要的各种资源对象。这些资源对象有的代表真正的物理设备如中断对象、适配器对象、定时器对象;有的对象则是逻辑对象,它们是操作系统实现自己的特性所必需的,如推迟过程调用就是与操作系统的抢占式多任务的实现有关。WDM驱动程序利用IRP和这些对象完成硬件设备的抽象化,并对应用程序提供统一操作接口。这就是所谓的WDM规范。
WDM驱动程序的结构很简单。它的主体是一个入口函数DriverEntry。DriverEntry的第一个参数是指针,指向一个刚被初始化的驱动程序对象,该对象代表驱动程序。WDM驱动程序的DriverEntry例程完成这个对象的初始化并返回。WDM驱动程序的DriverEntry例程的主要工作是把各种函数指针填入驱动程序对象。这些指针对操作系统指明了驱动程序容器中各种子例程的位置。它包括下面这些指针成员:
·DriverUnload指向驱动程序的清除例程。I/O管理器会在卸载驱动程序前调用该例程。通常WDM驱动程序的DriverEntry例程一般不分配任何资源,所以DriverUnload例程也没有什么清除工作要做。
摘要:ISA设计在WINOWS新的驱动程序模型WDM(WINDOWS DRIVER MODEL)中没有获得很好的支持,使用WDM实现需要一些特殊处理。主要讨论老式ISA设备的WDM驱动程序的设计与实现。
关键词:Windows驱动程序模型(WDM) 工业标准结构(ISA) 数据采集
WDM作为微软为WINDOWS 2000及以后版本准备的新驱动模型,它可以在WINDOWS 98及以后的操作系统上共享。这种具有跨平台性的设备驱动模型可以大大简化驱动程序的开发工作。WDM支持PNP(即插即用),为用户的PNP设备驱动完成了大量的底层工作。这也使得WDM对各种老设备,特别是那些不具有即插即用特性硬件的支持明显的不足。在科研和工控中,最常用的数据采集卡通常都是基于PC总线的不能为PNP提供硬件支持的ISA设备。为这类硬件编写非WDM驱动程序只能局部支持PNP特性,而且需要做大量额外的工作如:必须检测硬件,为硬件创建设备对象(用于代表硬件),配置并初始化硬件使其正常工作,这些工作非常复杂。利用WDM可以避免这些麻烦。
1 WDM的结构
WDM实际上是一个编写驱动程序的规范。其驱动程序结构的特点和WINDOWS程序设计的消息驱动机制很相像,采用IRP驱动机制。WINDOWS 98和WINDOWS 2000处理IRP的方式一样,本质却完全不同。
WINDOWS 2000主要由I/O管理器来管理驱动程序的行为,管理的方法就是给驱动程序发送各种IRP,同时I/O管理器还负责传递这个设备的用户请求给驱动程序。驱动程序不能直接操作硬件设备,而是通过一个叫做HAL(硬件设备抽象层)的层来访问底层设备。HAL完成对各种硬件差异的屏蔽。Windows 98内核与Windows 2000内核有很大的差别。Windows 98操作系统的内核称为虚拟机管理器(VMM)。虚拟设备驱动程序(VxD)则使设备虚拟化,从而与虚拟机管理器形成虚拟机。Windows 9x的内核不支持IRP,它通过模拟的方法支持WDM和IRP。Windows 98包含了NTKERN.VXD(VMM32.VXD)系统模块,该模块含有大量Windows NT内核支持函数的Windows实现。NTKERN.VXD使用与Windows 2000相同的方式创建IRP并发送IRP到WDM驱动程序。也就是说,Windows 98是使用VxD技术实现WDM的。尽管Windows 98和Windows 2000的内核完全不同,但是WDM的结构在Windows 98和2000下可以认为是完全相同的。
WDM驱动程序面对的主要内容是一系列内核驱动对象。这些对象包括驱动对象、设备对象,还有一系列的资源抽象对象如中断对象、适配器对象(处理DMA操作)、内核模式派发器对象、控制器对象、推迟过程对象、定时器对象、设备队列对象、回调对象等。其中驱动对象由I/O管理器负责创建和管理。设备对象代表用户需要操作的物理或者是逻辑设备。设备对象负责管理自己设备所需要的各种资源对象。这些资源对象有的代表真正的物理设备如中断对象、适配器对象、定时器对象;有的对象则是逻辑对象,它们是操作系统实现自己的特性所必需的,如推迟过程调用就是与操作系统的抢占式多任务的实现有关。WDM驱动程序利用IRP和这些对象完成硬件设备的抽象化,并对应用程序提供统一操作接口。这就是所谓的WDM规范。
WDM驱动程序的结构很简单。它的主体是一个入口函数DriverEntry。DriverEntry的第一个参数是指针,指向一个刚被初始化的驱动程序对象,该对象代表驱动程序。WDM驱动程序的DriverEntry例程完成这个对象的初始化并返回。WDM驱动程序的DriverEntry例程的主要工作是把各种函数指针填入驱动程序对象。这些指针对操作系统指明了驱动程序容器中各种子例程的位置。它包括下面这些指针成员:
·DriverUnload指向驱动程序的清除例程。I/O管理器会在卸载驱动程序前调用该例程。通常WDM驱动程序的DriverEntry例程一般不分配任何资源,所以DriverUnload例程也没有什么清除工作要做。
上一篇:中国国际光电应用博览会圆满落幕
上一篇:高精度参考电压发生器LT1019