欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    Windows 2000XP下IO设备驱动程序的设计.doc

    • 资源ID:2390153       资源大小:30.50KB        全文页数:7页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Windows 2000XP下IO设备驱动程序的设计.doc

    Windows 2000/XP下I/O设备驱动程序的设计摘要:本文介绍了Windows 2000/XP下WDM驱动程序的基本设计方法;阐述了I/O设备驱动程序的基本构成,硬件资源的配置和访问的方法;提出了设备驱动程序在实际应用中的层次化结构。关键词:WDM;设备驱动程序;I/O端口;DLLDesign of I/O Device Driver under Windows 2000/XPAbstract:This paper introduce the primary designing methods of WDM driver under Windows 2000/XP. It describe the basic structure of an I/O device driver, and the method of configing and accessing the hardware resources. It also put forward the layered structure of device driver in the real implement. Keyword:WDM;device driver; I/O port; DLL1 引言在开发微机应用系统的过程中,尤其是在控制系统中,通常会遇到在Windows环境下对具有特定功能的硬件设备(如数据采集卡),进行直接访问和控制的问题。因为在Windows操作系统下,CPU运行于保护模式,并且统一管理硬件资源,执行于用户态的应用程序不能直接访问硬件,而是通过调用执行于核心态的设备驱动程序提供的各种服务间接地对硬件资源进行访问,这一机制确保了系统的安全。所以,以前在Dos和Windows 98下可以很容易完成的I/O端口读写,在Windows 2000/XP下必须编写驱动程序,才能够实现。由于各种操作系统结构的不同影响了设备驱动程序的兼容性,为此微软公司在1997提出了一种全新的Windows驱动程序模型(WDM),并在推出Windows 2000操作系统时正式引入了这一技术。WDM以Windows NT4.0的内部结构为基础,同时引入了Windows 9x的即插即用特性,为存在于Windows 9x和Windows 2000操作系统中的设备驱动程序提供了一个统一的参考框架1。在Windows 98/Me,Windows 2000和更高版本的操作系统上运行的设备驱动必须是WDM驱动4。2 WDM驱动程序的基本结构可以把一个完整的WDM驱动程序看作一个容器,其中包含了许多子例程,操作系统调用这个容器中的例程来执行针对IRP(I/O请求包)的各种操作,图1表示了这一概念。基本驱动程序 I/O控制 分发例程DrvierEntryAddDeviceStartIoAdapterControlOnInterruptDpcForIsrDispatchPnpDispatchPowerDispatchWmiDispatchReadDispatchWriter 必须的驱动例程 处理排队请求应包括StartIo 如果设备有中断应包括OnInerrupt和DpcForIsr 对DMA操作应包括AdapterControl 可选的分发例程图1 WDM驱动程序可执行包中的内容2在每一个驱动程序中,都包括DriverEntry、AddDevice和几种IRP分发例程。需要对IRP排队的驱动程序一般都有StartIo例程;执行DMA传输的驱动程序应有一个AdaperControl例程;大部分能产生硬件中断的设备,需要有一个中断服务例程(Interrupt Service Routine,ISR)和一个延迟过程调用(Deferred Procedure Call,DPC)例程。多数的驱动程序都还有几个支持不同类型IRP的分发例程。WDM开发人员的任务之一就是选择自己特定驱动中需要的例程2。3. 设备的创建和初始化驱动程序向操作系统显露名为DriverEntry的函数,DriverEntry例程只在驱动程序第一次被装入时执行一次,但是一个驱动程序可以被多个实际设备利用,所以WDM驱动程序有一个特殊的AddDevice函数,PnP管理器为每个设备实例调用该函数。创建设备可以在AddDevice函数中实现,它的主要任务是为建立和启用的设备,建立一个符号链接名或者注册设备接口,将当前驱动程序添加到设备栈中。4. 硬件的访问PnP管理程序调用的AddDevice函数只初始化设备(及设备扩展)对象,并没有接触硬件,硬件资源的保留和配置在接受专门的IRP函数(和子函数)代码时执行。当驱动程序接收到PnP子码IRP_MN_START_DEVICE时,IRP堆栈列表内的两个字段AllocatedResourcesTranslated和AllocatedResources,列出分配的资源。用来描述这些资源的结构是CM_PARTIAL_RESOURCE_LIST类型,它包括一个CM_PARTIAL_RESOURCE_DESCRIPTOR结构的计数数组,如图2所示。VersionRevisionCountTypeShareDispositionFlaguTypeShareDispositionFlagPartialDescriptors0PartialDescriptors1u图 2 部分资源列表数据结构2数组中每一个资源描述符都有一个Type成员,它表示所代表的资源的类型。主要有4个重要的共同体类型是Port(端口)、Interrupt(中断),Memory(内存),Dma(直接内存访问)。在接收到资源列表之后,应该存储资源信息,以便后面的使用。程序实现的部分代码如下:for (i = 0; i < partialResourceList->Count; i+, resource+, resourceTrans+) switch (resource->Type) case CmResourceTypePort: deviceInfo->PortWasMapped = FALSE; deviceInfo->PortBase = (PVOID)resourceTrans->u.Port.Start.LowPart; /I/O端口地址的基地址 deviceInfo->PortCount = resourceTrans->u.Port.Length; /端口长度 break;case CmResourceTypeMemory: 得到了设备的I/O地址,就可以对设备进行读取了,在读写端口地址和内存时应该使用标准的内核读取例程,在WDM中应使用HAL宏,如:READ_PORT_UCHAR, WRITE_PORT_UCHAR等。这样就可以不用考虑不同操作平台的特性,也可以更好的适应Windows 2000多任务,多进程环境的要求。例如如果我们要写端口201h,端口资源的基地址是200h,实现程序可以如下:WRITE_PORT_UCHAR( (PUSHORT)(ULONG_PTR)pLDI->PortBase + nPort), *(PUSHORT)pIOBuffer ); /向端口写一个字节数据5. 硬件资源的分配硬件资源是在驱动程序装入时,根据安装文件进行分配的,所以在要使驱动正常工作必须编辑自己的安装文件,安装文件是以inf为扩展名的文件,它包含了WDM设备驱动程序的制造商信息、要复制的文件列表、要创建的注册表项等。笔者编写的驱动用到的硬件资源占用240h243h的端口地址。所以在安装文件中,资源分配节如下:PortIO_Inst.NTCopyFiles=PortIO.CopyFilesLogConfig=PortIO.LC0 ;指向资源分配节PortIO.LC0 ;资源分配节ConfigPriority=DESIRED IOConfig=240-243INF安装文件向操作系统添加了硬件资源,硬件驱动的安装方法和其他的驱动(如:声卡等)安装方法类似。当驱动程序收到“启动设备”(IRP_MJ_PNP的IRP_ MN_START_DEVICE的子码)时,驱动程序获得设备的硬件资源。6. 与应用程序的接口待添加的隐藏文字内容2物理设备驱动程序(.sys)动态链接库(.dll)应用程序(.exe)用户态的程序在访问驱动程序时,需要用到一些专用的API函数,由于这些函数参数比较多,所以可以开发一个动态链接库,使用户开发应用程序涉及不到底层驱动设备的操作,和使用普通API函数一样操作硬件。这样整个系统的结构如下:图3 系统软件结构 应用这分层的结构,用户程序可以通过dll读写设备。Dll提供给应用程序的接口函数,包括初始化设备,关闭设备,读写端口等。初始化就是创建设备,并得到设备句柄,可以在dll中导出如下函数:extern "C" _declspec(dllexport) bool InitialIoport()hndFile = CreateFile( ".IODev", GENERIC_WRITE, FILE_SHARE_WRITE, NULL,OPEN_EXISTING, 0, NULL); 关闭设备,只要关闭返回的句柄,如下:extern "C" _declspec(dllexport) void CloseIoport()CloseHandle(hndFile);写端口函数声明如下,函数调用DeviceIoControl可见MSDN:extern "C" _declspec(dllexport) bool outportb(int address,int value)IoctlResult = DeviceIoControl(hndFile, IoctlCode &InputBuffer ,DataLength, NULL, 0, &ReturnedLength, NULL); /写端口命令处理读端口时,与上类似,不再祥述。extern "C" _declspec(dllimport) unsigned char inportb(int address)这样,在应用程序中加入自己的动态链接库后,就可以像在Windows 98中使用函数_inp, _outp一样使用inportb, 和outportb, 来操作端口了。7. 结束语基于WDM驱动模型设计的驱动程序支持即插即用功能,可以稳定地在Windows 2000下运行,它是在PC机下进行数据采集的基础。Windows操作系统提供了良好的网络和数据库功能,所以在Windows下开发的控制系统可以更好的实现分布式的数据监测和控制,而且控制界面更容易设计。笔者应用此驱动程序在开发选路板驱动中得到应用。应用本文提出的方法可以实现接口友好的任意微机端口驱动。参考文献:1 尤晋元,史美林等。Windows操作系统原理。北京:机械工业出版社,2001。2 美 Walter Oney。 Programming the Windows Driver Model。 北京:北京大学出版社,2000。3 Microsoft cop.。How to Write a Windows XP Driver。2001。4 Microsoft cop.。DDK document。2001。

    注意事项

    本文(Windows 2000XP下IO设备驱动程序的设计.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开