




已阅读5页,还剩57页未读, 继续免费阅读
(计算机应用技术专业论文)基于windows+wdm的usb设备驱动程序开发与应用.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于w in d o w sw d m 的u s b 设备驱动程序开发与应用 摘要 w b l d o w s 驱动程序模型w d m ( w i n d o w sd r i v e rm o d e l ) 是一种全新的设各驱动程序 模式,可以运行于w i n d o w s 9 8 2 0 0 0 x p 等多种操作系统平台。w d m 采用模块化、分层 次类型的驱动程序结构。作为一种符合w d m 的驱动程序,u s b 驱动程序分为u s b 总线 驱动程序和u s b 功能驱动程序两个层次。u s b 总线驱动程序负责控制实际的硬件,实 现与底层的通信。u s b 功能驱动程序由设备开发者编写,位于u s b 总线驱动程序的上 层,通过向u s b 总线驱动程序发送u s b 请求包,来实现对u s b 设备信息的发送或接收。 本文在对w i n d o w sw d m 驱动程序模型的体系结构,u s b 设备驱动程序的层次结构 及工作机制进行深入分析研究的基础上,针对电子会议桌牌设备的实际功能需求,详 细描述了电子会议桌牌驱动程序的设计过程,重点介绍了u s b 驱动程序中 “d r i v e r e n t r y ”、添加设备例程、即插即用处理例程、读写操作例程等几个重要例 程的设计实现,以及应用程序如何访问设备。并介绍了编译、安装及测试u s b 设备驱 动程序的过程。 本文首先介绍了驱动程序开发的历史及w i n d o w s 驱动程序的种类,并对w i n d o w s 驱动程序模型w d m 做了简单介绍。第二章讨论了w d m 的层次结构模型,驱动程序的加 载流程以及几个重要的数据结构。第三章分析了w d m 的数据读写方式及中断的处理方 式。第四章对u s b 驱动程序体系结构进行了介绍。第五章详细描述了电子会议桌牌设 备的驱动程序开发过程,及应用程序如何通过驱动程序访问该设备。第六章描述了该 u s b 设备驱动程序的编译、调试及安装过程。第七章是对本文的一个总结。 关键词:w i n d o w s ,驱动程序,w d m ,例程,u s b t h ed e v e l o p m e n ta n da p p l i c a t i o no fu s bd e v i c ed r i v e r s b a s e do nw i n d o w sw d m w a n gg e n g e n ,l id i n g z h u a b s t r a c t w i n d o w sd r i v e rm o d e l ,w d mi sa ne n t i r e l yn e wm o d e lo fd e v i c ed r i v e r s ,i tc a nb e r u no nt h eo p e r a t i o ns y s t e ms u c ha sw i n d o w s9 8 2 0 0 0 x rw d mt a k e st h em o d u l a r , l a y e r e dd r i v e r s t r u c t u r e a sap a r to fw i n d o w sd r i v e rm o d e l ,u s bd e v i c ed r i v e r si s d e p a r t e dt ot w ol a y e r e d ,o n ei su s bb u sd e v i c ed r i v e ra n dt h eo t h e ri s u s bf u n c t i o n d e v i c ed r i v e r t h eu s bb u sd e v i c ed r i v e rt a k e sc h a r g eo fc o n t r o la n dc o m m u n i c a t e sw i t h h a r d w a r e u s bf u n c t i o nd e v i c ed r i v e ri sd e s i g n e db yc l i e n t ,i tl i e st h eu pl a y e ro fu s b b u sd e v i c ed r i v e r , i ts e n d sa n dr e c e i v e si n f o r m a t i o nf r o mu s bd e v i c eb ys e n du r bt o u s bb u sd e v i c ed r i v e r b a s e dr e s e a r c h e sa n da n a l y z e so fs y s t e ma r c h i t e c t u r eo fw i n d o w sd r i v e rm o d u l e , l a y e r e da r c h i t e c t u r ea n dw o r km e t h o do fu s bd e v i c ed r i v e r s ,a n da c c o r d i n gt h ef u n c t i o n d e m a n d so fe l e c t r o n i cc o n f e r e n c en a m ed i s p l a yc a r d ,t h et h e s i sd e t a i l e dd e s c r i b e st h e d e s i g np r o c e s so fe l e c t r o n i cc o n f e r e n c en a m ed i s p l a yc a r d d e v i c ed r i v e r ,a n dm o s t l y i n t r o d u c e ss o m ei m p o r t a n tr o u t i n es u c ha s “d r i v e r e n t r y ”r o u t i n e ,a d dd e v i c er o u t i n e ,p l u g a n dp l a yp r o c e s sr o u t i n e ,r e a do rw r i t er o u t i n e a n da p p l i c a t i o np r o g r a m sh o wt oa c c e s s d e v i c e a n di n t r o d u c e sc o m p i l e ,i n s t a l la n dd e b u g p r o c e s so fu s b d r i v e rd e v i c e s a tf i r s t ,t h et h e s i si n t r o d u c e st h eh i s t o r yo fd e v i c ed r i v e sd e v e l o p m e n ta n dt y p e so f w i n d o w sd e v i c ed r i v e r s ,a n di n t r o d u c e st h ef e a t u r eo fw i n d o w sd r i v e rm o d e l c h a p t e r2 d i s c u s s e st h el a y e r e da r c h i t e c t u r em o d e lo fw d ma n dl o a df l o wo fd e v i c ed r i v e r sa n d s o m ei m p o r t a n td a t as t r u c t u r e c h a p t e r3a n a l y z e sd a t aa c c e s sm e t h o da n di n t e r r u p t s p r o c e s so fw d m c h a p t e r4i n t r o d u c e st h eu s bd e v i c ed r i v e r sl a y e r e da r c h i t e c t u r e c h a p t e r5d e t a i l e dd e s c r i b e st h ed e v e l o p m e n to fe l e c t r o n i cc o n f e r e n c en a m ed i s p l a yc a r d u s bd e v i c ed r i v e r sa n dh o wa c c e s su s bd e v i c et h r o u g hd e v i c ed r i v e r s c h a p t e r6 d e s c r i b e st h ec o m p i l ea n dd e b u ga n di n s t a l lp r o c e s so fau s bd r i v e rd e v i c e s l a s tc h a p t e r g i v e sac o n c l u s i o n k e yw o r d s :w i n d o w s ,d r i v e r s ,w d m ,r o u t i n e ,u s b 原创性声明 本人郑重声明:所呈交的学位论文,是本人在指导教师的指导 下,独立进行研究所取得的成果。除文中已经注明引用的内容外, 本论文不包含其他个人或集体已经发表或撰写过的科研成果。对本 文的研究作出重要贡献的个人和集体,均已在文中以明确方式标明。 本声明的法律责任由本人承担。 论文作者签名:z - 极极 关于学位论文使用权的说明 本人完全了解中北大学有关保管、使用学位论文的规定,其中 包括:学校有权保管、并向有关部门送交学位论文的原件与复印 件;学校可以采用影印、缩印或其它复制手段复制并保存学位论 文:学校可允许学位论文被查阅或借阅;学校可以学术交流为 目的,复制赠送和交换学位论文;学校可以公布学位论文的全部 或部分内容( 保密学位论文在解密后遵守此规定) 。 签名 报捉 导师签名:日期: 中北大学学位论文 1 绪论 设备驱动程序是提供连接到计算机的硬件的软件接口,它是操作系统的一个信任部 分,用户应用程序以一种规范的方式访问硬件,而不必考虑如何控制硬件“瑚。驱动程 序作为一个软件,在装入后成为操作系统内核的一部分。它使一个或多个设备可用于用 户态程序,每个设备代表一个物理的或逻辑的硬件啪。在w i n d o w s 中,驱动程序总是使 设备看起来像是一个文件,可以打开设备的一个句柄,然后应用程序可以在设备句柄最 后关闭之前向驱动程序发出读写请求。 一个完整的w i n d o w s 驱动程序要完成以下工作“1 :初始化;创建和删除设备;处理 w i n 3 2 打开和关闭文件句柄的请求;处理w i n 3 2 输入输出请求;串行化对设备的访问; 访问硬件;调用其他驱动程序;取消i o 请求;超时i o 请求;处理一个可热拔插的设 备被加入或删除的情况;处理电源管理请求;使用w i n d o w sm a n a g e m e n t i n s t r u m e n t a t i o n ( w i n d o w s 管理诊断,删i ) 和n t 事件向系统管理员报告。 1 1 驱动程序设计的意义和任务 从8 0 3 8 6 开始,i n t e lc p u 提供了三种c p u 工作模式:实模式、保护模式和虚拟8 6 模式。1 嘲”。 实模式也称为实地址模式,在这种模式下工作的程序使用的逻辑地址就是实际物理 地址。在实模式下内存管理采用分段技术。这种技术将i m b 的物理空间分段,每个段最 大6 4 k b ,段地址的基地址存储在段寄存器中。实际物理地址就是段寄存器中的数值左移 4 位,再加上偏移量形成2 0 位的物理空间地址,从而实现i m b y t e s 地址空间的访问啪嘲。 早期的c p u 只支持这样的构架,使得应用于其上的操作系统和应用软件均拥有对系统所 有资源的访问与控制权限,从这个角度讲当时的应用程序,可以并且也必须自己完成对 资源的操作与维护,设备驱动程序这个概念在当时并不明确。 保护模式的出现,为实现多任务宏观并行工作提供了有力支持。该模式中实现了内 存分段,分页管理,并且c p u 硬件支持对多个任务的工作环境的隔离,以保证给每个任 务提供一个隔离的工作环境”。该模式为运行其上的软件提供了r i n g o r i n 9 3 共4 种 1 中北大学学位论文 特权级别,每种级别上的软件拥有的能力和权力不同嘲“”。操作系统软件一般运行在特 权级别最高的r i n g o 层次上,拥有整个系统的软硬件资源的访问控制权;应用程序运行 在特权级别最低的r i n 9 3 层上,系统的硬件、中断和操所系统的核心软件资源的访问控 制权均被屏蔽。采用保护模式明显提高了整个系统的可靠性和健壮性,但是造成了应用 程序无法直接访闯硬件。同时,由于系统硬件设备的制造厂商和功能特性的不同。操作 系统也不可能提供对于所有设备的直接访问接口。这样就引出了设备驱动程序的概念: 设备驱动程序提供链接到计算机的硬件的软件接口,它是操作系统的一个信任部分。应 用程序以一种规范的方式访问硬件,而不必考虑如何控制硬件。 设备驱动程序将外部设备的不同特性和高层软件分割开,隐藏了硬件设备功能的内 部实现细节,并对操作系统透明。设备驱动程序只实现对硬件具体控制,发挥硬件的所 有功能,应用程序只决定如何使用设备的各种功能。这样,具体的应用程序崩溃与否将 不会影响到整个系统的正常工作。但是,如前所述,设备驱动程序是操作系统可信任的 一部分,它拥有r i n g o 层的权限,所以设备驱动程序的实现必须是安全可靠的。 1 2 w i n d o w s 设备驱动程序发展的历史 微软已经发布了很多版本的w i n d o w s 操作系统,从开始的w i n d o w s 3 0 到 w i n d o w s 2 0 0 0 和w i n d o w sx p ,以及到最近发布的全新操作系统v i s t a 。一些底层的技术 一直在各个w i n d o w s 平台下共享,而其它的一些技术随版本的不同有了很大的变化。由 于设备驱动程序是与操作系统最低层的功能发生交互,因此,如果要实现跨平台的兼容, 首先必须在不同平台的底层结构上做到兼容。 w i n d o w 3 0 的基本结构一直延续到w i n d o w s 9 x 家族,虽然后来的操作系统在驱动程 序的开发和管理上有了非常大的改变,但底层的基本结构没有变化。在w i n d o w s 3 x 、 w i n d o w s 9 5 和w i n d o w s 9 8 下使用的是虚拟设备驱动( v i r t u a ld e v i c ed r i v e r ) ,也称为 v x d 。“”。虚拟设备驱动程序,原来的设计目标是为了支持在w i n d o w s 平台下的设备,它 作为动态连接库( d l l ) 链接到操作系统里,工作在保护模式下( r i n g o ) 。v x d 解决了那 些常规应用程序不能完成的工作,比如直接硬件的读写,也可以说,使用v x o 是扩展操 作系统内核的一种方法。v x d 最初的编写采用的是i n t e l 汇编语言,后来随着v t o o l s d 的使用,使用c 和c + + 也开始流行起来。 2 中北大学学位论文 w i n d o w sn t 的设计体现更现代和模块化的内部体系,它的目标是更好的灵活性和更 加的健壮。n t 采用了一种特有的内核模式驱动程序体系,一般也采用c 语言来编写。当 n t 下的驱动程序需要直接控制机器时,它会向硬件抽象层( h a l ) 发出请求。硬件抽象 层建立在驱动程序和实际的硬件之间,为驱动程序隐藏了硬件的不同,这样就可以编制 出跨处理器( 比如p e n t i u m 和a l p h a ) 、源代码兼容的设备驱动程序。因为w i n d o w sn t 可以工作在单处理器和多处理器环境中,驱动程序必须十分小心的保护关键的数据结 构。w i n d o w sn t 提供了一种分层的体系结构,每一个n t 设备驱动程序有个底层和一 个上层接口。底层的驱动程序直接控制硬件。在底层和上层驱动程序之间的是中间层驱 动程序。w i n d o w sn t 也定义了一种类驱动程序体系,并且支持某些设备类。w i n d o w sn t 的这种驱动程序体系,在w i n d o w s9 8 和w i n d o w s 2 0 0 0 x p 中得到了继承和扩展,形成了 现在的w d m 体系“埘。 认识到跨平台兼容能力的价值后,微软开始尝试统一设备体系,给未来的驱动程序 开发提供一个简单的平台。微软的做法,不是重新开发一套新的体系,而是在更合理的 w i n d o w sn t 体系的基础上,进行必要的完善,从而形成一个新的设备驱动程序体系,称 为w i n d o w sd r i v e rm o d e l ( w i n d o w s 驱动程序模型,w 洲) 这个名字。w i n d o w s9 8 最先 支持w d m ,随后推出的操作系统中也都支持w d m ,包括w i n d o w s 2 0 0 0 系列,w i n d o w sm e 和w i n d o w sx p “加”。 1 3w i n d o w s 驱动程序的种类嘲嘲枷 w i n d o w s 操作系统中包含很多种驱动程序,可以将这些驱动程序分为用户模式驱动 程序和内核模式驱动程序两大类。图1 1 中列出了其中的一部分。 用户模式驱动程序包含了w i n 3 2 多媒体驱动程序,支持m s - d o s 应用程序的虚拟设 备驱动程序( v i r t u a ld e v i c ed r i v e r v d d ) 和其他保护子系统的驱动程序。v d d 是用户 模式部件,它可以使d o s 应用程序访问x 8 6 平台上的硬件,v d d 通过屏蔽i 0 权限掩码 来捕获端口访问操作,它基本上是模拟硬件操作。 3 中北大学学位论文 i 用户模式ii 内核模式i i 驱动程序li 驱动程序l 图1 1w i n d o w s 驱动程序种类嘲”m 内核模式驱动程序使用系统级代码编写,且运行在内核模式下,因为内核模式允许 直接访问硬件,这些驱动程序被用来直接控制硬件。内核模式驱动程序包含了许多子类: 1 p n p 驱动程序就是一种遵循w i n d o w s f l p 插即用协议的内核模式驱动程序。 2 w d m 驱动程序是一种p n p 驱动程序,它同时还遵循电源管理协议,并能在w i n d o w s 9 8 和w i n d o w s2 0 0 0 间实现源代码级兼容。w d m 驱动程序还细分为类驱动程序( c l a s s d r i v e r ) 和迷你驱动程序( m i n i d r i v e r ) ,类驱动程序管理属于已定义类的设备,迷你驱 动程序向类驱动程序提供厂商专有的支持。 3 小端口驱动程序( m i n i p o r td r i v e r ) ,包括视频小端口驱动程序,s c s i ,j s 端口驱 动程序和n d i s ,j , 端口驱动程序。 4 文件系统驱动程序( f s d ) 在本地硬盘或网络上实现标准p c 文件系统模型,包括多 层次目录结构和命名文件概念。 1 4 w d m 驱动程序简介 编写硬件设备驱动程序一直是一种具有很强挑战性的复杂工作,即便是编写过具有 相当难度的w i n 3 2 程序的开发人员,在编写设备驱动程序时也必须去应对种种不适。编 写设备驱动程序很像在执行一项艰巨的任务:没有窗口、没有消息需要处理,很难对源 代码进行调试设置,几乎所有支持库都无法调用;更加糟糕的是由于设备驱动程序属于 4 中北大学学位论文 操作系统的信任部分,于是很容易伤害系统,对此开发人员却往往缺乏一种保护手段去 防止进程和w i n d o w s 系统故障。 w d m ( w i n d o w sd r i v e rm o d e l ) 是微软为开发人员提供的一种编写运行在w i n d o w s 平 台下新硬件驱动程序的有效方法,这就是w i n d o w s 驱动程序模型“删“”。w d m 提供了设备 类( d e v i c ec l a s s e s ) ,由此形成的源代码可以运行在各类w i n d o w s 平台: w i n x p 2 0 0 0 m e 9 8 。 w d m 是一种便携式的编程技术,它使开发人员写出的驱动程序可以跨平台运行,支 持编写微软所有支持的w d m 总线驱动程序,在w d m 中总线的概念是一种附加在其它设备 ( 包括物理设备、逻辑设备、虚拟设备) 上的设备协议。 新版w d m 中的r n d i s 属于新内容:如简化了对网络设备硬件的开发,减弱了网络设备 对驱动程序的依赖性,使最终用户对网络设备的设置安装更简便。w d m 新版中对设备的 支持主要包括:u s b 设备类,例如其中的h i d ( h u m a ni n t e r f a c ed e v i c e ) ;数码相机 扫描仪;通过i e e e l 3 9 4 标准的视频捕捉设备;音频;控制调制解调器的w i n m o d e m 。在w d m 类代码中提供的p o r t m i n i p o r t 驱动范文,支持第三方厂商为其特殊设备编写的“迷你 型”驱动m i n i d r i v e r 1 m 3 力。现将w d m 的特点总结如下: 1 支持即插即用( p n p ) 和电源管理 即插即用是指外部设备可以在系统运行时添加或者删除,操作系统可以在任何时候 分配设备需要的硬件资源。w d m 驱动程序支持即插即用,因而可以动态配置设备。电源 管理是指设备对系统电源的使用情况是动态变化的。w d m 驱动程序支持设备的电源管理, 使得设备对系统电源的使用情况同设备所处的工作状态相关。操作系统通过发送i r p 请 求,通知外部设备进行资源配置和电源管理,这些i r p 主函数的代码分别为i r p - m l p n p 和i r p - m j _ p o w e r 。针对每个主函数代码还有详细的次函数代码,表明系统对设备进行的 详细操作和请求。w i ) m 设备驱动程序中有响应这些i r p 请求的分发例程。 2 支持w m i 州i 是w i n d o w sm a n a g e m e n ti n s t r u m e n t a t i o n 的缩写,是一种向系统管理员报告管 理信息的协议,这个协议能测量和管理消耗在本地或者是网络中客户机上的资源信息。 w d m 驱动程序必须支持w m i ,一般这种请求是通过i r p _ m j _ s y s t e m _ e o n t r o l 请求传递给 p d o ( 物理设备对象) 的,支持w m i 的驱动程序具有这样特点:可以测试应用程序性能、配 5 中北大学学位论文 置数据和其它信息:可以允许应用程序改变驱动程序中的设置,使得驱动程序执行特定 功能;可以通知应用程序,驱动程序检测到哪些事件或者警告信息。 3 支持类驱动程序微驱动程序分层结构 w 1 ) m 驱动程序采用分层结构,可和其它驱动程序相联系,接收建立在其他驱动程序 上的服务,也可向其它驱动程序发送i r p 请求。i g d 8 驱动程序模型支持类驱动程序微驱 动程序。类驱动程序是针对一个特定类设备的驱动程序,处理针对这一类设备的i r p 请 求。类设备驱动程序向上为这一类设备提供了基于i r p 的接口,向下对一个或者多个微 驱动程序定义了接口。而微驱动程序主要任务是为特定驱动程序提供服务。 4 提供系统总线驱动程序 w d m 环境提供了系统总线驱动程序,通过系统总线驱动程序,设备驱动程序实现对 物理设备的底层控制和资源配置。驱动程序依靠p d o ( 物理设备对象) 存取系统总线驱动 程序,一个f d o ( 功能设备对象) 通过向p d o 发送i r p ,实现和总线驱动程序的通信。 1 5u s b 设备驱动程序简介 u s b 设备驱动程序是基于w 1 ) m 结构之上的。w 1 ) m 的分层驱动程序结构在u s b 设备上 体现在驱动程序分为u s b 总线驱动程序和u s b 功能驱动程序两个层次“加。“”。 u s 3 总线驱动程序一般由w i n 9 8 或更高的操作系统提供,它位于u s b 功能驱动程序的 下面,负责与实际的硬件打交道,实现烦琐的底层通信。u s b 功能驱动程序( 也称为用户 自定义驱动) 由设备开发者编写,位于u s b 总线驱动程序的上层,不与实际的硬件打交道, 而是通过向u s b 总线驱动程序发送包含u r b ( u s br e q u e s tb l o c k 请求块) 的i r p 请求包, 来实现对u s b 设备信息的发送或接收。 1 6 本论文的目的和主要内容 本文的主要目的就是为一个基于u s b 通讯接口的电子会议桌牌设备开发w i n d o w s 下 的设备驱动程序。由于u s b 设备所具有的低成本、即插即用、热拔插、多级级联、传输 距离远、带宽高、简单易用等优点,使其更加广泛地应用于各种p c 外设、移动存储设备、 消费类电子产品以及工业领域。为了支持对这些设备的控制,必然需要根据设备的特性 6 中北大学学位论文 开发相应的驱动程序,因此,认真研究和分析设备驱动程序的开发很有必要。 本文首先深入分析了在w i n d o w s 环境下w d m 驱动程序开发模型的基本机制及实现的 基本原理,并介绍 u s b 设备驱动程序的体系结构。在文章的后半部分详细描述了本人 开发u s b 设备驱动程序的过程,并介绍了如何编译、调试及安装驱动程序。 本文组织结构如下: 第一章介绍w i n d o w s 设备驱动程序开发的背景及w i n d o w s 驱动程序的种类,并对 w i n d o w s 驱动程序模型w d m 的特点和u s b 设备驱动程序开发做了简单介绍。 第二章讨论w d m 的层次结构,驱动程序的加载流程以及驱动程序开发中用到的几个 重要的数据结构和对象。 第三章分析? d m 的数据读写方式及中断处理方式。 第四章对u s b 驱动程序体系结构进行介绍。 第五章首先对电子会议桌牌作了简单介绍,详细描述了本设计中u s b 设备驱动程序 的开发过程以及应用程序如何通过驱动程序来访问设备。 第六章详细描述该u s b 设备驱动程序的编译、调试及安装过程。 第七章是对本文的总结。 7 中北大学学位论文 2w d m 驱动程序的基本结构及主要概念 2 1 帅m 驱动程序基本结构的研究 2 1 1 帅m 的层次模型 w d m 是一个分层化的驱动程序模型,在这个模型中,驱动程序的层或堆栈一起工作 处理i o 请求。w i n d o w s2 0 0 0 的i o 子系统是基于对象的。对于w d m 驱动程序而言,最 重要的对象是驱动程序对象和设备对象“1 。w i n d o w s 的i 0 子系统也是包驱动的系统。 在这个系统中,每个t 0 操作可以通过一个i r p 描述,驱动程序的工作过程就是对i r p 的处理过程。 胁m 模型使用了如图2 1 的层次结构。图中左边是一个设备对象堆栈。设备对象是 系统为帮助软件管理硬件而创建的数据结构。一个物理硬件可以有多个这样的数据结 构。处于堆栈最底层的设备对象称为物理设备对象( p h y s i c a ld e v i c eo b j e c t ) ,或简称 为p d o 。位于设备对象堆栈中部的对象称为功能设备对象( f u n c t i o n a ld e v i c eo b j e c t ) , 或简称f d o 。在f d o 的上面和下面一般有一些过滤器设备对象( f i l t e rd e v i c eo b j e c t ) 。 位于f d o 上面的过滤器设备对象称为上层过滤器,位于f d o 下面p d o 之上的过滤器设备 对象称为下层过滤器。 图2 1w i ) m 中设备对象和驱动程序的层次结构”m ” 在w d m 驱动程序模型中,每个硬件设备一般包含两个驱动程序。其中一个驱动程序 8 中北大学学位论文 称为功能驱动程序,即硬件驱动程序。它知道如何控制设备的主要功能,负责初始化i o 操作,处理1 o 操作完成时所产生的中断事件,并为用户提供一种适当的设备控制方式。 另个驱动程序称为总线驱动程序( b u sd r i v e r ) ,它控制对总线上的所有设备的访问。 例如,如果想访问u s b 设备,必须使用u s b 总线驱动程序。总线驱动程序负责枚举它的 总线,这意味着发现总线上的全部设备和检测设备何时被添加或删除。 有些设备除了这两个驱动程序以外还有许多过滤器驱动程序( f i l t e rd r i v e r ) 。某 些过滤器驱动程序仅仅是在功能驱动程序执行i o 操作时进行监视。上层过滤器驱动程 序在功能驱动程序之前看到i r p ,它们有机会提供功能驱动程序根本不知道的额外特征。 低层过滤器驱动程序在功能驱动程序要向总线驱动程序发送i r p 时看到i r p 。在某些情 况下低层过滤程序可以修改功能驱动程序要执行的总线操作流。在w d m 驱动程序模型中, 总线是一个广义概念,不仅包括p c i 总线,还包括s c s i 卡,并行口,串行口,u s b 集线 器等。 层次结构可以使i o 请求过程更加明了,见图2 1 的右侧。每个影响到设备的操作 都使用i o 请求包。通常i r p 先被送到设备堆栈的最上层驱动程序,然后逐渐过滤到下 面的驱动程序。每层驱动程序都可以决定如何处理i r p 。驱动程序可以不做任何事, 直接将向i r p 传递给下层;也可以直接处理完该i r p ,不再向下传递;但更普遍的是驱 动程序也可以既处理了i r p ,又把i r p 传递下去。 操作系统的p n p 管理器按照设备驱动程序的要求构造设备对象堆栈。总线驱动程序 枚举出连接到总线上的设备,并为每个设备创建一个p d o 。一旦总线驱动程序检查到新 硬件存在,p n p 管理器就创建一个p d o ,之后便开始描绘如图2 1 所示的结构。 创建完p d o 后,p n p 管理器参照注册表中的信息查找与这个p d o 相关的过滤器和功 能驱动程序,它们出现在图2 1 的中部。系统安装程序负责填写部分注册表项,控制硬 件安装的i n f 文件负责填写其它的注册表项。这些表项定义了过滤器和功能驱动程序在 堆栈中出现的次序。所以,p n p 管理器是从安装最下层过滤驱动程序并调用它的 a d d d e v i c e 函数开始创建这个栈的。a d d d e v i c e 函数创建一个f i d o 对象,这样就在过滤 器驱动程序和f i l ) o 之问建立一个水平连接。a d d d e v i c e 接着把p d o 连接到f i d o 上。p n p 管理器继续向上执行,依次装入并调用每个低层过滤器、功能驱动程序和每个高层过滤 器,直到完成整个堆栈。 9 中北大学学位论文 上述过程中,注册表中的三种注册表键起着重要的作用,这三种注册表键是硬件 ( h a r d w a r e ) 键、类( c l a s s ) 键、服务( s e r v i c e ) 键。必须明确一点,这些名字( h a r d w a r e , c l a s s ,s e r v i c e ) 并不是某个专用子键的名称:它们是这三种键的一般称谓,其具体的 路径名要取决于它们所属的设备。 概括地讲,硬件键包含单个设备的信息,类键涉及所有相同类型设备的共同信息, 服务键包含驱动程序信息。设备的硬件键出现在注册表l o c a lm a c h i n e 分支的 s y s t e m c u r r e n t c o n t r o l s e t e n u m 子键上。通常不能查看到该键的内部信息,系统只允 许拥有系统帐号的用户访问该键。即只有内核模式程序和运行在系统帐号下的用户模式 服务可以读写e n u m 键和其子键,但是即使是管理员也不应该直接修改这些键的内容。 要想查看e n u m 键的内容,可以在a d m i n i s t r a t o r 特权级帐户下使用r e g e d i t 3 2 e k e 工 具查看。硬件键中的大部分键值是在安装过程中自动填入的,或者在安装开始后的某个 时刻,系统识别出来了新硬件并由系统自动填入的。有些是由i n f 文件中指明安装位置。 所有设备类的类键都出现在h k l m s y s t e m c u r r e n t c o n t r o l s e t c o n t r 0 1 c l a s s 键中。它 们的键名是由m i c r o s o f t 赋予的g u i d 值。对设备驱动程序重要的最后一个键是服务键。 它指出驱动程序执行文件的位置,以及控制驱动程序装入的一些参数。服务键位于 h k l m s y s t e m c u r r e n t c o n t r o l s e t s e r v i c e s 键中。 2 1 2 驱动程序加载流程嘶m 嘲 在w i n d o w s n t 中,i 0 管理器负责加载驱动程序,而在w i n d o w s 2 0 0 0 中,是由p n p 管理器发现设备并加载驱动程序。不过在发现设备后,它们加载驱动程序所作的操作是 类似的。当p a p 管理器检测到一个新设备装入时,打开设备的硬件键和类键并且按如下 顺序装入驱动程序: 1 安装任何硬件键中为设备指定的低层过滤器驱动程序。如果l o w e r f i l t e r 值的类 型是r e g _ m u l t i _ s z ,那么该键可以指定多个驱动程序,其装入顺序由它们在数据串中的 顺序决定。 2 安装类键中指定的任何下层过滤器驱动程序。同样,它也可以指定多个驱动程序, 其装入顺序由它们在数据串中的顺序决定。 3 安装由硬件键中s e r v i c e 值指定的驱动程序。 1 0 中北大学学位论文 4 安装任何硬件键中指定的高层过滤器驱动程序,同样,它也可以指定多个驱动程 序,以在u p p e r f i l t e r s 值数据串中的顺序依次加载。 5 安装类键中指定的任何高层过滤器驱动程序,同样,它也可以指定多个驱动程序, 以在u p p e r f i l t e r s 值数据串中的顺序依次加载。 系统“装入”一个驱动程序,是指系统把驱动程序的映像映射到虚拟内存中,并重 定位内存参考,最后调用驱动程序的主入口点。主入口点通常命名为d r i v e r e n t r y 。如 果驱动程序已经在内存中,则装入过程仅仅是增加驱动程序映像的参考计数。 属于类和设备实例的上下层过滤器驱动程序在装入过程中并没有出现嵌套方式。系 统以p n p 管理器装入驱动程序的顺序调用驱动程序的a d d d e v i c e 函数,而这个顺序与设 备对象在设备堆栈中出现的顺序完全一致。 2 2 驱动程序中的主要数据结构 在w d m 驱动程序和n t 驱动程序中,系统使用多种数据结构及对象作为其控制的各 种硬件设备的逻辑抽象。现将最常用到的一些数据结构和对象进行介绍: 2 2 1d ri v e r o b j e c t 对象 每个驱动程序有唯一的一个d r i v e r 对象。i o 管理器使用d r i v e r 对象数据结构代 表每个设备驱动程序“m 。这个对象中保存驱动程序各个例程的指针。利用这些指针i o 管理器把i r p 发送到正确的例程并执行。另外,d r i v e r 对象还有指向这个驱动程序的设 备链表的指针,通过它,驱动程序可以找到它控制的设备。图2 2 给出了d r i v e r o b j e c t 对象的结构。 对象中的d e v i c e o b j e c t 域( p d e v l c e _ o b j e c t ) 拥有一个设备对象数据结构串,驱 动程序管理的每个设备都有一个p d e v i c e _ o b j e c t 。i 0 管理器把这些设备对象连接起来 并维护这个域。非w d m 驱动程序的o r i v e r u n l o a d 函数,为了删除这些d e v i c e o b j e c t , 会使用这些域来遍历设备对象链。w d m 驱动程序可能并不特别需要使用这个域。 l l 中北大学学位论文 + 1d e v i c e 对象l 卜 d r i v e r 对象:; d e v i c e o b j e c t r l 例程 工 s t a r t i o 叫d e v i c e 对象l u n l o a d丽。 m a j o r f u n c t i o n 1 叫例程 图2 2d r i v e r 对象 s t a r t i o 域( p d r i v e r - s t a r t i o ) ,指向一个驱动程序中处理实际i o 操作的函数。 u n l o a d 域( p d r i v e r _ u n l o a d ) ,指向驱动程序中的一个清理函数,它和d r i v e r e n t r y 对应,是卸载驱动程序时清理现场用的。不过,w d m 驱动程序可能没有任何重要的清理 清理工作要做,因为在w d m 驱动程序中,这些工作通常由p n p 管理器完成。 m a j o r f u n c t i o n g 域( p d r i v e r _ d i s p a t c h 数组) ,是一个指针数组,它指向驱动程序 中的回调函数,这些函数处理大约2 0 种类型的i o 请求。这个数组也有大量的处理工 作要傲,因为它定义了如何使用i o 请求进入我们编写的回调函数代码。 2 2 2d e v i c e 对象 d e v i c e 对象是设备的软件抽象。它代表驱动程序所管理的设备。驱动程序为它管理 的每一个设备都建立一个d e v i c e 对象“。该对象保存有驱动程序d r i v e r 对象的指针和 当前设备正在处理的i r p 。它还维护一个挂接到d e v i c e 对象上的i r p 链表的指针。这个 链表上的i r p 是所有等待该设备处理的u o 请求的排队。另外,d e v i c e 对象还有一个 d e v i c ee x t e n s i o n 域。这是一块可变大小的非分页内存,其具体的内容在驱动程序中设 定。通常存放与设备有关的变量和使用对象的指针。图2 3 给出了d e v i c e 对象的结构。 o e v i e c e 对象中的d r i v e r o b j e c t 域( p d r i v e r _ o b j e c t ) ,指向描述与该设备对象相联 的d r i v e r 对象。通常调用i o c r e a t e d e v i c e 创建d e v i c e 对象。过滤器驱动程序有时需 要使用这个指针来找到它们正过滤的设备的d r i v e r 对象,以便能够查询m a j o r f u n c t i o n 表中的函数入口。 1 2 中北大学学位论文 图2 3d e v i c e 对象 n e x t d e v i c e 域( p d e v i c eo b j e c t ) ,指向与本设备对象同属于一个驱动程序的下一 个设备对象,这个域把以驱动程序对象中的d e v i c e o b j e c t 成员为起始点的设备链连接 起来。对于w i ) m 驱动程序来说没有必要使用这个域。 c u r r e n t i r p 域,指向最近发往驱动程序s t a r t i o 函数的i o 请求包。 d e v i c e e x t e n s i o n 域,指向程序员自己定义的包含设备特定信息的数据结构。i o 管理器为该数据结构分配空间,不过它的名称与其中的内容完全由程序员自己决定。常 见约定是使用d e v i c e _ e x t e n t i o n 类型声明数据结构,用个指向设备对象的指针访问 它。 2 2 3i 0 请求包 i 0 请求包( i r p ) 是驱动程序操作的中心“儿4 。内核通常通过发送i r p 来运行驱动 程序中的代码。i r p 是一个内核“对象”,使用一个预先定义好的数据结构,带有一组对 它进行操作的i o 管理器例程。i o 管理器接受一个i o 请求,然后再把它传递到合适 的驱动程序栈中的最高驱动程序之中,分配并初始化一个i r p 。 一个i r p 由一个固定的首都和可变数目的i r p 栈单元组成,每个i o 请求由一个主 功能代码并有可能有次功能代码。例如i r p _ m j _ p n p 即插即用i r p 有几个次功能( 如 i r p 删j t a r t d e v i c e ) 。i r p 含有该i 0 请求的各项参数,如写i o ,转化成i r p 则包 含了写地址指针、写长度、数据内容指针等参数。 1 i r p 首部,其首部结构如表2 1 所示。 1 3 中北大学学位论文 表2 ii r p 首部结构m ,“:。:。;。斛:。量 t y p es i z e m d l a d d r e s s f l a g s a s s o c i a t e d i r p t h r e a d l i s t e n t r y
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 周口公司外包活动方案
- 商务接待营销活动方案
- 商场年中回馈活动方案
- 咖啡品鉴公司活动方案
- 咖啡店抗疫活动方案
- 周日活动肯德基活动方案
- 团队消防活动方案
- 团体活动过桥活动方案
- 哲学教研活动方案
- 团队公司野餐活动方案
- 合并财务报表格式(2019版)
- 心脏射频消融术
- 《商务邮件礼仪》课件
- 《配电自动化系统》课件
- 创业基础理论与实务(宁波财经学院)知到智慧树章节答案
- 《某飞机场物业管理服务方案》
- 《让子弹飞》电影赏析
- 移动OA系统建设方案
- DB34T∕ 2423-2015 安徽省城市道路交叉口信号控制设计规范
- 2023年南京市卫健委所属部分事业单位招聘考试试题及答案
- 安徽省合肥市2023-2024学年七年级下学期期末考试数学试卷(含答案)
评论
0/150
提交评论