页面加载中,请稍候
来源:电子技术应用发布时间:2018-08-30314浏览
询问 AI摘要: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例程也没有什么清除工作要做。
·DriverExtension->AddDevice指向驱动程序的AddDevice函数。AddDevice函数是WDM驱动程序的一个特殊函数,PNP管理器为每个设备实例调用该函数。它创建一个设备对象并把它连接到该驱动程序的设备堆栈中。在这个函数里,设备对象被创建,设备需要的中断、DMA等资源被挂接到这个设备对象上,相应地处理函数,如中断服务例程等也被指定。
·DriverStartIo,如果驱动程序使用标准的串行IRP,则必须使用这个函数,使它指向驱动程序的StarIo例程。
·MajorFunction是一个指针数组,它主要处理各种用户的I/O请求IRP。默认情总况下,用户的所有I/O请求都会由I/O管理器返回失败。驱动程序为要处理的IRP指定相应的派遣函数。
此外,还有一些重要的例程如用于处理中断操作中断服务例程,为了提高系统中断处理效率的中断服务推迟调用例程等。
驱动程序的其余部分就是前面所指定的那些例程的实现。
2 为ISA设备分配资源
虽然WDM驱动程序可以简化很多工作,但是给ISA设备编写WDM驱动程序也有困难。这个困难是ISA设备所需资源的分配问题。根据PNP的规范,支持PNP的设备如PCI总线设备有相应的寄存器标识自己和自己可以接受的资源,如中断、端口范围、内存范围等,并且有相应的逻辑支持配置资源。这使得操作系统启动过程中可以动态地规划调整各个设备的资源而不需要用户的干预。为了使ISA设备具有这种PNP的特性, 可以通过PNP管理器和INF文件完成ISA设备的自动资源分配。PNP管理器(PNP AMNAGER)依赖INF文件完成PNP管理。INF文件为设备、设备驱动程序、操作系统的安装过程提供信息(包括PNP MANAGER)。为了兼容非PNP设备,INF文件支持几个命令为设备分配资源。这些信息初提供给NPN管理器,并且被PNP管理器用来与系统其它部分协商以完成非PNP设备的自动资源分配。LOGCONFIG为设备制定一个可选的资源设定。还有相应的IRQCONFIG、IOCONFIG、DMACONFIG、MEMCONFIG子命令,它们为设备指定具体的可选资源。语法如下:
新闻来源:电子技术应用,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。
暂无评论哦,快来评论一下吧!

2026-07-22

2026-07-22
2026-07-21