如何为ISA设备编写WDM驱动程序.doc
《如何为ISA设备编写WDM驱动程序.doc》由会员分享,可在线阅读,更多相关《如何为ISA设备编写WDM驱动程序.doc(9页珍藏版)》请在三一文库上搜索。
1、如何为ISA设备编写WDM驱动程序WDM(Windows Driver Mode1)是Microsoft公司全新的Windows驱动程序模式,支持即插即用(PNP)、电源管理和WMI技术,它的运行平台是Windows 982000XP2003操作系统。这种具有跨平台性的设备驱动模型可以大大简化驱动程序的开发工作,为用户的PNP设备驱动完成了大量的底层工作。这也使得WDM对各种老设备,特别是那些不具有即插即用特性硬件的支持明显的不足。在科研和工控中,最常用的数据采集卡通常都是基于PC总线的不能为PNP提供硬件支持的ISA设备。为这类硬件编写非WDM驱动程序只能局部支持PNP特性,而且需要做大量额
2、外的工作如:必须检测硬件,为硬件创建设备对象(用于代表硬件),配置并初始化硬件使其正常工作,这些工作非常复杂。利用WDM可以大大简化这些工作。1 WDM的结构WDM实际上是一个编写驱动程序的规范。其驱动程序结构的特点和WINDOWS程序设计的消息驱动机制很相像,采用IRP驱动机制。WINDOWS 98和WINDOWS 2000处理IRP的方式一样,本质却完全不同。Windows2000的内存管理采用了虚拟内存的概念,系统表现为具有一个比物理内存大得多的虚拟内存空间。每个进程都被赋予它自己的虚拟地址空间,这个地址空间划分成固定大小的页(x86、32位处理器的页大小为4KB),一个页可以驻留在物理
3、内存(非分页内存),或者被交换到硬盘上(分页内存)。当进程中的一个线程正在运行时,该线程可以访问只属于它的进程的内存,属于所有其他进程的内存则隐藏着,并且不能被正在运行的线程访问。每个进程有独立的内存空间,不会被其他程序访问,保护了数据的完整性。这样,有一部分内存实际上不是在物理内存中,而是在硬盘上。当访问并不存在于实际物理内存的地址时,内存管理器引发DISPATCH_ LEVEL级别的页故障中断,调用硬盘驱动程序把故障页读入内存。所以,在DISPATCH LEVEL级别上运行代码时,访问非分页内存是一个基本原则,否则进程将被阻塞,因为这个页故障中断被屏蔽了。这时,在当前的Windows系统中
4、,就会发生蓝屏。虚拟内存方便了应用程序l的开发,却给ISA设备在分配资源时带来一些复杂的问题。因为x86处理器的内存页大小为4KB,所以在为ISA设备进行内存映射时每段就不要超过4KB。否则当访问超出4KB地内存时就会出现上面所说的蓝屏。WDM驱动程序面对的主要内容是一系列内核驱动对象。这些对象包括驱动对象、设备对象,还有一系列的资源抽象对象如中断对象、适配器对象(处理DMA操作)、内核模式派发器对象、控制器对象、推迟过程对象、定时器对象、设备队列对象、回调对象等。其中驱动对象由I/O管理器负责创建和管理。WDM驱动程序利用IRP和这些对象完成硬件设备的抽象化,并对应用程序提供统一操作接口。这
5、就是所谓的WDM规范。WDM驱动程序的结构很简单。它的主体是一个入口函数DriverEntry。DriverEntry的第一个参数是指针,指向一个刚被初始化的驱动程序对象,该对象代表驱动程序。WDM驱动程序的DriverEntry例程完成这个对象的初始化并返回。WDM驱动程序的DriverEntry例程的主要工作是把各种函数指针填入驱动程序对象。这些指针对操作系统指明了驱动程序容器中各种子例程的位置。它包括下面这些指针成员:DriverUnload指向驱动程序的清除例程。I/O管理器会在卸载驱动程序前调用该例程。通常WDM驱动程序的DriverEntry例程一般不分配任何资源,所以Driver
6、Unload例程也没有什么清除工作要做。DriverStartIo,如果驱动程序使用标准的串行IRP,则必须使用这个函数,使它指向驱动程序的StarIo例程。MajorFunction是一个指针数组,它主要处理各种用户的I/O请求IRP。默认情总况下,用户的所有I/O请求都会由I/O管理器返回失败。驱动程序为要处理的IRP指定相应的派遣函数。2 为ISA设备分配资源虽然WDM驱动程序可以简化很多工作,但是给ISA设备编写WDM驱动程序也有困难。这个困难是ISA设备所需资源的分配问题。根据PNP的规范,支持PNP的设备如PCI总线设备有相应的寄存器标识自己和自己可以接受的资源,如中断、端口范围、
7、内存范围等,并且有相应的逻辑支持配置资源。这使得操作系统启动过程中可以动态地规划调整各个设备的资源而不需要用户的干预。为了兼容非PNP设备,INF文件支持几个命令为设备分配资源。这些信息初提供给NPN管理器,并且被PNP管理器用来与系统其它部分协商以完成非PNP设备的自动资源分配。LOGCONFIG为设备制定一个可选的资源设定。还有相应的IRQCONFIG、IOCONFIG、DMACONFIG、MEMCONFIG子命令,它们为设备指定具体的可选资源。语法如下:ConfigPririty=DMAConfig=IOConfig=IRQConfig=MemConfig=其中CONFIGPRIOITY
8、命令指定这个LOGCONFIG项的优先级。其余子命令表示设备选用的硬件资源。下面是一个例子:CX2590.Install;其它命令LogConfig=CX2590_DMA;指定配置项的名称CX2590_DMA;配置项的名称ConfigPriority=NORMAL;配置的优先级IOConfig=4300-3ff%3ff(3ff:);指定IO范围IRQConfig=4,5,9,10,11 ;指定可选的中断DMAConfig=0,1,2,3 ;指定可选的DMA在INF文件中加入LOGCONFIG命令可以解决ISA总线设备资源的自动分配问题,就可以为ISA总线设备编写WDM驱动程序。3 一个ISA设
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何 ISA 设备 编写 WDM 驱动程序
链接地址:https://www.31doc.com/p-3421269.html