(计算机应用技术专业论文)基于win2000下的wdm驱动程序探究.pdf_第1页
(计算机应用技术专业论文)基于win2000下的wdm驱动程序探究.pdf_第2页
(计算机应用技术专业论文)基于win2000下的wdm驱动程序探究.pdf_第3页
(计算机应用技术专业论文)基于win2000下的wdm驱动程序探究.pdf_第4页
(计算机应用技术专业论文)基于win2000下的wdm驱动程序探究.pdf_第5页
已阅读5页,还剩64页未读 继续免费阅读

(计算机应用技术专业论文)基于win2000下的wdm驱动程序探究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中文摘要 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 ) 是m i c r o s o f t 推出的 全新设备驱动程序模式,旨在通过提供一种灵活的方式来简化驱动程序的开发, 在实现对新硬件支持的基础上减少并降低所必须开发的驱动程序的数量和复杂 性。粕m 实现了模块化、分层次类型的驱动程序结构。模块化的w d m 体系结构, 灵活统一的接口使操作系统可以动态的配置不同的设备驱动程序模块来支持特 定的设备。用w d m 可开发w i n d o w s9 8 和w i n d o w s2 0 0 0 的设备驱动程序。 本文深入剖析了在w i n d o w s2 0 0 0 环境下w d m 驱动程序开发模型的基本机制 以及实现的基本原理,详细说明了w i n d o w s2 0 0 0 环境下设备驱动程序的开发过 程,并尝试使用d d k ( 微软提供的驱动程序开发工具) 开发了一个w d m 简单测试 驱动程序。 本文共五章:第一章,“绪论”描述了w i n d o w s2 0 0 0 操作系统的结构与w d m 驱动程序模型。第二章,“w i n d o w s 驱动程序的基本结构和重要概念”讨论了 w i n d o w s2 0 0 0 用于管理i 0 设备的基本数据结构和i r p 处理的“标准模型”等 重要概念,以及驱动程序与这些数据结构相联系的基本方式。第三章,“读写数 据”讨论了执行i o 操作的驱动程序代码。阐述怎样从p n p 管理器那里获得配置 信息,怎样用这些信息初始化驱动程序,以使它能处理数据读写i r p 。第四章, “w d m 的一般处理流程”讨论了用w d m 开发驱动程序的一般流程,重点分析了每 个w d m 都必须包含的两个基本例程,d r i v e r e n t r y 和a d d d e v i c e ,并且介绍了i n f 文件的基本写法和关于注册表的操作。第五章,“应用w d m 实现一个具体的驱动 程序”,介绍了开发一个w d m 简单测试驱动程序的基本过程。 关键词: w i n d o w s2 0 0 0 设备驱动程序 w d md d ki r p 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 m ( w i n d o w sd r i v e rm o d e l ) i sa ne n t i r e l yn e w m o d e lo f d e v i c ed r i v e r sd e s i g nb ym i c r o s o f t i ti n t e n d sf o rp r o v i d i n gaf l e x i b l em e a n s t os i m p l i f yt h ed e v e l o p m e n to fd e v i c ed r i v e r sa n dt or e d u c et h en u m b e ro fd r i v e r s r e q u i r e da sw e l la st h ec o m p l e x i t yo fd e v e l o p m e n to nt h eb a s i so fs u p p o r tf o rn e w h a r d w a r e w d mr e a l i z e st h em o d u l a r h i e r a r c h i c a ld r i v e rs t r u c t u r e t h em o d u l a r w d ma r c h i t e c t u r ea n dt h ef l e x i b l ea n du n i f o r mi n t e r f a c ee n a b l et h eo p e r a t i n gs y s t e m t os u p p o r tap a r t i c u l a rd e v i c eb yc o n f i g u r i n gv a r i o u sd e v i c ed r i v e r sd y n a m i c a l l y u s i n gw d m , y o u c a nd e v e l o pd e v i c ed r i v e r sf o rb o t hw i n d o w s9 8a n dw i n d o w s 2 0 0 0 t h i sp a p e rd i s c u s s e si nd e p t ht h eb a s i cm e c h a n i s mo ft h ew d md r i v e rm o d e l a n dt h ef i m d a m e n t a l so fi t sr e a l i z a t i o no nw i n d o w s2 0 0 0 ,e x p o u n d st h ep r o c e d u r eo f d e v e l o p i n gd e v i c ed r i v e r so nw i n d o w s2 0 0 0 , r e a l i z e sap r a c t i c a ld e v i c ed r i v e r t h i sp a p e ri sc o m p r i s e do f5c h a p t e r s :c h a p t e ro n e ,i n t r o d u c t i o n d e s c r i b e st h e s t r u c t u r eo fw i n d o w s2 0 0 0o p e r a t i n gs y s t e ma n dt h ew d md r i v e rm o d e l c h a p t e r t w o b a s i cs t r u c t u r e sa n di m p o r t a n tc o n c e p t i o no fw d md r i v e r s d i s c u s s e st h e b a s i cd a t as t r u c t u r e su s e df o ri od e v i c em a n a g e m e n ta n ds o m ei m p o r t a n tc o n c e p t i o n s s u c ha st h e “s t a n d a r dm o d e l ”o fi r pp r o c e s s i n gi nw i n d o w s2 0 0 0 a n dt h ew a yb y w h i c had r i v e rr e l a t e st ot h e s ed a t as t r u c t u r e s i nc h a p t e rt h r e e ”r e a da n dw r i t e d a t a ,t h es o u r c ec o d eo fad r i v e rf o ry oo p e r a t i o ni sd i s c u s s e d i te x p o u n d sh o w t o g e tt h ec o n f i g u r a t i o ni n f o r m a t i o nf r o mp i l pm a n a g e r , h o wt oi n i t i a l i z ead r i v e rw i m t h i si n f o r m a t i o ns ot h a tt h ed r i v e rc a nh a n d l ed a t ar e a d i n ga n dw r i t i n gi r p c h a p t e r f o u r , “t h eg e n e r a ld e a l i n gp r o c e s so fw d m d i s c u s s e st h eg e n e r a lp r o c e s s i n gt o d e v e l o pd r i v e r sw i t ht h eu s eo f w d m i t f o c u s e so nt w ob a s i cp r o c e d u r e sn e c e s s a r yi n e v e r yw d md r i v e r ,d r i v e r e n t r ya n da d d d e v i c e ,a n di n t r o d u c i n gt h eb a s i cw r i t i n g m e t h o do fi n ff i l e sa n dc e r t a i no p e r a t i o n so nt h es y s t e mr e g i s t r y c h a p t e rf i v e , u s i n gw d m t or e a l i z es p e c i f i cd r i v e r s i n t r o d u c e st h e b a s i cs t e pt op r a c t i c a l l y d e v e l o pd r i v e r s k e y w o r d s :w i n d o w s2 0 0 0 ,d e v i c ed r i v e r s ,w d m ,d d k ,i r p 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作和取得的 研究成果,除了文中特别加以标注和致谢之处外,论文中不包含其他人已经发表 或撰写过的研究成果,也不包含为获得苤壅盘堂或其他教育机构的学位或证 书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中 作了明确的说明并表示了谢意。 学位论文作者签名:彳b 移 签字日期:河年r 月,a 日 学位论文版权使用授权书 本学位论文作者完全了解盘注盘鲎有关保留、使用学位论文的规定。 特授权:叁洼盘堂可以将学位论文的全部或部分内容编入有关数据库进行检 索,并采用影印、缩印或扫描等复制手段保存、汇编以供查阅和借阅。同意学校 向国家有关部门或机构送交论文的复印件和磁盘。 ( 保密的学位论文在解密后适用本授权说明) 学位论文作者签名: t b 拐 导师签名: ) 噼彰 签字曰期: 川年f 月f 3 日签字日期:。州,年r 月f 驴日 天津大学硕士学位论文第一章绪论 第一章绪论 1 1w 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 。一些底层的技术直在各个“w i n d o w s ”平台下共 享,而其他的一些技术随版本的不同有了很大的变化。微软发布w i n 3 2a p i 的目 的之一,就是鼓励开发者能够编制出在“w i n d o w s ”平台之间兼容的应用程序。 由于设备驱动程序是与操作系统最低层的功能发生交互,因此,如果要实现跨平 台的兼容,首先必须在不同平台的底层结构上做到兼容。 w i n d o w s 3 0 的基本结构一直延续到w i n d o w s 9 x 家族,虽然后来的操作系统 在驱动程序的开发和管理上有了非常大的改变,但底层的基本结构没有变化。也 就是说,一个为w i n d o w s 3 0 开发的设备驱动程序,在大多数情况下,可以不加 修改的使用在w i n d o w s 9 5 和w i n d o w s 9 8 平台下。在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 o 。 虚拟设备驱动程序,原来的设计目标是为了支持在w i n d o w s 平台下的设备,它作 为动态连接库( d l l ) 链接到操作系统里,工作在保护模式下( r i n g0 ) 。v x d 解 决了那些常规应用程序不能完成的工作,比如直接硬件的读写,也可以说,使用 v x d 是扩展操作系统内核的一种方法。v x d 最初的编写采用的是i n t e l 汇编语言, 后来随着v t o o l s d 的使用,使用c 和c 十+ 也开始流行起来。 w i n d o w sn t 的设计体现了更现代和模块化的内部体系,它的目标是更好的 灵活性和更加的健壮,兼容w i n d o w s 3 x 和w i n d o w s 9 x 并不是它的设计目标,因 此,w i n d o w sn t 的内部体系中没有提供对以前w i n d o w s 平台的兼容。 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 也定义了一 种类驱动程序体系,并且支持某些设备类。比如,系统中有s c s i 类驱动程序支 天沣大学硕士学位论文第一章绪论 持s c s i 磁带设备和s c s i 磁盘。w i n d o w sn t 的这种驱动程序体系,在w i n d o w s9 8 和w i n d o w s2 0 0 0 中得到了继承和扩展,形成了现在的w i ) m 体系。 认识到跨平台兼容能力的价值后,微软开始尝试统一设备体系,给未来的驱 动程序开发提供一个简单的平台。微软的做法,不是重新开发一套新的体系,而 是在更合理的w i n d o w sn t 体系的基础上,进行必要的完善,从而形成一个新的 设备驱动程序体系,称为w i n d o w sd r i v e r m o d e l ,或w d m ,在更早的技术文档中, 微软也曾用过w i n 3 2d r i v e rm o d e l 这个名字。w i n d o w s9 8 最先支持w d m ,微软 随后推出的操作系统中也都支持w d m ,包括w i n d o w s2 0 0 0 系列,w i n d o w sm e , w i n d o w sx p 。 1 2 驱动程序与系统内核的关系 驱动程序在任何操作系统下都和系统内核有着密切的关系,尤其在w i n 2 0 0 0 下。在进入w i n 2 0 0 0 驱动程序世界之前先介绍一下w i n 2 0 0 0 构架和驱动程序设计 原理。w i n 2 0 0 0 操作系统是计算机历史上较为安全的操作系统,图卜1 是w i n d o w s 2 0 0 0 操作系统的抽象模型,该图着重指出了驱动程序开发者所关心的特征。驱 动程序本质上可以看作是工作在系统底层的一个d l l 。软件要么执行在用户模 式中,要么执行在内核模式中。当用户模式程序需要读取设备数据时,它就调用 w i n 3 2a p i 函数,如r e a d f i l e 。w i n 3 2 子系统模块( 如k e r n e l 3 2 d l l ) 通过调用平 台相关的系统服务接口实现该a p i ,而平台相关的系统服务将调用内核模式支持 例程。在r e a d f i l o 调用中,调用首先到达系统d l l ( n t d l l d l l ) 中的一个入口点, n t r e a d f i l e 函数。然后这个用户模式的n t r e a d f i l e 函数接着调用系统服务接口, 最后由系统服务接口调用内核模式中的服务例程,该例程同样名为n t r e a d f i l e 。 天津人学硕士学位论文 第一章绪论 图卜1w i n d o w s2 0 0 0 系统结构 系统中还有许多与n t r e a d f i l e 相似的服务例程,它们同样运行在内核模式 中,为应用程序请求提供服务,并以某种方式与设备交互。它们首先检查传递给 它们的参数阻保护系统安全或防止用户模式程序非法存取数据,然后创建一个称 为“i o 请求包( i r p ) ”的数据结构,并把这个数据结构送到某个驱动程序的入 口点。在刚才的r e a d f i l e 调用中,n t r e a d f i l e 将创建一个主功能代码为 i r p _ m j r e a d ( d d k 头文件中的一个常量) 的i r p 。实际的处理细节可能会有不同, 但对于n t r e a d f i l e 例程,可能的结果是,用户模式调用者得到一个返回值,表 明该i r ? 代表的操作还没有完成。用户模式程序也许会继续其它工作然后等待操 作完成,或者立即进入等待状态。不论哪种方式,设备驱动程序对该i r p 的处理 都与应用程序无关。 执行i r p 的设备驱动程序最后可能会访问硬件。对于p i o 方式的设备,一个 i r pm j r e a d 操作将导致直接读取设备的端口( 或者是设备实现的内存寄存器) 。 尽管运行在内核模式中的驱动程序可以直接与其硬件会话,但它们通常都使用硬 件抽象层( i a l ) 访问硬件。读操作最后会调用r e a d _ p o r t _ u c h a r 从某个i o 口读 取单字节数据。h a l 例程执行的操作是平台相关的。在i n t e lx 8 6 计算机上, i a l 使用i n 指令访问设备端口,在a j p h a 计算机上,h a l 使用内存提取指令访问设 天津夫肇硕士学位论文 第一章绪论 各实现的内存寄存器。 驱动程序完成一个i 0 操作后,通过调用一个特殊的内核模式服务例程来完 成该i r p 。完成操作是处理i i c p 的最后动作,它使等待的应用程序饿复运行。 1 3w i n d o w s2 0 0 0 驱动 1 3 1w i n d o w s2 0 0 0 驱动 w i n d o w s2 0 0 0 系统可以使用多种驱动程序,图卜2 显示了其中几种:, 图l - 2w i n d o w s2 0 0 0 中的设备驱动程序种类 ( 1 ) 虚拟设备驱动程序( v d d ) 是一个用户模式部件,它可以使d o s 应用程序访 问x 8 6 平台上的硬件。v d d 通过屏蔽i 0 权限掩码来捕获端口存取操作,它基本 上是模拟硬件操作,这对于那些直接对裸机硬件编程的应用程序特别有用。尽管 这种驱动程序在w i n d o w s9 8 和w i n d o w s2 0 0 0 中共享一个名称并且有相同的功能, 但实际上它们完全不同。用v d d 缩写代表这种驱动程序,用v x d 缩写代表w i n d o w s 9 8 中的虚拟设备驱动程序以示区别。 ( 2 ) 内核模式驱动程序的分类包含许多子类。p n p 驱动程序就是一种遵循 w i n d o w s2 0 0 0 即插即用协议的内核模式驱动程序。 ( 3 ) w d m 驱动程序是一种p n p 驱动程序,它同时还遵循电源管理协议,并能 在w i n d o w s9 8 和w i n d o w s2 0 0 0 间实现源代码级兼容。w d m 驱动程序还细分为类 驱动程序( c l a s sd r i v e r ) 和进你驱动程序( m i n id r i v e r ) ,类驱动程序管理属于已 定义类的设备,迷你驱动程序向类驱动程序提供厂商专有的支持。 ( 4 ) 显示驱动程序是用于显示和打印设备的内核模式驱动程序。 ( 4 ) 显示驱动程序是用于显示和打印设备的内核模式驱动程序。 天津大学硕士学位论文 第一章绪论 ( 5 ) 文件系统驱动程序在本地硬盘或网络上实现标准p c 文件系统模型( 包括 多层次目录结构和命名文件概念) 。 ( 6 ) 遗留设备驱动程序也是一种内核模式驱动程序,它直接控制一个硬件设 备而不用其它驱动程序帮助。这种驱动程序主要包括w i n d o w sn t 早期版本的驱 动程序,它们可以不做修改地运行在w i n d o w s2 0 0 0 中。 1 3 2 内核模式驱动程序的属性 内核模式驱动程序有许多共有的属性,下面将分别讨论这些属性。 ( 1 ) 可移植性 内核模式驱动程序的源代码应该可以移植于所有w in d o wn t 平台。w d m 驱动 程序在其定义中就规定了其源代码可以在w i n d o w s9 8 和w i n d o w s2 0 0 0 之间相互 移植。为了实现这种可移植性,驱动程序应该全部用c 写。应避免使用编译器厂 商专有的语言特征,并避免使用没有被操作系统内核输出的运行时间库函数。 在大多数情况下,w d m 驱动程序的二进制映像可以兼容w i n d o w s9 8 和 w i n d o w s2 0 0 0 ( 3 2 位版本) 。如果仅使用w d m h 中声明的内核模式支持函数,那 么可以很容易地实现驱动程序的源代码级兼容。但操作系统之间的差异会在某些 地方影响驱动程序的移植性。 ( 2 ) 可配置性 内核模式驱动程序应避免对设备特征或某些系统设置作绝对假设,这些系统 设置会随着平台的改变而改变。例如,在x 8 6 平台上,标准串行口使用一个专用 的i r q 和8 个i 0 端口,这些数值持续2 0 年从未改变。把这些值直接写至0 驱动 程序中将使驱动程序失去可配置性。 为了实现可配置性,首先应该在代码中避免直接引用硬件,即使是在平台相 关的条件编译块中也是这样。应该使用h a l 工具或调用低级总线驱动程序,或者 实现一个标准的或定制的控制接口,并通过控制面板程序与用户交互。另外,还 应该支持w i n d o w s 管理仪器( 赚i ) 控件,这种控件允许用户和管理员在分布式企 业环境中配置硬件特征。最后,应该使用注册表作为配置信息的数据库,这可以 使配置信息在系统重新启动后仍然存在。 ( 3 ) 可抢先性和可中断性 w i n d o w s2 0 0 0 和w i n d o w s9 8 都是多任务操作系统,可以为任意多个线程分 配c p u 时间。在大部分时间中,驱动程序例程执行在可以被其它线程( 在同一个 c p u 上) 抢先的环境中。线程抢先取决于线程的优先级,系统使用系统时钟为线 程分配c p u 时间片。 w i n d o w s2 0 0 0 还使用了一个中断优先级的概念,即i r q l 。可以认为c p u 中 天津大学顾士学位论文第一章结论 有一个i r q l 寄存器,它记录着c p u 当前的执行级别。有三个i r q l 值对设备驱动 程序有重要意义:p a s s i v e l e v e l ( 值为0 ) 、d i s p a t c hl e v e l ( 值为2 ) ,以及所谓 的设备中断请求级d i r q l ( 大于2 的值,设备的中断服务例程在该级上执行) 。在 大部分时间中,c p u 执行在p a s s i v e l e v e l 级上,所有的用户模式代码也运行在 p a s s i v e _ l e v e l 级上,并且驱动程序的许多活动也都发生在p a s s i v e _ l e v e l 级上。 当c p u 运行在p a s s i v e级时,当前运行的线程可以被任何优先级大于它的_level 线程抢先。然而,一旦c p u 的i r q l 大于p a s s i v e _ l e v e l 级,线程抢先将不再发 生,此时c p u 执行在使c p u 越过p a s s i v e _ l e v e l 级的任意线程上下文中。 可以把高于p a s s i v e _ l e v e l 级的i r q l 看成是针对中断的优先级。这是一个 与支配线程抢先机制不同的优先级方案,正如前面说的,在p a s s i v el e v e l 级上 没有线程抢先发生。但是,运行在任何i r q l 级上的活动都可以被更高i r q l 级上 的活动中断。所以驱动程序必须假定在任何时刻都可能失去控制权,而此时系统 可能需要执行更基本的任务。 ( 4 ) 多处理器安全 w i n d o w s2 0 0 0 可以运行在多处理器计算机上。w i n d o w s2 0 0 0 使用对称多处 理器模型,即所有的处理器都是相同的,系统任务和用户模式程序可以执行在任 何一个处理器上,并且所有处理器都平等地访问内存。多处理器的存在给设备驱 动程序带来了一个困难的同步问题,因为执行在多个c p u 上的代码可能同时访问 共享数据或共享硬件资源。w i n d o w s2 0 0 0 提供了一个同步对象,自旋锁( s p i n l o c k ) ,驱动程序可以使用它来解决多处理器的同步问题。 ( 5 ) 基于对象 w i n d o w s2 0 0 0 内核是基于对象的,即驱动程序和内核例程使用的许多数据 结构都有公共的特征,这些特征集中由对象管理器管理。这些特征包括名称、参 考计数、安全属性,等等。在内部,内核中包含了许多执行公共对象管理的方法 例程,例如打开和关闭对象或析取对象名。 驱动程序使用内核部件输出的服务倒程来维护对象或对象中的域。某些内核 对象,例如内核中断对象,是不透明的,d d k 头文件中没有其数据成员的声明。 其它内核对象,如设备对象或驱动程序对象则是部分不透明的,d d k 头文件中声 明了其结构的全部成员,但d d k 文档中仅描述了可访问的成员并警告驱动程序开 发者不要直接访问或修改其它成员。对于驱动程序必须间接访问的不透明域,可 以用支持例程访问。部分不透明的对象类似于c 十+ 的类,有任何人都能访问的公 共成员,还有必须通过方法函数才能访问的私有成员和保护成员。 ( 6 ) 包驱动 i o 管理器和设备驱动程序使用i 0 请求包来管理i 0 操作的具体细节。首 6 天津大学硕士学位论文第一章绪论 先,某个内核模式部件创建一个i r p ,该i r p 可以是让设备执行一个操作、向驱 动程序发送一个命令,或者向驱动程序询问某些信息的请求。然后i o 管理器把 这个i r p 发送到驱动程序输出的例程上。一般,每个驱动程序例程仅执行i r p 指 定的一部分工作然后返回i 0 管理器。最后,某个驱动程序例程完成该i r p ,之 后i o 管理器删除该i r p 并向原始请求者报告结束状态。 ( 7 ) 异步 w in d o w s2 0 0 0 允许应用程序和驱动程序在起动一个i 0 操作后继续执行, 而此时i 0 操作仍在进行。所以,需要长时间运行的i o 操作应该以异步方式执 行。即当驱动程序接收到一个i r p 后,它首先初始化用于管理该i o 操作的任何 状态信息,然后安排i r p 的执行,而该i r p 将在以后的某个时刻完成,最后返回 调用者。由调用者决定是否等待该i r p 的完成。 作为一个多任务操作系统,w i n d o w s2 0 0 0 根据线程的适合性和优先级来调 度它们在有效处理器上的执行。通常,驱动程序在某些不可预测线程的上下文中 应该使用异步方式处理i o 请求。驱动程序应避免阻塞任意线程,这使得驱动程 序有了这样的架构:通过执行离散的操作并返回来响应硬件事件。 1 3 3 驱动程序组成原理与研制要点 一个设备驱动程序的模块组成主要包括:初始化自己、创建和删除设备、处 理w i n 3 2 打开和关闭文件句柄的请求、处理w i n 3 2 系统的i o 请求、对设备的串 行化访问、访问硬件、调用其它驱动程序、取消i o 请求、超时t o 请求、处理 一个p n p 设备被加入或删除的情况、处理电源管理请求、调用w i n d o w s 管理诊断 w m i 向系统管理员报告。 其中,”初始化”模块必不可少,所有驱动程序都需要通过分发例程处理用户 的i o 请求。而w d m 风格的设备驱动程序需要有”即插即用( p n p ) ”模块以及安 装标识的i n f 文件。在上述不同模块之间需要交互,其中的一些交互可以直接通 过函数调用,而大量信息需要通过数据结构传递( 比如在”设备对象”之类的数据 结构中可以存储每个设备的信息) 。 分发例程指的是”创建”、”读”、写”、”关闭”等处理程序,它可以执行对 i r p 的初始化处理,检查参数的合法性。在驱动程序编写中常遇到的非常棘手的 所谓”同步问题”,指的就是两个或更多的i r p 分发例程往往要”同时”运行,它不 仅在多处理器系统中会遇到,而且在单处理器系统中有时也很尖锐:比如单处理 器系统上的一个分发例程在等待对低层驱动程序调用完成的同时,另一个i r p 分 发例程又被调用。处理这种冲突的机制主要有两种:一种是临界段例程,依此保 证代码不会被中断处理程序中断;另一种机制是通过s t a r t i o 例程串行处理i r p , 天津大学硕十学位论文第一章绪论 每个设备对象有一个内部的i r p 队列,驱动程序的分发例程把i r p 插入到这个设 备队列中,内核z 0 管理器从该队列一个个取出i r p ,并传递到驱动程序的 s t a r t i o 例程,s t a r t l o 例程串行处理i r p ,以确保不与其它i r p 处理程序冲突, 但是s t a r t i o 例程仍然需要通过临界段例程避免与硬件中断发生冲突。 中断是用于停止处理器对一个任务的执行,而被强制运行某个中断去处理代 码。中断包括软件中断和硬件中断。中断具有优先级,低优先级中断会被高优先 级的中断所中断,以保证重要任务会优先执行。硬件产生的中断总是比软件产生 的中断优先级要高。硬件中断类型包括:设备中断请求级处理程序的执行、配置 文件定时器、时钟、同步器、处理器之间中断级、电源故障级;软件中断包括异 步过程调用执行、线程调度、延迟过程调用执行。至于常规线程执行则没有中断。 驱动程序的主要的初始化入口点是一个称为d r i v e r e n t r y 的例程。多数w d m 设备对象是由p n p 管理器调用a d d d e v i c e 入口点创建,该例程在插入新设备和安 装1 n f 文件指示相对应的驱动程序时被调用,之后,一系列p n pi r p 被发送到驱 动程序,指示设备应何时启动和查询其功能。为了让应用程序认知驱动设备存在, 开发人员必须为每个设备对象创建使w i n 3 2 可见的符号链接,这时可以有两种实 现途径:一种是,采用显式的硬编码”符号链接名,对此,应用程序的源代码中 也具有设各名的硬编码;还有一种是采用设备接口,每个设备接口由一个g u i d ( 全局唯一标识符) 标识,对设备注册为具有某个特定的设备接口时就创建了一 个符号链接。用户程序可以搜索有特定g u i d 的所有设备。驱动程序的代码是由 系统内核通过发送i o 的i r p 请求运行的。i r p 是设备驱动程序的基本结构。 内核所调用的驱动程序中的其它多个例程就是所谓回调例程( c a l l b a c k ) , 每个回调例程具有一个标准的函数原型,它适用于对应的环境。常用的回调例程 包括:u n l o a d ( 卸载驱动程序) 、a d d d e v i c e ( 添加一个新的p n p 设备) 、s t a r t i o ( 串行处理i r p ) 、i s r ( 中断服务例程) 、d p c f o r l s r ( 延时过程调用例程) 、临 界段例程、撤消i r p 的c a n c e l 例程、一个低层驱动程序完成一个i r p 处理时所 调用的c o m p l e t i o n 侧程、当d 凇通道可用时调用的a d a p t e r e o n t r o l 、t i m e r ( 秒 级定时器回调例程) 、低于1 秒的超时例程c u s t o m t i m e r d p c 、用于处理工作队列 的c u s t o m d p c 、r e i n i t i a l i z e ( 用于初始化耗时很长的驱动程序) 。 硬件驱动程序应当具有容错性,比如连接电缆断开或缓存区过载,并能够将 错误信息反馈到应用程序。可以检查硬件状态位( 如打印机缺纸指示) ,并能够 处理快速i o 事件。 与其它w i n d o w s 编程类似的是,在编写硬件驱动程序时如何分配或访问内存 是一件很讲究细节的技术活。大家知道,w i n d o w s 中采用的虚拟内存意味着系统 可以使用比物理内存更多的内存。虚拟内存的实现方式是:将每个应用程序的可 天津大学硕士学位论文第一章绪论 能地址空间划分成固定大小的块,这些块称为页( x 8 6 处理器的页大小为4 k b , a l p h a 处理器的页为8 k b ) 。页可以驻留在物理内存,也可交换到硬盘。设备驱动 程序分配的内存通常有两种:可以是交换型的分页内存,也可以是永久驻留的非 分页内存。如果试图在线程调度或更高中断级访问分页内存,就会引起缺页故障, 造成内核崩溃。即使是常规线程,如果访问非驻留的分页内存,内核就会造成线 程阻塞,直到内存管理器把内存装回内存。问题的关键是,在设计驱动程序时, 一方面忌讳滥用非分页内存,另一方面却不得不经常使用非分页内存。因为要在 线程调度或更高中断级访问内存,必须调用非分页内存。当完成内存调用后,应 当对所有类型的内存通过e x f r e e p o o l 释放。假如不释放内存,将会减少内存, 因为即使当驱动程序卸载后,内核并不收集这些分配了的内存。 1 4w d m 驱动程序概述 1 4 1w d m 驱动程序简介 编写硬件设备驱动程序一直是一种具有很强挑战性的复杂工作,即便是编写 过具有相当难度w i n 3 2 程序的开发人员,在编写设备驱动程序时也必须去应对种 种不适,需要”洗脑”。编写设备驱动程序很象在执行一项艰巨的任务:没有窗口、 没有消息需要处理,很难对源代码进行调试设置,几乎所有支持库都无法调用; 更糟的是,由于设备驱动程序属于操作系统的信任部分,于是很容易伤害系统, 对此开发人员却往往缺乏一种保护手段去防止进程和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 nx p 2 0 0 0 m e 9 8 。需要指出的是,职业开发人员往往使用的是更有深 度的d d k ,它除了可以开发w d m 类型的驱动程序外,还可以开发非w d m 类型 w i n d o w s 驱动程序。 w d m 是一种便捷式的编程技术,它使开发人员写出的驱动程序可以跨平台运 行,支持编写微软所支持的w d m 总线驱动程序,在w d m 中”总线”( b u s ) 的概念 是一种附加在其它设备( 包括物理设备、逻辑设备、虚拟设备) 上的设备协议, 例如w i n d o w sx p 内置的w i ) 1 1 4 技术支持的总线类型包括:p c i ( p e r i p h e r a l c o m p o n e n t i n t e r c o n n e c t ) 、动态式即插即用串行i o 总线( 如u s b 和i e e e l 3 9 4 ) 、 s c s i ( s m a l lc o m p u t e rs y s t e mi n t e r f a c e ) 、n d i s ( n e t w o r kd r i v e ri n t e r f a c e s p e c i f i c a t i o n ) 以及远程式n d i s ( r n d i s ) 。 新版w d m 中的r n d i s 属于新内容:如简化了对网络设备硬件的开发,减弱了 9 天津大学硕士学位论文第一章绪论 网络设备对驱动程序的依赖性,使最终用户对网络设备的设置安装更简便。w d m 新版中对设备的支持主要包括:u s b 设备类,比如其中的类h i d ( h u m a ni n t e r f a c e d e v i c e ) ;数码相机扫描仪;通过i e e e1 3 9 4 标准的视频捕捉设备;音频;控制 调制解调器的w i n m o d e m 。在w d m 类代码中提供的p o r t i n i n i p o r t 驱动范式,支 持第三方厂商为其特殊设各编写”迷你型”驱动m i n i d r i v e r 。w i n d o w sd d k 其实是 建立在w d m 基础之上,它提供了:d r i v e rv e r i f i e r 及w i n d o w sh a r d w a r e c o m p a t i b i l i t yt e s t s 测试工具;被w f l q l ( w i n d o w sh a r d w a r e 鼬a l i t yl a b s ) 所识别的第三方驱动程序等集成环境。 1 4 2w d m 驱动程序模型 在w d m 驱动程序模型中,每个硬件设备至少有两个驱动程序。其中一个驱动 程序称为功能( f u n c t i o n ) 驱动程序,通常它就是我们经常认为的那个硬件设备驱 动程序。它了解使硬件工作的所有细节。另一个驱动程序称为总线( b u s ) 驱动程 序。它负责管理硬件与计算机的连接。 有些设备有两个以上的驱动程序,使用术语过滤器驱动程序( f i l t e rd r i v e r ) 来描述它们。某些过滤器驱动程序仅仅是在功能驱动程序执行i o 操作时进行监 视。多数情况是:硬件或软件厂商利用过滤器驱动程序修改现有功能驱动程序的 行为。上层过滤器驱动程序在功能驱动程序之前看到i r p ,它们有机会为用户提 供额外的特征,面功能驱动程序根本不知道。有时,一个上层驱动程序可以修正 功能驱动程序或硬件存在的毛病或缺陷。低层过滤器驱动程序在功能驱动程序要 向总线驱动程序发送i r p 时看到i r p 。在某些情况下,例如当u s b 设备插入u s b 总线时,低层过滤器驱动程序可以修改功能驱动程序要执行的总线操作流。 w i ) m 功能驱动程序通常由两个分离的执行文件组成。一个文件是类驱动程序, 它了解如何处理操作系统使用的w d m 协议( 有些协议相当复杂) ,以及如何管理整 个设备类的基本特征。u s b 照相机类驱动程序就是一个例子。另一个文件称为迷 你驱动程序( m i n i d r i v e r ) ,它包含类驱动程序用于管理设备实例的厂商专有特征 例程。类驱动程序和迷你驱动程序合在一起才成为一个完整的功能驱动程序。 可以把一个完整的驱动程序看作是一个容器,它包含许多例程,当操作系统 遇到一个i r p 时,它就调用这个容器中的例程来执行该i r p 的各种操作。图卜3 表现了这个概念。有些例程,例如d r i v e r e n t r y 和a d d d e v i c e ,还有与几种i r p 对应的派遣函数将出现在每一个这样的容器中。需要对i r p 排队的驱动程序一般 都有一个s t a r t l o 例程。执行d m a 传输的驱动程序应有一个a d a p t e r c o n t r 0 1 例 程。大部分能生成硬件中断的设备,其驱动程序都有一个中断服务例程( i s r ) 和 一个推迟过程调用( d p c ) 例程。驱动程序一般都有几个支持不同类型i r p 的派遣 天津大学硕士学位论文 第一章绪论 函数,其中三个派遣函数是必须的。所以,w d m 驱动程序开发者的一个任务就是 为这个容器选择所需要的例程。 b a s i cd r i v e rr o u t i n e sl f oc o n t r o lr o u t i n e s d i g p a t e hr o u t i n e s 图卜3w d m 驱动程序“容器”中的内容 1 4 3w d m 驱动程序的三种类型 w 删支持的驱动程序具有分层结构,换言之,对于一种设备而言,它可以具 有三种类型的d r i v e r s :总线d r i v e r ,函数d r i v e r ,或者过滤式驱动程序( 它 可以假定或修正设备的行为值) 。为一台设备服务的这些驱动程序链就是所谓驱 动程序栈。一个驱动程序栈分阶段地处理用户的请求,这些驱动程序一个个相互 叠加在一起,低层的总线驱动程序可用于处理与硬件的所有基本联系,而中间的 类驱动程序对整个一类驱动程序提供共同的设施。 微软提供了针对l y i n d o g , s 的总线驱动程序,并为第三方设备开发商提供有关 服务,如枚举设备、对即插即用和i 0 所需电源的管理,并提供了独立于设备管 理方式。设各开发商更多地是提供函数式驱动,其基本内容包括:对设备的操作 界面,对设备的读写句柄,对设备电源的管理策略。过滤式驱动程序安装在驱动 栈一个或多个设备之上或下端,它可以截获设备、或设备类、或总线的请求,判 断这些

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论