(通信与信息系统专业论文)isdnta驱动程序capi接口设计.pdf_第1页
(通信与信息系统专业论文)isdnta驱动程序capi接口设计.pdf_第2页
(通信与信息系统专业论文)isdnta驱动程序capi接口设计.pdf_第3页
(通信与信息系统专业论文)isdnta驱动程序capi接口设计.pdf_第4页
(通信与信息系统专业论文)isdnta驱动程序capi接口设计.pdf_第5页
已阅读5页,还剩49页未读 继续免费阅读

(通信与信息系统专业论文)isdnta驱动程序capi接口设计.pdf.pdf 免费下载

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

文档简介

摘要 摘要 本文对通用i s d n ( 综合业务数字网) 应用程序接口规范( c a p i : c o m m o n i s d n a p i ) 以及i s d nt a ( t e r m i n a la d a p t e r ) 分层驱动程序进行了 研究丌发。首先,结合c a p i 规范提出两种实现i s d nt a 的分层驱动方案,并 给出方案实现的详细说明。具体阐述了如何实现c a p l 的模块化开发以及根据 c a p i 规范丌发n d i s ( n e t w o r k d r i v e r i n t e r f a c es p e c i f i c a t i o n ) 攘1 3 驱动程序。最 后结合开发软件的过程,介绍了w d m ( w i n d o w sd r i v e rm o d e l ) 驱动软件的架 构,并详细介绍了分层驱动之间、应用程序与驱动程序之间的通信方法。 用户使用本文开发出的i s d n t a 驱动软件,在w i n d o w s 9 8 和w i n d o w s 2 0 0 0 操作系统下,可以接入i s d n 网络,访问互联网。该软件还支持语音、数据通信 等业务。 关键词: 通用堡继教皇宣盆用蝰旦塑驱动程网络驱动接口规范 a b s t r a c t t h i sp a p e rd e s c r i b e sh o wt or e a l i z ec o m m o n i s d n - a p i ( c a p i ) a n dt h e 】a y e r e dd r i v e rf o ri s d nt e r m i n a 】a d a p t e r c o m b i n e dw i t hc a p ls p e c i f i c a t i o n t w o d i f f e r e n ts c h e m e sa r ep r o v i d e d a tt h es a m et i m e as p e c i f i cr e a l i z a t i o nm e t h o do f e a c hs c h e m ei sa l s oi n t r o d u c e d a c c o r d i n gt oc a p i s p e c i f i c a t i o n ,an e w m e t h o du s e d t or e a l i z ec a p ii se x p a t i a t e dt h o r o u g h l y ,w h i c hl e t ss o f t w a r em o d u l es u p p o r t i n g c a p ir u ni nu s e rm o d e lo fw i n d o w s o p e r a t i o ns y s t e m a l s o ,h o w t od e v e l o pn e t w o r k d r i v e ri n t e r f a c es p e c i f i c a t i o n 烈d i s ) i n t e r f a e ed r i v e rb a s e do nc a p ii sg i v e n w i n d o w sd r i v e rm o d e l ( w d m ) d r i v e r i sa n e c e s s a r yp a r to f t h es o f t w a r eb a s e do n t h e s et w os c h e m e s t h ep a p e rd e a l sw i t ht h ea r c h i t e c t u r eo fw d md r i v e ra c c o r d i n gt o o u ru n d e r s t a n d i n go fw d m i np r a c t i c e t h ec o m m u n i c a t i o nm e c h a n i s mb e t w e e n a p p l i c a t i o np r o g r a m sa n d t h ed r i v e ra n dt h ec o m m u n i c a t i o nm e c h a n i s mb e t w e e n d i f k r e n t l a y e r so f t h ed r i v e r ,w h i c hp l a y sa ne x t r e m e l yi m p o r t a n t r o l ei nt h es c h e m e , a r ea l s od i s c u s s e da tt h ee n do f t h ep a d e r u s i n g t h ed r i v e rs o f t w a r eb a s e do nt h e s et w os c h e m e s ,t h ei s d nt a r u n n i n g w i t hp cc a nb eu s e dt oa c c e s st h ei n t e r n e tw i t hh i g hs p e e d ,a n dt ot r a n s m i tv o i c ea n d d a t ae t c k e y w o r d : c o m m o n i s d n a p i n e t w o r kd r i v e ri n t e r f a c es p e c i f i c a t i o n w i n d o w sd r i v e rm o d e l 第一章绪论 第一章绪论 1 1i s d n 接入技术 c c i t t ( 现1 t u t ) 对1 s d n 是这样定义的:“i s d n 是以综合数字电话网 ( i d n ) 为基础发展演变而成的通信网,能够提供端到端的数字连接,用来支持 包括话音在内的多种电信业务,用户能够通过有限的一组标准化的多用途用户一 网络接口接入网内。” 现有的有线接入总的来说可分为两大类:一种为窄带接入,一种为宽带接入。 对于速率为5 6 k b i t s 的m o d e m 拨号接入来说,已经满足不了用户的要求。相比 之下2 b + d 的i s d n 窄带接入,有着明显的优势,不仅提供的速率远远高于m o d e m 拨号接入,而且提供了丰富的业务。对于宽带接入,目前最流行的有x d s l 、c a b l e m o d e m 、小区以太网接入等。这几种宽带接入,都要对局端到用户的这段线路 进行改造,因此它们的成本相对较高。而对于目前普通的家庭用户来说,真正需 要宽带上网的并不是很多。实际上i s d n 以p r i 速率接入也可以达到2 m 的速率。 所以在有线接入从窄带向宽带过渡的过程中,如果i s d n 接入能让用户可以动态 选择速率,并且同时又能提供给用户更多的业务种类,也不失为一种好的接入方 法。而我们正是基于这种考虑,丌发出基于c a p i 的i s d nt a ( t e r m i n a l a d a p t e r ) 终端驱动软件,也是本文的重点。 通过建立i s d n ,用户只用一条用户线就可以将多种业务终端接入i s d n 网 内,通过i s d n 获取它所提供的多种业务,包括公共电话交换网( p s l n ) 所提供 的普通话音业务,以及i s d n 提供的智能用户电报、g 4 类传真、图文混合传输和 视频会议等业务。 在i s d n 发展的历程中,不能不提到c o m m o n i s d n a p i ( c a p i ) 标准组 织。因为在整个i s d n 网络中,1 s d n 终端是很重要的一个环节。实际应用中跟i s d n 用户直接关联的就是i s d n 终端,所以在i s d n 推广中,i s d n 终端扮演着重要的 角色。在众多终端硬件制造商中,由于各自的产品特性不同,不可能使用同一软 件来驱动不同的硬件。c a p i 就是为了应付这种情况而产生的。它是一个应用程 序接口标准,应用程序使用该接口标准通过i s d n 设备可以以基本速率( b r i ) 或 基群速率( p r i ) 进行数据传送。i s d n 设备提供商也不需要关心运行在其设备上 的应用软件,从而实现了应用软件与硬件设备厂商的分离。c a p i 工作组由应用 丌发商、i s d n 设备制造商、大的用户团体以及一些电信公司组成,在1 9 9 0 年完 i s d n t a 驱动程序c a p l 接口设计 成了c a p i 的第一个版本c a p l1 1 版,1 9 9 9 年7 月又完成了c a p i2 0 版标准的 制定。c a p i2 0 完全兼容c a p i1 1 ,c a p i2 0 是在q 9 3 1 标准上制定的,但又不 仅仅局限于该标准。c a p i2 0 标准的制定,使得i s d n 终端硬件制造商与其应用 软件丌发商完全分离,缩小了产品的丌发周期,大大促进了i s d n 的应用和发展。 i s d n 经过二十多年的发展,已经进入了崭新的一页。在协议方面,欧洲i s d n 已逐步成为世界i s d n 通信的标准,这为i s d n 在世界范围内统一发展奠定了坚 实的基础。在应用方面,随着各国对i s d n 业务认识的加深,已在政策方面做了 很大的调整,这对促使i s d n 的发展起了很大的作用。目前的i s d n 业务在欧洲 各国,太平洋的澳大利亚、新西兰、以及亚洲的新加坡、日本等国家都有了很大 的发展。i s d n 业务在国内经过大力的推广,已经为中国用户所了解,国内市场 亦已启动。目前,北京、上海、广州、南京、深圳、厦门、西安等地区都已经开 通了i s d n 业务。特别是2 0 0 0 年,中国电信推出的i s d n “一线通”业务,更是 推动了i s d n 在我国的蓬勃发展。 总之,在从窄带接入向宽带接入过渡的过程中,i s d n 接入依然有着自己独 特的优势,仍是一种比较好的过渡方案。 1 2 本文的主要工作以及取得的成果 i s d n 通信终端即i s d n 的终端设备,通过用户网络接口与i s d n 连接,并 由终端给用户提供多项业务。从广义上说,i s d n 终端是指连接在参考点t 上的 各类装置与设备,其中包括各种i s d n 标准终端t e l ( t e r m i n a le q u i p m e n t ) ,非 标准终端t e 2 的适配器t a ( t e r m i n a la d a p t e r ,终端适配器) 和楼内或室外的控 制设备n t 2 。我们一般指的i s d n 终端是具有多种功能的t e l 。 i t u 制定i s d n 标准后,各主要工业国家都加紧i s d n 的研究开发工作,随 着i s d n 网的研究、试验及运行,各国都制定了i s d n 终端的发展计划,这些国 家的i s d n 研究人员都对本国的通信现状、用户情况、国际标准化和国内标准化 作出了研究与分析,并推出了一些i s d n 终端产品,进入了实用化阶段。 本文的工作来源于国家8 6 3 项目“实用化i s d n 多媒体通信终端”,它是为推 动我国信息化产业进程,推广普及1 s d n 而进行的重点科研项目。该终端由p c 主机、i s d n 通信适配卡及一组软件鲤1 成。此i s d n 多媒体终端通过2 b + d 基本速 率接口接入i s d n ,向用户提供集文件、语音、图象、数据等业务于一体的多种 业务支持。其巾i s d n 通信适配i f f , j 主要功能是实现i s d n 用户一网络接口的下 三层功能,j i :通过与p c 主机交互实现高层m 议和基本维扩- 管理功能。 本文的主要任务是实现基于w i n d o w s 9 8 2 0 0 0 操作系统的i s d nt a 的系统驱 第一章绪论 动软件以及独立的c a p i2 0 标准模块软件的设计开发工作。通过对设备驱动程序 实现机制的分析比较,提出了两种驱动程序设计方案,并分别完成了具体编程实 现。该驱动软件不仅支持传统的w i n d o w s 上的t a p i 功能,即用户可以使用 w i n d o w s 自带的拨号网络来进行拨号接入i s d n ,还支持c a p i2 0 的功能,即提 供一个符合c a p i2 0 标准的接口给应用软件开发商,使得通过该接口可以接入 i s d n 网络。开发出的c a p i2 0 标准模块软件,独立于底层驱动软件完成所有的 c a p i2 0 规范的功能,可以动态管理多个b r i 速率的i s d n 接入。通过开发的软 件,一方面用户可以进行拨号接入i s d n ,再由远端i s d n 路由器接入i n t e m e t , 从而可以利用m i c r o s o f tw i n d o w s 上众多丰富的应用软件( 如:i e 、n e t s c a p e 、 c u t e f c p ) 访问i n t e r n e t 上的丰富资源。另一方面,用户可以使用符合c a p l 2 0 规范功能的应用软件如r v s c o m 等接入i s d n ,不仅可以经由远端i s d n 路由器 接入i n t e m e t ,还可以直接和i s d n 网内的i s d n 终端之间进行如语音、传真等业 务的通信。 所开发出的软件,经过长期测试,已经提供给用户使用。在实践中已经证明 该软件设计正确、运行可靠。 1 3 本文主要章节内容安排 在以下的几章里,将对设计实现基于w i n d o w s 9 8 2 0 0 0 操作系统上的i s d n 适 配卡的驱动软件所涉及的内容给予一一介绍,其安排如下: 第二章r s d n 适配卡 这一章主要介绍i s d n 终端适配卡所涉及的i s d n 用户一网络接口以及i s d n 终端适配卡驱动软件整体实现,同时结合在开发过程中的实际经验介绍了在 w i n d o w s 下开发驱动软件需要关注的问题。 第三章总体方案设计 这一章主要介绍整个软件开发的总体方案,并给出两种设计方案并加以具体 阐述,比较其优缺点。 第四章c a p i 接口设计 这一章主要介绍c a p i 标准,c a p i 的运行机制。并详细介绍了怎样实现c a p i 的,给出了具体软件实现的解释。 第五章n d i s ( n e t w o r k d r i v e r i n t e r f a c es p e c i f i c a t i o n ) 接口驱动软件模块开发 这一章介绍了n d i s 接口规范,并详细介绍了实现本i s d n 适配卡的n d i s 接口驱动软件的模块实现构成,以及如何能使n d i s 驱动软件使用c a p i 标准消 息来进行与底层软件通信。 s d n t a 驱动程序c a p | 接口设计 第六章w d m ( w i n d o w sd r i v e rm o d e l ) 驱动以及分层驱动之问相互通信方 法。 这一章介绍w d m 驱动程序的编写方法。同时由于i r p ( i o r e q u e s t p a c k e t ) 在驱动程序中起到极其重要的作用,也介绍了i r p 的结构特点。由于采用分层驱 动的方法,所以还结合具体的i s d n 适配卡的w d m 驱动实现方案,介绍了分层 驱动之问、应用与底层软件之间实现通信的方法。 我们并没有单独介绍v x d 的实现方法,这是因为在我们的驱动软件构成中, v x d 仅仅是一个透明传输的管道,起到一个桥梁的作用,只是介绍v x d 如何实 现与驱动之间如何实现通信的方式。而且,未来的w i n d o w s 里面将不会再有v x d 这种做法,所以并没有重点介绍。 第二章1 s d n 适配器 第二章i s d n 适配卡 i s d n 适配卡的作用就是对非标准i s d n 终端进行适配从而使之可以接入 i s d n 。本文的工作就是开发支持c a p l 功能的内置式i s d n 终端适配卡驱动软件。 2 1 实用化i s d n 适配卡实现 通过i s d n 接入i n t e m e t 从而进行资源共享和信息通信这一研究领域由于其高 速、支持多业务等优点而具有很大的发展前途。 图2 1 通过l s d n 拨号访问i n t e m e t 如图2 1 ,插有i s d n 通信适配卡的p c ( p e r s o n a lc o m p u t e r ) 终端一方面可 以与i s d n 网内的i s d n 终端如传真机等进行通信。另一方面,该p c 终端也可以 通过i s d n 网拨号接入远端的w i n d o w s 远端访问服务器,然后通过w i n d o w s 的 路由服务接入局域网,最终接入i n t e m e t 。 本人所在课题组自行研制的多媒体通信终端来源于国家8 6 3 成果转化项目 “实用化i s d n 多媒体通信终端”,该终端由p c 主机、i s d n 通信适配卡及一组 软件组成,其主要部件是i s d n 多媒体通信适配卡与基于w i n d o w s 操作系统的系 统软件。 该i s d n 多媒体通信适配卡硬件采用的主芯片是w i n b o n d 公司的w 6 6 9 2 i s d n 专用芯片。由于该芯片高度集成化,使得适配卡硬件开发的工作已经大大 简化。因此在开发过程中,软件的开发成了主要的工作。本文正是基于这种情况, 开发出p c i ( p e r i p h e r a lc o m p o n e n ti n t e r c o n n e c t ) 总线的i s d n 适配卡驱动软件。 该终端软件采用模块化、分层驱动的方式来构成。整套软件的构成如图2 2 所示。由于我们开发的软件支持c a p i ( 后面的章节将详细介绍c a p i ) 功能,所 6 1 s d n t a 驱动程序c a p i 接口设计 以用户通过该适配卡访问互联网时可以有两种选择:一是通过w i n d o w s 自带的拨 号网络进行拨号上网。这一过程首先是应用程序调用w i n 3 2r a sa p i ,经由 w i n d o w s 自己的协议栈如:p p p 控制协议、r a s 连接管理及t a p i 外壳等与远端 服务器建立连接,然后就可以通过w i n d o w s 各种网络应用软件进行对w a n 的 图2 2i s d n 适配片驱动软件构成 访问,进行数据通信。这一过程由应用程序、w i n d o w s 多协议栈、w a n 微端口 外壳以及底层驱动来完成。 用户也可以使用w i n d o w s 拨号网络通过c a p i 的应用软件,经由c a p i 接口 软件来进行访问互联网。这种方式首先使用c a p i 应用软件、c a p i 接口软件来进 行与远端服务器建立连接,然后在使用w i n d o w s 各种网络应用软件来进行对w a n 的访问,同时也可以使c a p i 应用软件在i s d n 网内与别的i s d n 终端进行传真、 语音等业务的通信。图2 2 中虚线以下的部分就是本文所要介绍的部分,具体的 每一模块的实现在接下来内容中都有详细的介绍。虚线的v x d 部分是在 w i n d o w s 9 8 下使用时爿具有的,这是由于w i n d o w s 9 8 的系统结构与w i n d o w s 2 0 0 0 不同而造成的。 2 2w i n d o w s 9 8 2 0 0 0 下开发适配卡驱动软件的异同 w i n d o w s 系列操作系统从大的方面可以分为两类,一类基于w i n d o w s 3 0 ,一 类基于w i n d o w sn t 技术。基于w i n d o w s 3 0 架构的典型代表就是w i n d o w s 9 5 ,而 基于w i n d o w sn t 架构的典型代表就w i n d o w s 2 0 0 0 。而w i n d o w s 9 8 在保持与 第二章i s d n 适配器 w i n d o w s 9 5 的兼容的同时,开始向w i n d o w sn t 技术靠拢。下面首先我们从开发 驱动程序的观点来分别看看w i n d o w s 9 8 2 0 0 0 的特点。 2 3 1w i n d o w s 9 8 的特点 w i n d o w s 9 8 和w i n d o w s 9 5 都是从w i n d o w s 3 0 发展而来的,因此其操作系统 内核依然可以称为是v m m ( v i r t u a lm a c h i n em a n a g e r ) ,该内核的一个主要任务 就是创建一个或多个共享同一个硬件资源的“虚拟”机器( v m ) 。每一个虚拟机 器都要有一个相应的v x d ( v i r t u a ld e v i c ed r i v e r ) 来进行驱动。这是因为如果多 个v m 试图访问同一设备,由于d o s 应用程序能够直接操纵硬件,所以必须对 该设备进行虚拟化,一个虚拟化设备的v x d 负责可靠地检测多个v m 试图访问 同一设备的情况,并采取仲裁的策略来解决这种冲突。其实,v x d 是首次在 w i n d o w s 3 0 里出现的,它最初的目的就是虚拟化一个具体的设备,为v m m 创造 一个虚拟的事实,使得v m 能够完全使用虚拟化的硬件设备。从开发驱动软件的 观点来看w i n d o w s 9 8 的架构如图2 3 所示。 图2 3w i n d o w s 9 8 整体框图 山图2 3 也可以看出,在w i n d o w s 9 8 系统,程序运行的环境有两种:一是用 户模式;一是内核模式。程序可以运行在用户模式下,或者运行在内核模式下。 所谓的用户模式是一种保护的模式,程序在这种环境下运行是不允许直接访问系 统资源的,它提供了一个更安全的环境为应用程序使用,提高了操作系统的可靠 性。内核模式是一种资源完全开放给用户的模式,程序在这种环境下运行可以直 接访问系统的资源。w i n d o w s 9 8 的这种运行环境的分类是借鉴了w i n d o w sn t 的 特点,来提高其稳定性,在w i n d o w s 2 0 0 0 里面我们可以更清楚地看到这一点。 w i n d o w s 9 8 在保持兼容以前的w i n d o w s 操作系统的同时,也开始支持新增的 w d m ,只不过它所支持的w d m 是初级版本。对于新近发展的设备,如u s b 设 备是必须要有w d m 来支持的。这就意味着对于新近发展的设备,如果要想在 i s d nt a 驱动程序c a p i 接口设计 w i n d o w s 9 8 下充分发挥功能,不仅需要为其编写w d m 驱动,还要为其编写v x d 来支持w i n d o w s 9 8 的v m 功能。这样该设备才能在w i n d o w s 9 8 下被充分利用。 2 3 2w i n d o w s 2 0 0 0 的特点 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 s 9 8 和 w i n d o w s 2 0 0 0 下的设备驱动程序提供了一个总体的框架。虽然对于最终的用户来 讲,使用起来w i n d o w s 2 0 0 0 好像与w i n d o w s 9 8 没有什么区别,但是实际上它们 的内部的运行方式几乎完全不同。所以,一般来说驱动程序的开发总是要分别为 w i n d o w s 9 8 和w i n d o w s 2 0 0 0 各自开发一套。 w i n d o w s 2 0 0 0 操作系统下程序运行的环境与在w i n d o w s 9 8 下一样有两种,一 是用户模式,二是内核模式。运行在用户模式的程序如果想从具体的设备读取数 据的话只有调用应用程序接口( a p i ) ,像r e a d f i l e 接口函数等。诸如k e r n e l d l l 的w i n 3 2 子系统通过激活某种依赖于平台的系统服务接口传送到内核模式来提供 这个a p i 。譬如当应用程序调用r e a d f i l e ,系统会自动调用系统动态链接库 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 是i o 管理器的一部分。 图2 4w i n d o w s 2 0 0 0 麻川胤序1 j 物理设备沟通流科图 应用样序与物理设备的沟通如图2 4 所示。应刚程序调朋一定的入口函数来 达到与底层物耻改备进行数据交换的目的。实际上这种入e l 函数是产生一种叫 i r p ( i or e q u e s tp a c k e t ) 的数据结构传送给i o 管理器,然后再山i 0 管理器传 递给驱动程序来进行数据交换的。驱动程序是运行在内核模式的软件,当然可以 第二章i s d n 适配器 9 直接访问硬件设备。但是在w i n d o w s 2 0 0 0 里面,驱动程序也可以不直接访问硬件 设备来实现与物理设备的数据交互。因为在w d m 里面有一层称为h a r d w a r e a b s t r a c t i o nl a y e r ( h a l ) ,它的主要任务就是管理硬件。h a l 把硬件的一些参数 如中断、总线等特征自己处理好后上报给驱动软件。例如:它把每个设备驱动程 序的相关总线设备中断向量映射成系统指定的具有设备本身优先级要求的向量, 这就不需要驱动程序本身再做这种工作,减轻了驱动程序的负担。 w d m 是m i c r o s o f t 最新推出的驱动程序模型,它彻底改变了以往在 w i n d o w s 9 x 下的驱动程序编写的模式。只要支持w d m 的系统,同一设备的w d m 驱动就不需要改动,这大大改变了以往对同一设备在不同的w i n d o w s 操作系统下 要分别编写相应的驱动程序的做法。在未来的w i n d o w s 操作系统里面将不再有 w i n d o w s 9 x 里面的v x d 的做法,而只支持w d m 类型的驱动程序。所以,深刻 理解w d m 是非常必要的。 在w d m 里面每一个物理的硬件设备都至少有两个驱动程序。一个是功能驱 动( f u n c t i o nd r i v e r ) ,也就是我们平常说的设备驱动程序。它处理所有驱动设备 工作的细节,如完成初始化i 0 操作、处理到达的中断等等。另一是总线驱动( b u s d r i v e r ) ,它主要完成管理设备与计算机的连接。例如p c i 总线的总线驱动程序会 自动检测到p c i 类型的设备是否插到p c i 插槽里,并且自动完成硬件设备所要求 做的i o 与内存映射。它还处理一些总线上的事务,如打开或关掉总线插槽到设 备之间的电流等。 一些设备不仅仅有这两类驱动程序,除了上面所说的两类驱动程序外,其它 的驱动统称为过滤驱动程序( f i l t e rd r i v e r ) 。一些过滤驱动程序仅仅是监管功能 驱动程序、完成i o 操作。而更为普遍做法的是,软件或硬件提供商提供过滤驱 动程序来修正现有的功能驱动程序。上层过滤驱动程序( u p p e rf i l t e rd r i v e r ) 在 i r p 没有达到功能驱动程序之前监管这些i r p ,可以提供支持功能驱动所不具有 的附加功能。例如,上层过滤驱动程序可以修正功能驱动程序和物理设备上存在 的错误。下层过滤驱动程序( l o w e rf i l t e rf u n c t i o n ) 监管功能驱动发往总线驱动 上的i r p 。在一些情况下,譬如当设备连接到u n i v e r s a ls e r i a lb u s ( u s b ) 时,下层 过滤驱动程序可以修正功能驱动程序发往硬件设备的总线操作数据流。 我们可以从整体的观点来理解一个w d m 驱动程序,可以把一个w d m 驱动 程序看成是由一系列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 o l 例程;对于需要处理物理设备产生的 i 1 断的驱动程序就要有中断服务例程( i s r :i n t e r r u p ts e r v i c er o u t i n e ) 和延迟过程 明川( d p c :d e f e r r e dp r o c e d u r ec a l l ) 例程:对于处理不同的i r p ,驱动程序还 i s d n t a 驱动程序c a p i 接口设计 要有不同的分发例程。而且至少要有下面的三类处理i r p 的分发例程: d i s p a t c h p n p 、d i s p a t c h p o w e r 以及d i s p a t c h w m i 。编写w d m 驱动程序的一个主要 任务就是如何确定需要有那些例程,以及如何处理i r p 。对于具体如何编写w d m 类型的驱动程序后面将有一章详细讨论。 如同上面所述,w i n d o w s 2 0 0 0 与w i n d o w s 9 8 的差别是很大的。但是从开发驱 动程序的观点来看,它们都需要同样注意一些问题。下面结合在开发整个驱动程 序过程中的心得体会,给出在w i n d o w s 下丌发驱动程序时我们认为必须要关注的 问题 2 3 3w i n d o w s 设备驱动开发关键问题 w i n d o w s 使用分层设计,把请求从终端用户传递到一个驱动程序栈,最终 到达硬件设备。驱动程序运行在内核模式,也就是说,它是操作系统的信任部分。 驱动程序必须能够很好地适应内核,否则会产生严重的结果。因为它是操作系统 信任的一部分,p c 机将得不到通常w i n 3 2 应用程序具有的保护。无论程序出现 任何错误,系统都可能发生崩溃,甚至在崩溃前破坏有价值的数据。所以有以下 几点在开发驱动程序时候应该给予特别关注。 处理器模式 w i n d o w s 操作系统要求处理器仅支持两个模式,一个或多个应用程序运行的 用户态和操作系统运行的内核态。用户态程序被保护,使得它们不能轻易地相互 破坏,或者轻易地破坏内核。相反,内核态程序可以做它想做的任何事情,而且 可以访问所有内存。 中断和异常是停止处理器正在做的事情并要求做其它的事情的方法,硬件中断 是来自外部硬件的送给处理器的输入信号,而软件中断是中断处理器切换到内核 态的指令。异常是处理器产生的中断,通常是在出错时产生。用户程序使用软件 中断进行内核函数调用。事实上,w i n 3 2 调用先进入用户态w i n 3 2 子系统d l l 。 如果合适的话,它就会在内核态中调用主操作系统。内核使用常规的定时器硬件 中断在执行可用的用户线程之间切换,这使得这些线程看起来像同时执行一样。 在多处理器系统上,线程真正地同时运行。内核也有它自己的线程在运行,它们 使用与用户相同的方法切换。这样做的结果是,驱动程序可以使用几种方式调用。 一个用户应用程序可以发出一个w i n 3 2 设备i o 请求,最终调用一个驱动程序来 处理这个调用。驱动程序还可能启动它的硬件。如果它的硬件产生中断,则调用 驱动程序处理这个中断( 即停止这个中断) ,标记中断已经发生,并在必要时启动 另一个操作。驱动程序也可以在内核线程的环境中被调用。例如,驱动程序的即 插即用调用通常在一个系统线程的环境中调用。 中断级 硬件中断或软件中断都会停止处理器一个任务的执行,并强制它去执行这个 第二章i s d n 适配器 中断处理代码。处理器对中断划分优先级,使得低优先级的中断可以被高优先级 的中断所中断,这样保证非常重要的任务不会被可以在以后处理的任务中断。表 2 3 1 列出了w i n d o w s 实际提供的抽象的处理器中断级,最上面的中断优先级最 低。硬件产生的中断总是比软件产生的中断优先级高。 1 r q l描述 无中断 p a s s l v e l e v e l 常规线程执行 软件中断 a p c l e v e l 异步过程调【 j 执行 d i s p a t c h l e v e l 线程调度 硬1 ,l :中断 d i r q l设备中断请求级处理程序行 p r o f i l el e v e l 配置文件定时器 c l o c k 2l e v e l 时钟 s y n c hl e v e l 同步级 i p il e v e l 处理器之间中断级 p o w e rl e v e l 电源故障级 表2 3 1 抽象的处理器中断级 当一个中断到达c p u 时,处理器比较请求中断的i r q l 值与当前的i r q l 值。 如果请求的i r q l 等于或小于当前的i r q l ,该请求就会被忽略。在这种情况下, 请求保持挂起,直到后来的某个时候发生重要性低的事件。如果请求的i r q l 大 于c p u 的当前| r q l ,处理器执行以下工作: ( 1 ) 挂起指令。 ( 2 ) 在堆栈上保存足够的状态信息,以便在以后重新执行被中断的代码。 至少这要包括当前的p c 地址和c p u 的状态寄存器。 ( 3 ) 提升c p u 的i r q l 值,以匹配请求的i r q l ,防止在当前中断满足之 前相同或较低优先级的中断得到控制。 ( 4 ) 把控制转移到与请求关联的中断服务例程。 当这些工作完成时,服务例程执行一条特殊指令取消中断。这条指令恢复保 存在堆栈上的c p u 状态信息( 包括以前的i r q l 值) ,并控制返回到被中断的代 码。 正确使用内存 w i n d o w s 实现虚拟内存,系统表现为具有比实际内存更多的内存,这允许更 多的应用程序( 和内核) 保持运行。虚拟内存是这样实现的:它把每个应用程序 的可能地址空间划分为成固定大小的块,这些块称为页( x 8 6 处理器的页大小为 i s d n t a 驱动程序c a p i 接口设计 4 k b ,而a l p h a 处理器使用8 k b 大小的页) 。一个页可以驻留在物理内存中,或 者交换到硬盘上。交换到硬盘上的内存,称为分页内存,永久驻留的内存称为非 分页内存。驱动程序可以分配到分页内存,也可以分配到非分页内存。如果试图 在d i s p a t c hl e v e l 或者更高的中断级访问分页内存,就会引起缺页故障,内 核会崩溃。如果在p a s s i v el e v e l 中断级访问非驻留分页内存,内核会阻塞线 程,直到内存管理器把内存装回到内存池中。 系统中的非分页内存与分页内存比较起来,是非常少的,所以不要过度使用 非分页内存。如果要在d i s p a t c hl e v e l 或以上中断级访问内存,必须使用非 分页内存。对于在内核中分配内存要十分注意的是,一定在用完之后就释放掉, 因为驱动程序卸载后,内核不收集这些已分配的内存。如果驱动程序不断分配和 释放小量的内存,则它的效率会降低。内核为固定大小的内存块提供旁视列表 ( l o o k a s i d el i s t ) 来帮助解决这个情况。旁视列表仍然有分页与非分页之分,也 依然是先分配,再释放。旁视列表仍然是从内存池中得到内存,但是,在释放一 块内存时,它不必被送回到内存池中,而是将内存块保持在旁视列表中,准备满 足下一次的分配请求,这样就提高了效率。但是该内存块最终还是要释放掉的, 最终的释放称为删除。只要删除该旁视列表,就彻底地释放掉了。这种方法主要 适用于不断分配和释放小量内存的情况。 第三章总体方案设计 第三章总体方案设计 本文开发的终端软件所要实现的功能:一是用户通过w i n d o w s 本身的协议 栈,再经由终端软件可以进行i s d n 接入,访问互联网。二是用户使用特定的c a p i 应用软件,通过本文开发的c a p i 接口软件进行i s d n 接入,访问互联网以及在 图3 1 终端整体驱动软件构成 i s d n 网内进行通信。终端整体驱动软件的结构图如图3 1 中虚线部分所示。从终 端软件所实现的功能来看,c a p i 接口软件与n d i s w a n 接口驱动软件好像是并 行的,实际上我们的实现方案中并不是这样的。下面给出我们的两种方案,并加 以具体的阐述 3 1 终端驱动实现方案一 本文提出的第一种实现方案如图3 t 2 所示。在这个方案里面,将c a p i 在n d i s 之上来实现,c a p i 本身是在一个动态链接库里面来实现。当上层通过c a p i 应用 协议软件来实现访问互联网的时候,它要通过n d i s w a n 接口驱动软件作为中介 来进行数据的传送。而上层使用w i n d o w s 本身的协议软件来接入i s d n 的时候, 则与c a p i 无任何关联,而是直接通过n d i s w a n 接口驱动来进行。n d i s w a n 接口驱动软件,本身可以直接负责管理硬件设备。但是,在实际开发中没有这样 1 s d n t a 驱动程序c a p i 接口设计 图3 2 终端驱动方案一实现框图 做,而是将n d i s w a n 接口驱动软件作为一个中间层驱动软件来使用。底层的硬 件管理则使用一个w d m 类型的驱动软件来实现。这样做的原因是由于 w i n d o w s 9 8 2 0 0 0 都支持w d m 类型的驱动,而且也方便未来的扩展。因为,对于 新添总线类型的设备,w i n d o w s 要求其必须是w d m 类型的驱动程序才能驱动其 工作。这时的c a p i 接口软件与n d i s w a n 接口软件相对于w d m 驱动层来说不 是并行的关系,而是位于n d i s w a n 接口驱动之上。 在这种方案里面,不仅要求n d i s w a n 接口驱动支持其原来的n d i s t a p i 工 作还要能处理来自c a p i 接口软件的消息请求。由于这时的c a p i 运行在用户模 式下,它是通过i r p 的数据结构来与底层驱动进行沟通,所以这时的n d i s w a n 接口驱动软件要想支持c a p i 的消息,必须要能够处理来自上层的i r p 。这在以 前的n d i s 版本里面是不可能的,只是在n d i s5 0 里面爿开始支持。 3 2 终端驱动实现方案二 方案二相对于方案一的最大特点就是将c a p i 移植到w d m 驱动层来实现。 这时的n d i s w a n 接口驱动层位于c a p i 之上,这就意味着n d l s w a n 接口驱动 层必须要使用c a p i 的接口功能。具体的实现框图如图3 3 所示。该方案中n d i s 接口驱动层不再要求具备能够处理i r p 的功能,因为上层的w i n d o w s 协议栈并不 是使用i r p 来与n d l s w a n 接口驱动层来通信,而是使用n d i s t a p i 及一些n d i s 第三章总体方案设计 图3 3 终端驱动方案二实现框图 函数与n d i s w a n 接口驱动层进行通信。当用户使用c a p i 应用协议栈来进行访 问互联网的时候,会通过一个动态链接库将标准的c a p i 消息直接传递到w d m 驱动层,由w d m 层进行处理,而不再通过n d i s w a n 接口驱动层。c a p l 2 0 3 2 d l l 的功能只是将上层c a p i 应用程序的标准c a p i 消息传递下来,其本身并不对c a p i 消息进行任何的处理。 这两种方案在w i n d o w s 9 8 下实现的时候,都必须要使用v x d 层来实现连接 n d i s w a n 接口驱动层与w d m 驱动层之间的通信,这是由于w i n d o w s 9 8 与 w i n d o w s 2 0 0 0 的运行机制不同的缘故。这种方案的n d i s w a n 接口驱动层将会变 得复杂,主要是对于n d i s w a n 接口驱动层在与w d m 驱动层通信时,要进行 c a p i 消息的映射以及c a p i 状态的映射,但是这时c a p i 功能实现就变的简单, 因为它不再需要通过i r p 来与底层驱动进行通信。 3 3 方案比较 比较这两种方案,可以看出,方案设计总的思想是分层驱动,模块化开发设 计。采用这种思想的主要原因是要兼顾w i n d o w s 9 8 和w i n d o w s 2 0 0 0 系统,使得 开发的驱动程序在这两种操作系统下均能使用。最大的区别是第一种方案中,整 个c a p i 的功能是在用户态实现的,而第二种方案中整个c a p i 的功能是在内核 态实现的。第一种方案中,w d m 驱动层将变得相对较简单,而第二种方案中w d m 层则较为复杂。但是,第一种方案中,无论是n d i s w a n 驱动层还是w d m 驱动 i s d n t a 驱动程序c a p i 接口设计 层都不需要了解有关c a p i 的知识。实际开发中的做法是,c a p i 接口软件与 n d i s w a n 接v i 驱动层之间的数据交互通过自定义的数据结构来实现,完全与 c a p i

温馨提示

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

评论

0/150

提交评论