(计算机软件与理论专业论文)流类微驱动程序研究及在视频采集中的应用.pdf_第1页
(计算机软件与理论专业论文)流类微驱动程序研究及在视频采集中的应用.pdf_第2页
(计算机软件与理论专业论文)流类微驱动程序研究及在视频采集中的应用.pdf_第3页
(计算机软件与理论专业论文)流类微驱动程序研究及在视频采集中的应用.pdf_第4页
(计算机软件与理论专业论文)流类微驱动程序研究及在视频采集中的应用.pdf_第5页
已阅读5页,还剩54页未读 继续免费阅读

(计算机软件与理论专业论文)流类微驱动程序研究及在视频采集中的应用.pdf.pdf 免费下载

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

文档简介

摘要 本论文首先分析了w i n d o w s 2 0 0 0w d m 通用驱动程序的体系结构,并对通用 驱动程序开发过程中的基本步骤和问题进行了讨论。接着对基于w i n d o w s 操作系 统的流类微驱动程序的工作原理、体系架构、微驱动程序和类驱动程序之间的交 互以及微驱动程序的开发流程进行了深入研究。最后,通过对u s b 接口、数字电 视系统以及基于广播驱动架构的数字电视接收等理论知识的研究,设计了基于 u s b 接口的数字电视接收盒。为了验证设计中所采用架构的合理性,开发了基于 d m a 传输方式的硬件模拟器以及相应的流类微驱动程序,以此为基础对整个系统 设计进行了测试,测试结果证明设计中所采用的广播驱动架构是合理的。 关键词:流类微驱动程序广播驱动架构数字电视通用串行总线 a b s t r a c t f i r s t l y ,w i n d o w s 2 0 0 0w d md e v i c ed r i v e r sa r c h i t e c t u r ea n d d e v e l o p m e n t t e c h n o l o g ya r ea n a l y z e dc o m p l e t e l y t h ek e yp r o c e s s e si nd r i v e ra r ed i s c u s s e d t h e n , a v s t r e a mc l a s sm i n i d r i v e r sa r c h i t e c t u r e ,i n t e r a c t i o nw i t ha v s t r e a mc l a s sd r i v e ra n d d e v e l o p m e n t p r o c e s s a r ea n a l y z e di n d e t a i l e d f i n a l l y ,b a s e d o nr e s e a r c ht o u s b , d i g i t a l f e l e v i s i o na n db r o a d c a s td r i v e ra r c h i t e c t u r e ,ad e s i g no fd t vr e c e i v e rb a s e d o na v s t r e a mc l a s sm i n i d r i v e ra r e p r o p o s e d ,t ov e r i f y t h i sd e s i g n ,as i m u l a t e dh a r d w a r e a n dt h em i n i d r i v e rf o ri ta r e d e v e l o p p e d , k e y w o r d :a v s t r e a m c l a s sm i n i d r i v e r b r o a d c a s td r i v e ra r c h i t e c t u r e d i g i t a lt e l e v i s i o n u n i v e r s a ls e r i a lb u s 创新性声明 本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究 成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不 包含其他人已经发表或撰写过的研究成果:也不包含为获得西安电子科技大学或 其他教育机构的学位或证书而使用过的材料。与我一一同工作的同志对本研究所傲 的贡献均已在论文中做了明确的说明并表示了谢意。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 本人签名:暨l 三耋 日期:生! 主! 金星旦 关于论文使用授权的声明 本人完全了解西安电子科技大学有关保留和使用学位论文的规定,即:研究 生在校攻读学位期间沦文工作的知识产权单位属西安电子科技大学。本入保证毕 业离校后,发表论文或使用论文工作成果是署名单位仍然为西安电子科技大学。 学校有权保留送交论文的复印件,允许查阅和借阆论文;学校可以公布论文的全 部或部分内容,可以允许采用影印、缩放或其他复制手段保存论文。 ( 保密的论文在解密后遵守此规定) 日期:2 1 1 s 笪j 丑呈! 旦 曰期:坦受:! 丝 绪论 本论文对w i n d o w s 操作系统下视窗驱动程序模型( 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 平台提出的最新的驱动程 序模型。驱动程序是操作系统内核的一部分,在计算机系统中起着举足轻重的作 用。驱动程序开发属于系统编程范畴,是系统编程中比较困难的部分。视频采集 分为三个阶段,首先对外部数据的采集,其次是采集到的数据到计算机的传送, 最后是计算机通过应用程序对采集的数据进行处理。视频采集中涉及硬件,驱动 程序以及上层应用开发,在这里选择驱动程序作为研究的方向,主要是基于以下 考虑: 1 ,视频采集困其数据的持续性以及高速率,对驱动程序的执行效率提出了较高的 要求,而在视频采集中上层应用程序如果是基于一般的通用驱动程序开发则应 用程序将比较复杂,而新的广播驱动架构则很好的简化了上层应用开发,在此 架构中采用了新的流类驱动程序架构而不是通用驱动程序。 2 为了简化内核模式下流数据的处理微软提出了广播驱动架构、流类驱动程序、 流类微驱动程序,以及基于流类驱动程序的应用开发等新的概念与技术,这些 新的概念与技术主要就是为了解决目前视频采集所遇到的问题,而目前对这 方面的研究比较少,微驱动程序开发的概念很少有介绍,因此对这一领域进行 研究是很有必要的。 3 最后在对微驱动程序的应用设计中我们采用了u s b 接口,主要是考虑目前 u s b 接口的通用性,而且更有利于该设计转化为实际应用。 本课题首先以数字电视接收为切入点对视频采集进行了研究,从中找到视频 采集总流程p c 端的关键所在,即驱动程序的开发,然后结合视频采集对驱动程序 高效的要求,经过对国内外相关资料的收集,整理得出视频采集中驱动程序所应 采用的是流类驱动程序和流类微驱动程序配合工作的方式。然后从理论的方面对 微驱动程序的开发进行了详细的研究,着重讨论了微驱动程序的基本架构,工作 流程。最后对数字电视的接收所需要的知识进行了学习和研究,并研究了u s b 总 线的相关规范,在此基础上设计了基u s b 接口的数字电视接收盒,该设计方案完 全应用了微驱动程序的概念,以及基于微驱动程序的广播驱动架构。 本文中讨论的微驱动程序开发,虽然只是w d m 驱动程序的一个分类,但是 对该分类的详细研究目前相对比较少,因此在该论文中详细研究并通过硬件模拟 器验证了的微驱动程序架构,为以后编写各种应用的微驱动程序都是一个很好的 指引。同时,为讨论微驱动程序而首先研究的通用驱动程序开发对编写般的通 流类微驱动程序研究及在视频采集中的应_ 蚪i | 用驱动程序也有很实际的借鉴意义。 论文总体上分为三个部分:第一部分讨论了通用驱动程序开发的基本知识, 主要包括操作系统的体系结构、w d m 通用驱动程序的基本结构和主要例程等;第 二部分是本论文的核心研究,主要讨论了微驱动程序的基本架构,主要例程,微 驱动程序中的一些基本概念,以及流类驱动程序和微驱动程序的交互流程;第三 部分,是对微驱动程序研究的应用,设计了基于u s b 接口的数字电视接收盒,最 后由于硬件的实际限制开发了硬件模拟器来对微驱动程序以及基于微驱动程序的 数据采集架构进行验证。 第一章系统与驱动开发 第一章系统与驱动开发 视窗驱动程序模型为w i n d o w s 操作系统下设备驱动程序开发提供了一个框 架,是目前w i n d o w s 操作系统下内核模式驱动程序中的一个主要模式。本章首先 以w i n d o w s 2 0 0 0 为例对w i n d o w s 操作系统进行分析,然后讨论了w i n d o w s 下w d m 驱动程序的开发。 1 1 操作系统 要研究驱动程序开发首先要了解操作系统结构,图1 1 显示了w i n d o w s 2 0 0 0 操作系统的主要部件和工作结构。由图可见w i n d o w s 操作系统分用户模式和内核 模式两种,因此任何软件要么执行在用户模式中,要么执行在内核模式中。其中 驱动程序是运行在内核模式下的系统程序。而我们要研究的w d m 驱动程序就是内 核模式驱动程序的一种。 登录进程 ll w i n a 2 月j p fl p o s i x m p 安全子系统l 一w i n 3 2 子系统iip o s i x 予系统i 用户模式 l a n 管理器w l n 3 2 用户和g d il 内核模式 系统服务 件系统、 a 问屉和| 低层驱动 进程 本地过l 翌象i 安全目月 结构l n i 月, nl 管理器l 原口监视 内核 硬件应用层 硬件 匿三叵固至囤圈 图1 iw in d o w s 2 0 0 0 运行上下文主要部件和工作结构 图中从登陆进程、w i n 3 2 用户和p o s i x 客户到各个子系统之间是消息处理机 制。而从子系统到系统服务,用的是系统捕获机制。也就是说w i n d o w s 2 0 0 0 中包 含了一些在用户模式运行的部件。而其它的系统部件是在内核模式中,它们是相 互独立的部件,这些部件都是逻辑上的部件。其中,对内核模式驱动程序开发者 来说,必须明确知道操作系统的内核部件和它们的工作原理,这些部件包括:内 核( k e r n e l ) 、i o 管理器0 om a n a g e r ) 、即插即用管理器( p l u g a n d p l a ym a n a g e r ) 、电 源管理( p o v q e rm a n a g e r ) 、硬件抽象层( h a r d w a r ea b s t r a c t i o nl a y e r ,h a l ) 、内存管理 流类微驱动程序研究及在视频采集中的应用 器( m e m o r ym a n a g e r ) 、执行支持部件( e x e c u t i v es u p p o r t ) 、进程结构部件( p r o c e s s s t r u c t u r ec o m p o n e n t s ) 、对象管理器( 0 b j e c tm a n a g e r ) 和安全引用原则监视( s e c u r i t y r e f e r e n c em o n i t o r ) 。 1 1 1 用户模式和内核模式 只有c p u 运行在保护模式时才有用户模式和内核模式的概念,它们分别对应 于c p u 的两种运行状态。在i n t e lx 8 6 平台上,内核模式对应于c p u 的r i n g0 ,用 户模式对应于c p u 的r i n g 3 。 用户模式是计算机运行的一种模式,在这个模式上,处理器只能存取分配给 凌用户运行作业的存储区和其他资源,不能执行特权指令,此时处理器处于最小 优先级运行状态。应用程序和一部分系统部件运行于用户模式。在用户模式中, 硬件阻止特权指令的执行,并进行内存和i 0 空间的访问检查。操作系统禁止在用 户模式执行的程序进行任何i 0 操作,并捕捉违反系统完整性的任何行为。 在内核模式中,操作系统和c p u 没有任何限制。程序可以执行所有特权级指 令,拥有对任何i o 设备和虚拟地址的全部访问权,还可以控制虚拟内存硬件。在 内核模式中,系统还提供上千种系统功能调用和多种内核对象,用来完成各种系 统的特权功能。这些系统调用和对象,用户模式的程序无法接触。此外在内核模 式中执行的程序效率也比用户模式中执行的程序高很多。 1 1 2 硬件抽象层 硬件抽象层( h a r d w a r ca b s t r a c t i o nl a y e r ,h a l ) 是系统与硬件之间用来上下传 送数据的一个层次。对用户来讲,是封闭的、不透明的( i 9 4 n ,对驱动程序开 发来说,也是不透明的,但是在驱动程序中可以操作、控制和管理它) 。硬件抽 象层是计算机中除c p u 之外所有硬件的抽象。h a l 提供一组定义非常清楚的函数 供其他系统组件调用,其管理的硬件设备主要有: 定时器 i i o 总线 设备寄存器 中断寄存器 d m a 控制器 各种系统组件都使用h a l 提供的接口函数与除c p u 以外的硬件交互。这样, 可以对系统隐藏硬件平台特定的细节,提高了系统的可移植性。特别是,使用h a l 函数,可以使内核和设备驱动程序在相同的c p u 体系架构上二进制代码兼容。 第一章系统与驱动开发 1 1 3 内核 在操作系统中,内核( k e r n e l ) 实现诸如分配硬件资源、进程调度等基本功能, 是与硬件机器直接交互的部分,始终驻留内存。内核代表c p u 自身的抽象模型。 内核管理以下功能: 中断和异常处理 线程调度和同步 多处理机同步 定时控制 通过使用这些内核服务,操作系统的高层部分可以忽略底层c p u 的体系结构 使得驱动程序和高层系统组件有可能实现在不同c p u 体系结构间源代码级兼容。 内核还管理一些内核对象,驱动程序可以通过创建和管理各种内核对象来请 求内核的帮助。这些对象分为两大类: 1 派遣对象。如:e v e n t ,m u t e x 等用于管理和同步线程的对象。 2 控制对象。如:延迟过程调用( d e f e r r e d p r o c e d u r e c a l l ,d p c ) 对象、中断 ( i n t e r r u p t ) 对象等,用于控制中断和驱动程序的流程。 1 1 4 执行模块 执行模块( e x e c u t i v e ) 实际并不是一个真正的内核模块,它是若干独立的内核模 块组件的集合。而这些内核组件之间并没有多少联系,是完全独立的,它们只通 过定义好的接口进行通信。这些内核组件包括: 1 对象管理器用来管理系统提供给用户模式程序的对象。这些对象包括进程对 象、线程对象和文件对象等等。 2 ,配置管理器管理注册表的数据库。注册表维护了系统和驱动程序运所需的各 种配置信息和参数。 3 进程管理器管理进程和线程的创建、管理和删除。它还为同步线程提供一组 标准的服务 4 安全引用监视器提供一组原语,内核模式和用户模式组件可以调用它们来验 证对对象的访问,检查用户特权。驱动程序通常不与这个组件交互,i o 管理 器在调用驱动程序的任何例程之前处理这类工作。 5 虚拟内存管理器使用按需分页的虚拟内核管理技术来维护4 g 的虚拟地址空 间,还构造和维护内存描述表( m e m o r y d e s c i p t o r l i s t m d l ) 。 6流类微驱动程序研究及在视频采集中的应j = = | 6本地进程调用( l o c a lp r o c e d u r ec a l l ,l p c ) 是个消息传递机制,用于在同一一一台 机器上的进程之间通信。l p c 主要由受保护的子系统以及客户程序使用,驱动 程序对其没有访问权。 7i o 管理器把用户模式或内核模式的i o 请求转换成对各种驱动程序例程一定 顺序的调用。i o 管理器是与驱动程序交互最多的系统组件。 8 即插即用管理器也叫p n p ,它是i b m 在推出p s 2 计算机的时候,通过微通道 技术而体现的一种技术。用于管理关于即插即用的各种资源的分配与回收的程 序。 9 电源管理器电源管理是指绿色计算机的一个基本要求。当计算机较长时间未 执行任何操作时,可自动进入省电状态,其管理程序是对其中各个细微过程的 控制。 1 0 执行支持部件是一些对执行程序进行控制和管理的程序。执行支持部件是控 制其他程序的装入和重定位的一种程序。在有些情况下,执行程序可利用一般 程序员都不知道的指令。它可提供编辑程序、编译、链接、装入、及执行等功 能的程序。用此程序,计算机可以综合各程序的要求,分别按调度程序执行的 顺序,若加上其他一些程序的配合执行程序就可扩大为操作系统。执行程序的 主要任务是作业调度、内存分配和监督管理控制输入输出装置等。 1 1 5 保护子系统 定义操作系统外观的系统扩展组件,称为保护子系统。w i n d o w s 2 0 0 0 的用 户和程序员不是直接与操作系统,而是与这些子系统交互。 根据所做的工作,保护子系统可以分成两类: 1 整体子系统执行某个必要的系统功能。 2 环境子系统为某个特定操作系统固有的应用程序提供编程接口和执行 环境。如:w i n 3 2 子系统、d o s 虚拟机、p o s i x 子系统等等。 1 2 w i n d o w s 2 0 0 0 驱动程序概述 完整的w i n d o w s2 0 0 0 系统包含多种驱动程序。在w i n d o w s2 0 0 0 中,所有的 操作都需要驱动程序的运行行才能完成。驱动程序可分为两个基本类型:用户模 式中被保护的子系统和内核模式驱动程序。 第一章系统与驱动开发 1 2 1 用户模式中被保护的子系统 w i n d o w s 2 0 0 0 中有三个子系统:p o s i x ,0 s 1 2 和w i n 3 2 子系统。其中w i n 3 2 子系统最重要,如果没有它,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 2 0 0 0 系统服务,这种调用必须通过一个或多个子系 统动态链接库作为中介才能够完成。例如w i n 3 2 动态链接库实现w i n 3 2 a p i 函数。 1 w i n 3 2 子系统w i n 3 2 子系统是w i n d o w s2 0 0 0 的本机模式a p i 。所有其他子 系统都依赖它执行自己的工作。w i n 3 2 子系统负责如下工作: 系统用户可见的图形用户接i ( g r a p h i c a lu s e ri n t e r f a c e ,g u i ) 。它实现并显 示可视窗口、对话、控件和总的系统风格。 控制台i o ,包括键盘、鼠标、以及整个系统的显示,包括其他子系统。 w i n 3 2a p i 的实现,那是应用程序和其他子系统用来与执行程序交互的接 口。 2 p o s i x 子系统p o s i x 代表了u n i x 操作系统接口的国际标准集,它鼓励制 造商实现兼容的u n i x 风格接口,这样,编程者就会很容易的将他们的应用程 序从一个操作系统移到另个操作系统。w i n d o w s 2 0 0 0 只实现了p o s i x 1 。 3 o s 2 子系统o s 2 是i b m 的微型机多任务操作系统,它在w i n d o w s 2 0 0 0 中, 仅支持x 8 6 操作系统以及基于1 6 位字符的o s 21 2 或视频i o 应用程序。 1 2 2 内核模式驱动程序概述 内核模式驱动程序由运行在内核模式的系统级代码组成。因为内核模式允许 直接硬件访问,因而它们用来直接控制硬件。内核模式驱动程序分为三种基本类 型,即高层、中间层和低层驱动程序,每个类型在结构和功能上都不一样。 最高层驱动程序( h i g h e s t l e v e ld r i v e r s ) 包括文件系统驱动程序,例如,系统提 供的f a t 、n t f s 和c d f s 文件系统驱动( 简称f s d s ) 等。最高层驱动程序始终 需要下面的更低层驱动程序的支持。无论一个特定文件系统驱动程序是否会获得 一个中间层驱动程序支持,任何一个文件系统驱动程序最终都依靠一个或多个低 层外围设备驱动程序的支持。 中间层驱动程序包括诸如磁盘镜像、类驱动程序、微驱动程序和过滤器驱动 程序。中间层处于高级抽象层和低级物理支持之间。例如,磁盘镜像接收高级f s d 的请求以写入一个文件,并将这样的请求转换为两个不同的低级驱动程序的两个 请求。类驱动程序是在驱动程序模型中代码重用方面的尝试。因为许多特定类型 流类微驱动程序研究及在视频采集中的应用 的驱动程序具有很多共同点,公共代码可以被放在一个普通的类驱动程序中,与 专门设备代码分开。例如,所有i d e 磁盘驱动程序具有许多共同点。只将公共代 码写一次,并将它们放在一个普通的类驱动程序中,作为中间层驱动程序调入。 厂商和设备专用的i d e 驱动程序就可以编写成微驱动程序,由它与普通类驱动程 序进行交互。过滤器驱动程序是一个中间层驱动程序,拦截发往已经存在的驱动 程序的请求。它们有机会在发往已经存在的驱动程序之前修改请求。 最低层驱动程序是直接与硬件交互的驱动程序。如用来控制一些与外围设备 相连接的i o 总线的p i l p 硬件总线驱动程序。最低层驱动程序是用来控制一个物 理外围设备的,如s c s i 主机总线适配器就是这样的一个低级驱动程序。 如图1 2 表示了从实践出发w i n d o w s2 0 0 0 中驱动程序的分类。 厂刁r 厂万 i 驱动程序ii 驱动程序 图12w i n d o w s 2 0 0 0 中驱动程序种类 l 2 3 内核模式驱动程序的属性 内核模式驱动程序有许多共有的属性,其主要属性如下。 1 可移植性 内核模式驱动程序的源代码应该可以移植于所有w i n d o w 平台。w d m 驱 动程序在其定义中就规定了其源代码可以在w i n d o w s9 8 和w i n d o 、s2 0 0 0 之 间相互移植。为了实现这种可移植性,驱动程序应该全部用c 写,并且只使 用a n s i c 标准规定的语言元素。应避免使用编译器厂商专有的语言特征,并 避免使用没有被操作系统内核输出的运行时间库函数。如果不能避免驱动程 序中的平台依赖,至少应该用条件编译指令隔离这些代码。 2 ,可配置性 内核模式驱动程序应避免对设备特征或某些系统设置作绝对假设,这些 系统设置会随着平台的改变而改变。例如在x 8 6 平台上,标准串行口使用一 个专用的i r q 和8 个i o 端口。把这些值直接写到驱动程序中将使驱动程序 第一章系统与驱动开发 失去可配置性。为了实现可配置性,首先应该在代码中避免直接引用硬件, 郎使是在平台相关的条件编译块中也是这样。应该使用h a l 工具或调用低级 总线驱动程序,或者实现一个标准的或定制的控制接1 2 1 ,并通过控制面板程 序与用户交互。应该使用注册表作为配置信息的数据库,这可以使配置信息 在系统重新启动后仍然存在。 3 基于对象 w i n d o w s2 0 0 0 内核是基于对象的,即驱动程序和内核例程使用的许多数 据结构都有公共的特征,这些特征集中由对象管理器管理。这些特征包括名 称、参考计数、安全属性等等。在内核中包含了许多执行公共对象管理的方 法例程,例如打开和关闭对象或提取对象名。 驱动程序使用内核部件输出的服务例程来维护对象或对象中的域。某些 内核的头文件中没有其数据成员的声明。其它内核对象,如设备对象或驱动 程序对象则是部分不透明的,驱动程序开发支持包( d r i v e rd e v e l o p m e n tk i t s , d d k ) 头文件中声明了其结构的全部成员,但d d k 文档中仅描述了可访问的 成员并警告驱动程序开发者不要直接访问或修改其它成员。对于驱动程序必 须间接访问的不透明域,可以用支持例程访问。 4 包驱动 i o 管理器和设备驱动程序使用i o 请求包( i or e q u e s tp a c k e t ,i r e ) 来管 理i 0 操作的具体细节。首先,某个内核模式部件创建一个i r p ,该i r p 可以 是让设备执行一个操作、向驱动程序发送一个命令,或者向驱动程序询问某 些信息的请求。然后i o 管理器把这个i r p 发送到驱动程序输出的例程上。一 般每个驱动程序例程仅执行i r p 指定的一部分工作然后返回i o 管理器。最后, 当某个驱动程序例程完成该i r p 之后,i 0 管理器删除该i r p 并向原始请求者 报告结束状态。 第二章w d m 驱动程序模型 第二章w d m 驱动程序模型 w d m 驱动程序是一种p 1 1 p 驱动程序,它同时还遵循电源管理协议,并能在 w i n d o w s9 8 和w i n d o w s2 0 0 0 间实现源代码级兼容。在w d m 驱动程序模型中,每 个硬件设备至少有两个驱动程序:功能驱动程序和总线驱动程序。功能驱动程序 即人们常说的硬件设备驱动程序。它了解使硬件工作的所有细节,负责初始化设 备操作,有责任处理i o 操作完成时所产生的中断事件,有责任为用户提供一种适 当的设各控制方式。总线驱动程序负责管理硬件与计算机的连接。 有些设备除了两种最基本的驱动程序外,还有过滤器驱动程序( f i l t e r d r i v e r ) 。 某些过滤器驱动程序仅仅是在功能驱动程序执行i o 操作时进行监视。多数情况 是:硬件或软件厂商利用过滤器驱动程序修改现有功能驱动程序的行为。上层过 滤器驱动程序在功能驱动程序之前看到i r p ,它们有机会为用户提供额外的信息, 而功能驱动程序根本不知道。有时,一个上层驱动程序可以修正功能驱动程序或 硬件存在的毛病或缺陷。低层过滤器驱动程序在功能驱动程序要向总线驱动程序 发送i r p 时看到i r p 。 2 1 设备和驱动程序的层次结构 w d m 模型使用了如图2 1 的层次结构。图中左边是一个设备对象堆栈。设备 对象是系统为帮助软件管理硬件而创建的数据结构。一个物理硬件可以有多个这 样的数据结构。处于堆栈最底层的设备对象称为物理设备对象f p h y s i c a ld e v i c e o 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 i d o ) 。位于f d o 上面的过滤器设备对象称为上层过滤器, 位于f d o 下面( 但仍在p d o 之上) 的过滤器设备对象称为下层过滤器。 操作系统的p n p 管理器按照设备驱动程序的要求构造了设备对象堆栈。总线 驱动程序的一个任务就是枚举总线上的设备,并为每个设备创建一个p d o 。一旦 总线驱动程序检查到新硬件存在,p n p 管理器就创建个p d o ,之后便开始描绘 如图2 1 所示的结构。 ! !堕耋壁里垫堡壁塑塞墨垄塑塑墨叁生塑壁旦一 图21w d m 中设蕾对象和驱动程序的层次结构 创建完p d o 后,p n p 管理器参照注册表中的信息查找与这个p d o 相关的过滤 器驱动程序和功能驱动程序,它们出现在图的中部。系统安装程序负责添加这些 注册表项,而驱动程序包中控制硬件安装的文件( 即i n f 文件) 负责添加其它表项。 这些表项定义了过滤器驱动程序和功能驱动程序在堆栈中的次序。p n p 管理器先装 入最底层的过滤器驱动程序并调用其a d d d e v i c e 函数。该函数创建一个f i d o ,这 样就在过滤器驱动程序和f i d o 和之间建立了水平连接。然后,a d d d e v i c e 把p d o 连接到f i d o 上,这就是设备对象之间连线的由来。p n p 管理器继续向上执行,装 入并调用每个低层过滤器驱动程序、功能驱动程序、每个高层过滤器驱动程序, 直到完成整个堆栈。 层次结构可以使i o 请求过程更加明了,见图2 1 的右侧。每个影响到设备的 操作都使用i o 请求包。通常i r p 先被送到设备堆栈的最上层驱动程序,然后逐渐 过滤到下面的驱动程序。每一层驱动程序都可以决定如何处理i r p 。驱动程序可以 不做任何事,仅仅是向下层传递该i r p ,或直接处理完该i r p ,不再向下传递,或 既处理了i r p ,又把i r p 传递下去。这取决于设备以及i r p 所携带的内容。 在单个硬件的驱动程序堆栈中,不同位置的驱动程序扮演了不同的角色。功 能驱动程序管理f d o 所代表的设备。总线驱动程序管理计算机与p d o 所代表设 备的连接。过滤器驱动程序用于监视和修改i r p 流。 2 2 w d m 驱动程序中的对象 在w d m 驱动程序中,系统使用许多种对象作为其控制的各种硬件设备的逻 辑抽象。最常用到的对象有:驱动程序对象和设备对象。这些对象实际上都是一 些包含某些属性和回调函数指针的数据结构。系统通过在这些对象之间传递i o 请 求包以及调用这些对象的回调函数来管理和维护驱动程序。 一 一 笙= :童型里竺翌垫型生丝型! 生 2 2 1 驱动程序对象 i l o 管理器使用驱动程序对象( d r j v e r o b j e c t ) 来表示每个设备驱动程序, 驱动程序对象结构如图2 2 所示。驱动程序对象是部分不透明的。所以我们仅能 直接访问或修改结构中的某些域。在图中,驱动程序对象的不透明域用灰背景表 示。 图2 2d r l v e r _ o b j e c t 数据结构 驱动程序对象中的可访问域介绍如下。 1 d e v i c e o b j e c t ( p d e v i c e _ o b j e c t ) 指向一个设备对象链表,每个设备对象代 表一个设备。i o 管理器把多个设备对象连接起来并维护该域。非w d m 驱动 程序的d r i v e r u n l o a d 函数利用该域来遍历设备对象列表,以便删除其中的设备 对象。w d m 驱动程序没有必要使用该域。 2 d r i v e r e x t e n s i o n ( p d r i v e re x t e n s i o n ) 指向一个如图2 ,3 所示的子结构, 其中只有a d d d e v i c e ( p d r i v e ra d d a d d d e v i c e 是一个指针,它指向驱动程序中创建设备对象的函数。 图23d r i v e re x t e n s l 0 n 数据结构 3 t h a r d w a r e d a t a b a s e ( p u n i c o d e s t r i n g ) 指向一个串,该串为设备的硬件数据 库键名a 内容与“k r e g i s t r y m a c h i n e k h a r d w a r e k d e s c r i p t i o n s y s t e m ”类似,该注册 表键保存着该设备的资源分配信息。w d m 驱动程序没有必要访问该键下的信 流类微驱动程序研究及在视频采集中的应用 息,因为p n p 管理器自动执行资源分配。该名字以u n i c o d e 方式存储。( 实际 上,所有内核模式串都使用u n i c o d e 编码) 。 4 f a s t l o d i s p a t c h ( p f a s ti o d i s p a t c h ) 指向一个函数指针表,这些函数是由 文件系统和网络驱动程序输出的。 5 dr i v e r s t a r t l o ( p d r i v e r) 指向驱动程序中处理串行请求的函_ s t a r t i o i o 数,i o 管理器自动为驱动程序串行化多个i o 请求。 6d r i v e r u n l o a d ( p d r i v e r 7 m a j o r f u n c t i o n ( a r r a yo f p d r i v e r _ d i s p a t c h ) 是一个函数指针表,指向存在 于驱动程序中的二十多种i r p 处理函数。该表定义了i o 请求如何进入驱动程 序。 2 2 2 设备对象 图2 4 给出了设备对象( d e v i c eo b j e c t ) 的数据结构。i o 管理器负责管 理设备对象。设备对象各个域作用如下: 1 d r i v e r o b j e c t ( p d r i v e ro b j e c n 指向与该设备对象相关的驱动程序对象。 过滤器驱动程序有时需要用该指针来寻找被过滤设备的驱动程序对象,然后查 看其m a j o r f u n c t i o n 表项。 2 n e x i d e v i c e ( p d e v i c eo b j e c n 指向属于同一个驱动程序的下一个设备对 象。是该域把多个设备对象连接起来,起始点就是驱动程序对象中的 d e v i c e o b j e e l 成员。w d m 驱动程序没有必要使用此域。 图2 4d e v i c e _ o b j e c t 数据结构 3 c u r r e n t i r p ( p i r p ) 指向最近发往驱动程序s t a r t l o 函数的i o 请求包。 4 f l a g s ( u l o n g ) 包含一组标志位。表2 1 列出了其中可访问的标志位。 第二章w d m 驱动程序模型 表2 1d e v i c e _ o b j e c t 结构中的f l a g s 标志 标志描述 d o b u f f e r e di o 读写操作使用缓冲方式( 系统复制缓冲x e ) 访问用户 模式数据 d oe x c l u s i v e 一次只允许一个线程打开设备句柄 d od i r e c t i o 读写操作使用直接方式( 内存描述符表) 访问用户模 式数据 d od e v i c e i n i t i a l i z i n g 设备对象正在初始化 d oe o w e r j ,a g a b l e 必须在p a s s i v e _ l e v e l 级上处理i r p m j p n p 请 求 d op o w e r _ i n r u s h 设备启动期间需要大电流 5 d e v i c e e x t e n s i o n ( p v o i d ) 指向一个由用户定义的数据结构,该结构可用于保 存每个设备实例的信息。i o 管理器为该结构分配空间,但该结构的名字和内 容完全由用户决定。 6 c h a r a e t e r i s t i c s ( u l o n g ) 是另一组标志位,描述设备的可选特征,见表2 2 。 i o 管理器基于i o c r e a t e d e v i c e 的一个参数初始化这些标志。过滤器驱动程序 沿设备堆栈向上方向传播这些标志。 7 d e v i e e t y p e ( d e v i c e _ t y p e ) 是一个枚举常量,描述设备类型。i o 管理器基 于i o c r e a t e d e v i c e 的一个参数初始化这个成员。过滤器驱动程序有可能需要探 测该值。 表2 2d e v i c e _ o b j e c t 结构中的c h a r a c t e r i s t i c s 标志 标志 描述 f i l e _ r e m o v a b l em e d i a 可更换媒介设备 f i l e _ r e a d _ o n l yd e v i c e 只读设备 f i l e _ f l o p p yd 1 s k e t t e 软盘驱动器设备 f i l e _ w p d t e _ o n c e _ m e d i a 只写一次设备 f i l e _ r e m o t e _ d e v i c e 通过网络连接访问的设备 f i l e _ d e v i c e i s m o u n t e d 物理媒介己在设备中 f i l e _ d e v i c es e c u r e _ o p e n 在打开操作中检查设备对象的安全属性 8 s t a c k s i z e ( c c h a r ) 统计从该设备对象开始向下直到p d o 之问的设备对象个 数。该域目的是告诉其它代码,如果把该设各对象的驱动程序作为其i r p 的第 一发送对象,那么应在这个i r p 中创建堆栈单元( s t a c kl o c a t i o n ) 的数目。w d m 驱动程序通常不需要修改该值,因为创建设备堆栈的支持函数会自动完成这个 任务。 流类微驱动程序研究及在视频采集中的应用 2 3w d m 主要例程 可以把一个完整的驱动程序看作是一个容器,它包含许多例程,当操作系统 遇到一个i r p 时,它就调用这个容器中的例程来执行该i r p 的各种操作。图2 5 表现了这个概念。在驱动程序中基本驱动程序例程以及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 这三个派遣函数是必须,其他都是可选的。需要对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 n t e r r u p t s e r v i c er o u t i n e ,i s r ) 和一个延迟过程调用例程。所以,w d m 驱动程序开发者的一 个任务就是为这个容器选择所需要的例程。 基本驱动程序例程 匝鬲吾网 匝亚巫蛰 i o 控制例程派遣例程 ld i s p a t c h p n p ld i s p a t c h p o w e r ld i s p a t c h w m i ld i s p a t c h r e a d f d i s p a t c h w r i t e 圈25w g u 驱动程序“容器”中内容 第三章内核流驱动程序 第三章内核流驱动程序 3 1 内核流 3 1 1 内核流设计 内核流( k e r n e ls t r e a m i n g ,k s ) 是指微软提供的支持内核模式流数据处理的服 务。微软提供了端口类( p o r tc l a s s ) 、流类( s t r e a mc l a s s ) 、音视频流( a v s t r e a m ) 等 三种多媒体类驱动程序模块。对任何多媒体设备只需要开发运行于任何一个模块 下的微驱动程序( m i n i d r i v e r ) 。 1 内核流驱动程序流驱动程序简单的说就是指对不间断数据的接收、处理和输 出的管理、控制程序。而内核流驱动程序就是运作内核程序不间断的数据流的 驱动程序。它是内核系统进行多媒体处理的重要组成都分,它决定着系统平台 的多媒体处理能力。 2 内核流模型由于数据有多种的格式形式,也就是说有多种的数据流,而驱 动程序要想对不同的数据流进行处理就必须建立个结构它必须尽可能 多的包含所有要被处理的数据格式并提供处理方案。这就需要一个新的数据处 理模型。当出现多媒体设备以后,为了更好地支持广大的多媒体设备,微软就 相应地提出了内核流驱动程序模型,即内核流模型。它是w i n d o w s 驱动程序 模型( w d m ) 的一部分。使得各种支持内核流模型的驱动可以向操作系统报告 其各自的能力,并可以通过加载各种驱动来扩展多媒体的能力。图3 1 表现了 内核流的基本组成。 m i c r o s o f t s u p p ll e d v e n d o r s u p p li e d 围31 内核流架构框图 流类微驱动程序研究及在视频采集中的应用 3 1 2 内核流应用接口 内核流模型下,应用程序使用c o m 编程中常用的术语( 方法、属性和事件) 来与内核流驱动程序进行交互。这些结构应用于四种不同类型的内核流对象:过 滤器、管脚、时钟、分配器。每个内核流对象作为一个标准的i o 文件对象暴露给 应用程序。 1 过滤器( f i l t e r ) 过滤器就是一个按一定要求分离数据的程序。例如,对输入数据进行筛选, 仅允许某些符合规定模式或条件的数据项保留下来的程序。 在内核流中,一个内核流过滤器就是一个封装了的一个设备的功能性单位。 驱功程序可以支持同一个过滤器的多个实例。在一个多功能设备中,可以支持多 个不同类型的内核流过滤器。 每个内核流驱动程序类型,无论是功能性的还是过滤器的,都可以有多个内 核流过滤器文件对象。这些文件对象是由内核流驱动程序所创建的。 2 ,管脚( p i n ) 管脚也口q 引脚。原来是指集成电路芯片与其它部件连接的引线。在系统内核 编程中,它是用函数实例来代表的,代表了设备一个i o 频道。用户程序可以与管 脚相连接,也可以把管脚相互连接起来,或为某类数据格式传递一个管脚。 3 时钟( c l o c k ) 驱动程序将主板时钟所表示的时间看作一个文件对象。当该时间到到达指定 时间时,可以用一个事件通知应用程序。 4 分配器( a l l o c a t o r ) 分配器可以动态的产生一个对象,并赋予一个指示此对象的存取值。分配器 中给定的类型标志表示所产生的对象的类型,由分配器送回的存取值类型由上下 文来定义。也可以这样说,它们是支持自定义内存管理接口的驱动程序,比方说, 设备主板内存的管理就被看作是一个分配器文件对象。用户可以使用此文件对象 来分配或收回内存。 内核流的文件对象的组织形式是分层的。上层应用使用i r pm jc r e a t e 来 创建驱动中的内核流过滤器,并依次用i r

温馨提示

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

评论

0/150

提交评论