【VB开源代码栏目提醒】:网学会员为广大网友收集整理了,用ddk开发wdm驱动程序 - 计算机教材,希望对大家有所帮助!
收稿日期作者简介刘蓬’’男天津人主要研究方向现场总线应用嵌入式系统张培仁男北京人教授主要研究方向嵌入式系统控制技术监控网络文章编号用KKH开发dKU驱动程序刘蓬张培仁中国科学技术大学火灾科学国家重点实验室安徽合肥’摘要在设计的一个26总线到02机100接口的基础上文中提出在dG6DBAE操作系统中应用这个接口的一种方法并介绍了编写应用程序和dKU驱动程序的步骤着重介绍了dG6DBAE系统中dKU驱动程序的结构和控制硬件的方法与原有dG6DBAE系统上的设计相比可以充分利用dG6DBAE操作系统的稳定性和安全性并保持了使用100接口方便灵活特性关键词243现场总线dG6DBAE设备驱动程序dKU.KH100中图分类号50文献标识码4背景笔者在过去的研究工作中在dG6DBAE操作系统环境下完成了用虚拟设备驱动程序PcK实现的通过02机并行端口的100工作方式对243总线进行监控的工作’并行端口是02机共有的端口现代02机都支持/111标准定义的.00100工作方式’与.00方式比较100方式提供了更高的传输能力可以满足对高速总线监控的速度要求’与用板卡相比用并行端口控制243总线是一种更方便实用有利于现场调试的办法’随着计算机科学的飞速发展02机对系统的稳定性和安全性也提出了更高的要求’在这种情况下微软公司推出了基于35技术dG6DBAE’dG6DBAE采用了与dG6DBAEc系列不同的系统架构给用户和应用程序提供了更稳定的系统环境也更适用于对安全性和可靠行要求较高的工业控制系统的要求’因此目前的工业控制计算机越来越多的采用了dG6DBAE操作系统’dG6DBAE与dG6DBAEc系列相比前者不再支持PcK的概念而完全采用dG6DBAE驱动程序模型dKU作为其驱动程序的模型’dKU提供的更多的特性包括即插即用电源管理dU/和35事件’此外dKU还是一个跨平台的驱动程序模型可以在不修改源代码的情况下经过重新编译后在非/678F平台上运行’为了适应这种发展在保留用100接口对现场总线进行监控的方便灵活的特性的前提下笔者在原有程序的基础上设计了基于dKU的设备驱动程序用以控制并行端口和243总线通讯’dKU介绍dG6DBAE操作系统下的程序可有两种不同的运行环境一种是用户模式JE89UBD8另一种是核心模式H8968FUBD8’而dG6DBAE程序又有两种权限一种是9G6Z级系统程序和设备驱动程序运行在这一级另一种是9G6Z级用户的应用程序运行在这一级’一般说来拥有9G6Z级权限的程序可以不受限制地访问物理设备而拥有9G6Z级权限的程序对物理设备的访问则是受到限制的’设备驱动程序运行在特权级因此可以利用它来完成对硬件的相关操作’设备驱动程序在内核中是被操作的一个部件即通过/X管理器/XU6Z89来调度和管理’当要访问硬件时驱动程序通过调用硬件抽象层的函数来实现’硬件抽象层是dG6DBAE体系结构中的一个重要概念’它屏蔽了不同硬件平台的差异向操作系统的上层提供了一套统一的接口’因而用硬件抽象层去访问硬件使驱动程序具有最大可移植性’一个完整的dKU驱动程序一般要完成初始化创建和删除设备处理dG6打开和关闭文件句柄的请求处理dG6/X请求串行化对设备的访问访问硬件调用其他驱动程序取消/X请求超时/X请求处理电源管理请求dG6DBAE管理诊断dU/和35事件报告等工作’在编写测控仪器底层软件中前I部分一般是必需实现的后面几部分是可选的’此外还应实现一个/3:文件用来安装驱动程序’表中列出的是标准驱动程序入口点和回调函数例程’内核通常通过发送/X请求包/-0来运行驱动程序中的代码’驱动程序有一个主要的初始化入口点一个必须被称为K9G891679a的例程’它有一个标准的函数原型’内核会调用驱动程序中的许多其他例程这些例程被称为回调例程’只要告诉内核该例程的名字内核会在合适的环境下调用这个例程’驱动程序的K9G891679a例程必须设置一系列回调例程来处理/-0’服务策略设计驱动程序的作用是为上层应用程序提供对接口的访问服务’我们设计的驱动程序在接口上必须尽可能满足应用程序对接口访问灵活性的要求同时必须考虑到系统安全性的限制’分析了下面三种接口的策略使用dG6DBAE提供的并行端口驱动程序’dG6DBAE提供了对并行端口访问的驱动程序可以用简单的端口读写函数来完成对243总线接口的访问’只实现对243总线的访问’提供对虚拟设备的读写并行端口和243总线接口卡都对应用程序透明’提供对243总线消息的收发同时用提供对第卷年月计算机应用2BLMN7894MMFGO7GB6EPBFQK8OQR.‘4上寄存器的访问应用程序使用收发的接口访问总线寄存器访问只用来调试第一种策略最灵活可以给应用程序最大的自由度但是速度慢因为每一个对.‘4的操作都要经过一个系统的转换同时由于发送消息和接收消息都要对.‘4进行一系列的操作因为应用程序在操作过程中不能禁止中断所以要在应用程序中考虑到中断嵌套的问题增加了设计的复杂性第二种策略最安全但是不能对总线状态进行监视第三种策略综合了两者的长处本设计采用该策略具体的设计是/-0U‘-14K用于读243消息/-0U‘d-/51用于发243消息表/-0U‘-14K读.‘4寄存器/-0U‘d-/51写.‘4寄存器/-0U‘K1P/212X35-XS/X25S243/X-U1..4W1接收现有全部243消息/X25S243/X5U1..4W1发送若干243消息下面的代码注册了必要的程序入口点35.545J.K9G891679a/30K-/P1-X‘125K9G89Xs8O7R/30J3/2XK1.5-/3W-8ZGE79a07V_tK9G89Xs8O7K9G89.797/Bp243/B.797/Bkff最终处理/-0的函数K9G89Xs8O7K9G89J6FBDp243/BJ6FBDkff删除一个设备需要的工作R主要是释放资源K9G89Xs8O7UsB9:N6O7GB6/-0U‘2-1451p243/B29878kff为一个新的设备取得资源K9G89Xs8O7UsB9:N6O7GB6/-0U‘2SX.1p243/B2FBE8kff从AG6程序关闭一个设备R释放资源K9G89Xs8O7UsB9:N6O7GB6/-0U‘-14Kp243/B-8Dkff读.‘4寄存器K9G89Xs8O7UsB9:N6O7GB6/-0U‘d-/51p243/Bd9G78kff写.‘4寄存器K9G89Xs8O7UsB9:N6O7GB6/-0U‘K1P/212X35-XSp243/BK8GO82B679BFkff见表E77NEp0K/B29878K8GO8K9G89Xs8O7_kff初始化R主要工作是建立一个AG6可见的符号链接R得到一个中断处理队列的项R以及初始化定时器u一般的驱动开发工具因为要支持大量的应用所以会缺省自动生成大量代码其中很大部分代码对特定的程序是完全没有必要的由于对总线的监控对时间响应的要求很高因此并没有采用一般流行的驱动程序开发工具而是直接用微软公司提供的驱动开发工具包开发这样全部代码由自己掌握可以做到最大限度地利用系统的资源同时由于dKU的设备驱动程序的结构大同小异为了节省时间使用了文献的例子程序0K/B作为编程的框架程序设计下面只对我们的程序设计中遇到的一些关键问题做一下介绍设备对象和设备扩展内核在设备对象K1P/21X‘125结构中存储设备的信息对于与应用设备的交互相关的K1P/21X‘125被传递给驱动程序回调例程设备对象由内核拥有’但有一些域应由设备驱动程序使用同时在内核创建的设备对象中有一个指针K8GO81c786EGB6它指向一块称为设备扩展的内存驱动程序自己定义设备扩展用来存储其他额外的信息我们定义的设备扩展主要成员如下7aM8D8bE79NO7243/XK1P/211513./X3t0J24-0B97E8k0974DD98EEk0SX3W0B97S86Z7VkJ24-/67899NM7-8ZkJSX3W5c5B7Fkff要求发送的243消息数量JSX3W5cS8b7kff还未发送的243消息数量0J24-5cNbb89kff指向发送缓冲区的指针JSX3Wc5B7Fkff接收缓冲区内消息数0J24--cNbb89kff接收缓冲区u243/XK1P/211513./X3R20243/XK1P/211513./X3k中断响应XXS143/67899NM76DF89/30H/351--J05/67899NM7R/30243/XK1P/211513./X3Dc_tGbDc5cSE7/67-8Zqc_ppc_tGbx5c2BLMF878_t5c2BLMF878p-N6d9G782LDE.a6OVDc_kuGbDc5cSE7/67-8Zqc_ppc_-N6-8D2LDE.a6OVDc_kff将.‘4中接收缓冲区的数据读入Dc的缓冲区R清空.‘4的缓冲区ff处理其他中断987N965-J1ku243消息传递dG6程序对243总线访问需要通过K8G8/B2B679BF函数向驱动程序发送控制码我们的驱动程序支持的控制码如表对于读243消息只是简单的把Dc缓冲区里保留的消息拷贝传递给应用程序发243消息读取和设置.‘4寄存器应用程序生成的/-0分别在243/BK8GO82B679BF243/B-8D243/Bd9G78中处理而在这些函数中我们只是简单的调用/B.7970OC87/B.7970OC87把/-0插入/-0队列并调用最终/-0处理的函数在K9G891679a中所设的是243/B.797/BPX/K243/B.797/B/30K1P/21X‘125O6DBR/30/-0/9M_t0/X.542HSX245/X3/9M.7OCp/BW872N99867/9M.7OCSBO7GB6/9M_EAG7OV/9M.7OCUsB9:N6O7GB6_tOE8/-0U‘K1P/212X35-XSgtJSX3W2B679BF2BD8p/9M.7OC09L8789EQK8GO8/B2B679BFQ/B2B679BF2BD8k月刘蓬等用KKH开发dKU驱动程序EAG7OV2B679BF2BD8_tOE8/X25S243/X5U1..4W1gH8.a6OV9B6Gm81c8ON7GB6Dc/67899NM7Xs8O7R0H.6DB__kuuOE8/-0U‘d-/51gOE8/-0U‘-14Kguu访问端口访问.‘4特定寄存器的基本函数为J24-.‘498D/30dKU/XK1P/211513.X3DcR/3JSX3W98Z_tJ24-kd9G78a78DcRR98Z_kp-8Da78DcR_k987N96kuJ24-.‘4A9G78/30dKU/XK1P/211513.X3DcR/3JSX3W98ZR/3J24-a78_td9G78a78DcRR98Z_kd9G78a78DcRRa78_ku其中d9G78a78和-8Da78是直接访问并行端口的函数BGDd9G78a78/30243/XK1P/211513./X3DcR/3JSX3WBbbE87R/3J24-a78_tGbBbbE87pDc0B97S86Z7V_987N96k0J24-0B97pDc0B97E8nBbbE87kGbDc0B97/6/X.MO8_d-/510X-5J24-0B97Ra78_k8FE8d-/51-1W/.51-J24-0B97Ra78_kuJ24--8Da78/30243/XK1P/211513./X3DcR/3JSX3WBbbE87_tGbBbbE87pDc0B97S86Z7V_987N96k0J24-0B97pDc0B97E8nBbbE87kJ24-kGbDc0B97/6/X.MO8_p-14K0X-5J24-0B97_k8FE8p-14K-1W/.51-J24-0B97_k987N96ku驱动程序和应用程序的接口在dG6应用程序中用29878:GF8函数打开一个设备和打开一个普通文件在形式上是一样的dG6DBAE用文件名中的信息来查找相应的驱动程序必要时在文件名里也包含了一些驱动程序特定的信息特别是设备需要的资源的信息驱动程序中要完成对这些信息的分析和处理结束语我们设计的设备驱动程序完成了把100T243接口设备虚拟化并为.‘4中断提供了快速响应把.‘4原有的I字节接收缓冲区用软件加以扩大为应用程序提供了灵活的接口和更强大的设备功能目前该接口以及驱动程序已经被中国科学技术大学自动化研究所的控制系统组态软件42U0采用作为工控机与243总线接口用于广东佛山东鹏陶瓷厂窑炉改造工程中参考文献张培仁R朱东杰R高飞R等Q采用100协议的243总线监控节点‘Q计算机应用RR_Q2672QdG6DBAEdKU设备驱动程序开发指南UQ孙义R马莉波R国雪飞R等译Q北京g机械工业出版社RQ5V8/6E7G7N78Bb1F8O79GOF6D1F8O79B6GOE16ZG6889EUQ/6OQR/111.76D9D.GZ6FG6ZU87VBDbB9GDG98O7GB6F09FF8F08T9GMV89F/6789bO8bB9089EB6F2BLMN789EQR.8M78L89RQ上接第页需要的事件已经发生并符合预定的与或逻辑则这个任务会被唤醒进入就绪状态新事件一发生内核就会立刻决定是否展开需要一次任务调度清除事件标志函数OF89bFZ将事件标志清零实时多任务的开发与调试UX.I内核的配套开发系统是一个支持2I和0SUI的源码调试的仿真开发系统仿真开发机通过打印口与02机连接全鼠标多窗口的调试软件将目标程序下载到仿真开发机并监控运行该开发系统具备通用开发系统的全部功能如源码调试的单步单步跨越断点各种变量包括结构和数组等的观察和操作源码可以分散在几个源程序文件中源码与汇编对照查看和执行等除此之外该开发系统具备专门针对UX.I的调试功能当前系统状态如按照运行状态分类的任务数目缓冲区信号量邮箱和事件数目’单一对象的详细情况脉冲量缓冲区信号量邮箱事件数的悬挂任务各种内部数据任务的状态堆栈情况和任务的局部变量等开发单片机应用程序时在实时多任务操作系统核心基础上开发应用程序是一个比较好的方法这样可以使整个程序具有清新的结构程序内部构成的耦合度降低开发工作便于展开调试难度也显著降低可以大幅提高开发效率参考文献黄干平Q计算机操作系统UQ北京g科学出版社RQ4MM9BOV8E7BU6Z8L867Q.aLG6-8GEGB6Q_RXO7BT89RQ李永锡R等Q计算机操作系统原理UQ西安R西北工业大学出版社RQ计算机应用年用DDK开发WDM驱动程序作者刘蓬 张培仁作者单位中国科学技术大学火灾科学国家重点实验室安徽合肥230027刊名计算机应用英文刊名JOURNAL OF COMPUTER APPLICATIONS年卷期200323z2被引用次数5次 1.张培仁.朱东杰.高飞 采用EPP协议的CAN总线监控节点期刊论文-计算机应用 2001022.Cant C.孙义.马莉波.国雪飞 Windows WDM设备驱动程序开发指南 20003.The Institute of Electrical and Electronics Engineers 2000 1.张丹和 基于USB接口数据采集系统的应用研究学位论文硕士 20072.张栋 基于USBKEY的PC/SC系列驱动学位论文硕士 20063.刘勇 开放式数控系统PCI接口电路的应用研究学位论文硕士 20054.张利华 WDM驱动程序研究及其在自动化配料系统中的应用学位论文硕士 20055.魏希三.董巍 基于磁盘过滤驱动的硬盘保护技术期刊论文-电脑知识与技术 200935 本文链接http://d.g.wanfangdata.com.cn/Periodical_jsjyy2003z2095.aspx授权使用华南师范大学hnsfdx授权号49aa7138-0fbe-42e9-a919-9da200ae2773下载时间2010年6月27日