欢迎来到天天文库
浏览记录
ID:20708389
大小:49.50 KB
页数:4页
时间:2018-10-15
《2000xp下io设备驱动程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Windows2000/XP下I/O设备驱动程序的设计李建戴胜华(北方交通大学电子工程学院自动控制教研室,北京100044)摘要:本文介绍了Windows2000/XP下WDM驱动程序的基本设计方法;阐述了I/O设备驱动程序的基本构成,硬件资源的配置和访问的方法;提出了设备驱动程序在实际应用中的层次化结构。关键词:WDM;设备驱动程序;I/O端口;DLLDesignofI/ODeviceDriverunderWindows2000/XPAbstract:Thispaperintroducetheprimarydes
2、igningmethodsofWDMdriverunderWindows2000/XP.ItdescribethebasicstructureofanI/Odevicedriver,andthemethodofconfigingandaccessingthehardwareresources.Italsoputforwardthelayeredstructureofdevicedriverintherealimplement.Keyword:WDM;devicedriver;I/Oport;DLL1.引言在开发微机
3、应用系统的过程中,尤其是在控制系统中,通常会遇到在Windows环境下对具有特定功能的硬件设备(如数据采集卡),进行直接访问和控制的问题。因为在Windows操作系统下,CPU运行于保护模式,并且统一管理硬件资源,执行于用户态的应用程序不能直接访问硬件,而是通过调用执行于核心态的设备驱动程序提供的各种服务间接地对硬件资源进行访问,这一机制确保了系统的安全。所以,以前在Dos和Windows98下可以很容易完成的I/O端口读写,在Windows2000/XP下必须编写驱动程序,才能够实现。由于各种操作系统结构的不同影
4、响了设备驱动程序的兼容性,为此微软公司在1997提出了一种全新的Windows驱动程序模型(WDM),并在推出Windows2000操作系统时正式引入了这一技术。WDM以WindowsNT4.0的内部结构为基础,同时引入了Windows9x的即插即用特性,为存在于Windows9x和Windows2000操作系统中的设备驱动程序提供了一个统一的参考框架[1]。在Windows98/Me,Windows2000和更高版本的操作系统上运行的设备驱动必须是WDM驱动[4]。2.WDM驱动程序的基本结构可以把一个完整的WD
5、M驱动程序看作一个容器,其中包含了许多子例程,操作系统调用这个容器中的例程来执行针对IRP(I/O请求包)的各种操作,图1表示了这一概念。基本驱动程序I/O控制分发例程DrvierEntryAddDeviceStartIoAdapterControlOnInterruptDpcForIsrDispatchPnpDispatchPowerDispatchWmiDispatchReadDispatchWriter必须的驱动例程处理排队请求应包括StartIo如果设备有中断应包括OnInerrupt和DpcForIsr对
6、DMA操作应包括AdapterControl可选的分发例程图1WDM驱动程序可执行包中的内容[2]在每一个驱动程序中,都包括DriverEntry、AddDevice和几种IRP分发例程。需要对IRP排队的驱动程序一般都有StartIo例程;执行DMA传输的驱动程序应有一个AdaperControl例程;大部分能产生硬件中断的设备,需要有一个中断服务例程(InterruptServiceRoutine,ISR)和一个延迟过程调用(DeferredProcedureCall,DPC)例程。多数的驱动程序都还有几个支持
7、不同类型IRP的分发例程。WDM开发人员的任务之一就是选择自己特定驱动中需要的例程[2]。3.设备的创建和初始化驱动程序向操作系统显露名为DriverEntry的函数,DriverEntry例程只在驱动程序第一次被装入时执行一次,但是一个驱动程序可以被多个实际设备利用,所以WDM驱动程序有一个特殊的AddDevice函数,PnP管理器为每个设备实例调用该函数。创建设备可以在AddDevice函数中实现,它的主要任务是为建立和启用的设备,建立一个符号链接名或者注册设备接口,将当前驱动程序添加到设备栈中。4.硬件的访问
8、PnP管理程序调用的AddDevice函数只初始化设备(及设备扩展)对象,并没有接触硬件,硬件资源的保留和配置在接受专门的IRP函数(和子函数)代码时执行。当驱动程序接收到PnP子码IRP_MN_START_DEVICE时,IRP堆栈列表内的两个字段AllocatedResourcesTranslated和AllocatedResources,列出分配的资源
此文档下载收益归作者所有