




已阅读5页,还剩55页未读, 继续免费阅读
(计算机应用技术专业论文)unix设备驱动研究及开发工具包的实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华中科技大学硕士学位论文 摘要 l u n i x 操作系统自问世以来,以其卓越的可靠性,稳定性及安全性长期占据 服务器市场,另外l i n u x 操作系统( 类u n i x 操作系统) 的迅速崛起,使得开发 基于u n i x 平台的设备驱动程序成为众多硬件设备提供商所必须面临的问题。 对于不同类型的设备,u n i x 内核通过各自的驱动程序控制管理它们,因此 深入u n i x 内核角度剖析不同类型的设备驱动程序具有重要意义,同时驱动程序 所涉及资源多为内核资源,操作系统对资源的调度分配策略亟待考虑;另一方面 驱动程序驻留于内核,它不同与一般应用程序,必须遵循操作系统的相应规范, 开发人员应对开发特定设备驱动程序所涉及的相关技术有深入了解。肜 由于u n i x 驱动程序设计模式的一致性,使得通用的设备驱动程序开发工具 的设计和实现成为可能,u n i x 设备驱动程序丌发工具包是一个基于u n i x 设备 驱动程序规范的开发工具,它的设计和实现运用了面向对象及软件工程的设计思 路,按照u n i x 系统对设备的分类方式,探讨了不同类型设备驱动程序的开发技 术。除了驱动程序的基本设计方法,驱动丌发人员还须涉及的一个技术要点就是 总线规范,驱动开发工具包讨论了p c i 和u s b 这两类最常用总线设备的驱动程序 开发,并结合内核的资源调度策略,探讨了在驱动程序中f 确使用各种内核资源 的方法。 该工具包提供了一个基本的向导工具,可使用户利用驱动丌发工具包的基本 模式生成符合自己特定需求的驱动程序结构,同时提供测试工具,用户可以利用 它对指定端口或内存区域进行读写,以检查驱动程序是否发生作用。 关键词:u n i x 操作系统;驱动程序;外围设备接口: 通用串行总线;u n i x 设备驱动丌发工具包 华中科技大学硕士学位论文 a b s t r a c t w i t ht h el i n u x o p e r a t i n gs y s t e m ( as t y l e o ft h eu n i xo p e r a t i n gs y s t e m ) p o p u l a r i z e da n d v a r i e t i e su n i xs y s t e ms e r v e rw i d e l yu s e d ,d e v e l o p i n gd e v i c ed r i v e r s b a s e do nu n i xb e c o m e st h ed e v i c e sv e n d o r s n e wp r o b l e m s f o rd i f f e r e n tk i n d so fd e v i c e s ,u n i xk e r n e lm a n a g e st h e mb yt h e i rd r i v e r s s oi t i sn e c e s s a r yt og od e e pi n t oa n a l y z i n ga l lt y p e so fd e v i c ed r i v e r si nt h ev i e wo fk e r n e l a tt h es a m et i m er e s o u r c e sr e l a t e dt od e v i c ed r i v e r sa r ea l m o s tk e r n e lr e s o u r c e s t h e a l l o c a t i n ga n ds c h e d u l i n gp o l i c e s o fr e s o u r c ea r en e e d e dt ob ec o n s i d e r e d o nt h e o t h e rs i d e ,d r i v e r sr e s i d ei nt h ek e r n e l t h e ya r ed i f f e r e n tf r o mc o m m o na p p l i c a t i o n p r o g r a m s t h e ym u s tf o l l o ws o m er u l e s t h a tt h e o p e r a t i n gs y s t e mr e q u i r e s d r i v e r d e v e l o p e rs h o u l du n d e r s t a n dr e l a t e dt e c h n o l o g i e so fd e v e l o p i n gd e v i c e d r i v e r s b e c a u s eo ft h ec o n s i s t e n c yo fu n i xd r i v e rd e s i g nm o d e li ti sp o s s i b l et od e s i g n a n di m p l e m e n tu n i v e r s a ld e v i c ed r i v e rd e v e l o p i n gt o o l s u n i xd r i v e rd e v e l o p m e n tk i t i sa d e v e l o p i n gt o o lb a s e d o nu n i xd e v i c ed r i v e rp a t t e r n s o m et h e o r i e sa n dm e t h o d s o fs o f t w a r ee n g i n e e r i n ga n do r i e n t e do b j e c t sa r ea d o p t e d a c c o r d i n gt ot h ew a yt h a t u n i xs y s t e md i v i d e st h ed e v i c e s ,t h et o o l sp r o b e si n t oh o wd r i v e rd e v e l o p e r ss h o u l d d e v e l o pt h ek i n do fd e v i c e sf o rd i f f e r e n tk i n d so f d e v i c e s b e s i d e st h eb a s i cp a t t e r no f d r i v e rd e s i g na n o t h e rp r o b l e md e v e l o p e rs h o u l db ef a c e dt oi st h eb u sm o d e l s d r i v e r d e v e l o p m e n t k i td i s c u s s e st h ed r i v e rd e v e l o p m e n t so ft w oc o m m o nb u st y p e s ,p c ia n d u s b i na d d i t i o n ,i tp r o b e si n t ot h em e t h o do f u s i n gk e r n e lr e s o u r c e sa c c o r d i n g t ot h e s c h e d u l ep o l i c yo fk e r e n e lr e s o u r c e s t h i st o o lk i ts u p p l i e su s e r sw i t hab a s i cw i z a r dt o o l ,w h i c hc a nh e l pd e v e l o p e r st o g e n e r a t eas i m p l ed r i v e ra c c o r d i n gw i t ht h en e e d sb yt h em o d e l o fd r i v e rd e v e l o p m e n t k j ta te a s e i na d d i t i o n ,t h ek i to f f e r st h et e s tt o o l s ,w h i c hc a nr e a do rw r i t et h e s p e c i f i e dp o r t so rm e m o r i e s t ot e s ti ft h ed r i v e ri si n s t a l l e dc o r r e c t l y k e y w o r d s :u n i x ;d r i v e r ;p c i ;u s b ; u n i xd r i v e rd e v e l o p m e n tk i t i i 华中科技大学硕士学位论文 1 绪论 1 1 研究背景、目的及意义 在开发微机应用系统的过程中,通常会遇到在u n i x 环境下对具有特定功能的 硬件设备( 如数据加密卡) ,进行直接访问与控制的问题。在u n i x 操作系统下, c p u 运行于保护模式,并且统一管理硬件资源,执行于用户态的应用程序代码不 能直接访问硬件,而是要通过调用执行于核心念的设备驱动程序提供的各种服务 间接地对硬件资源进行访问,这一机制确保了系统的安全,并且屏蔽了硬件细 节,使应用程序只需专注于上层,不必具有对各种核心资源的存取权限“。 目前流行的所有操作系统都有一个共同的特性,那就是支持众多的各式各样 的外接设备,而且发展的趋势是版本越高对外设的支持就越强,对用户的透明性 越好“1 ,究其原因其实是操作系统内核中集成有多种常用设备的驱动程序,以 l i n u x 为例设备驱动程序在l i n u x 的内核源代码中占有很大的比例,源代码的长 度日益增加,主要是驱动程序的增加。 另外,随着l i n u x 操作系统的广泛应用,越来越多的设备厂商都提供l i n u x 平台下的设备驱动程序,同时许多应用于服务器上的设备也需要开发相应平台( 通 常是u n i x 平台) 下的驱动程序”。因此在u n i x 环境下,为大量不同类型的设备 开发不同版本的驱动程序成为目前涉及计算机硬件设备的开发人员必须面临的问 题,一种通用的、高效的驱动程序丌发工具亟待出现。 由于设备驱动程序需要与操作系统最底层进行交互,因此不同的操作系统底 层结构对应不同的设备驱动模型,w i n d o w s 操作系统系列遵循一个称作w i n d o w s 驱动程序模型( w d m ) 的框架,而各种u n i x 系列虽有各自的驱动程序接口( d d i ) , 但它们都遵循一定的原则“1 ,因为尽管各种u n i x 操作系统的表现形式不一,但 它们的设计思想是一致的。所以u n i x 系列操作系统的设备驱动程序设计模式上 是一致的,正因为其模式有章可循,可以为驱动程序开发人员提供一个工具,这 种工具将根据开发人员对设备的基本特征描述,生成驱动程序代码,使驱动程序 开发人员只须依据硬件规范实现u n i x 下c 编程,这将大大减少开发人员工作量, 具有直接的经济效益及前瞻性,另一方面可减少开发人员因对操作系统内核认识 华中科技大学硕士学位论文 不足,在驱动开发期间导致系统死机,乃至崩溃。 鉴于u n i x 驱动程序设计模式的一致性,通用的设备驱动程序开发工具的设 计和实现成为可能,这个开发工具需要满足下列要求:提供不同类型设备,不同 总线设备驱动程序的支持,屏蔽许多驱动程序与内核方面的细节,并且提供安全 的访问内核资源的方式,使驱动丌发更加容易而高效。 1 2 国内外概况 设备驱动程序常常被认为是较难涉足的领域,如今已成为技术创新中的一个 严重的瓶颈。由于它难于编写,运行失败时又会产生灾难性的后果,所以微软公 司将设备驱动程序视为造成视窗系统稳定性问题的首要原因”0 1 。各种驱动开发工 具因此而应运而生,并且已商业化,不过其中支持u n i x 平台的极为有限。 u n i x 系列也在酝酿并且不断完善一个全新的驱动程序标准, 力求实现驱动 程序在不同平台,不同操作系统下的完全移植,该标准的实际应用将是广大驱动 程序开发人员的福音,意味着将只需对不同版本,不同类型以及建立在不同平台 上的操作系统开发一个驱动程序”。 1 2 1 驱动程序开发工具 当前的开发工具绝大多数都只支持微软视窗操作系统系列,目前商业化的驱 动程序开发工具中,多为国外产品,国内尚无成熟商用的驱动开发工具。下面将 谈到两个最常用的工具。 1 n u m e g a d r i v e r s t u d i o d r i v e r s t u d i o 是美国c o m p u w a r e 公司的旗舰产品,在推出d r i v e r s t u d i o 之 前,c o m p u w a r e 公司已经有了许多针对设备驱动程序和应用软件开发的工具,这 些工具为c o m p u w a r e 公司赢得了众多的奖项。在这个新的套件中包括闻名遐迩的 s o f t i c e ,d r i v e r w o r k s ,v t o o l s d 和d r i v e r a g e n t 工具,加上基于应用软件层技 术开发的设备驱动开发工具b o u n d s c h e c k e r ,t r u e t i m e ,t r u e c o v e r a g e 和 f i e l d a g e n t 。该工具组件可用于加速对设备驱动程序的开发,调试,测试,优化 和发布1 。d r i v e r s t u d i o 将高质量的工具和现代的软件工程惯例引入到一直被 忽视的设备驱动程序开发的领域中。d r i v e r s t u d i 0 提供的工具可加速w i n d o w s 设 2 华中科技大学硕士学位论文 备驱动程序的开发,提高测试性能和程序的可靠性。d r i v e r s t u d i o 的工具可使你 快速的开发出多个高可靠性的设备驱动程序,从而加速了设备驱动程序开发的关 键阶段。无论你的驱动程序方面的知识储备如何,d r i v e r s t u d i o 都能使你轻松 的开发出所需的驱动程序。 d r i v e r s t u d i o 中的驱动程序丌发工具可以帮助你在缩短开发生命周期的同时 开发出高质量的,结构化的驱动程序。 ( 1 ) d r i v e r w o r k s d r i v e r w o r k si 具为开发w i n d o w sn t 、w i n d o w s2 0 0 0 和w i n d o w s9 8w d m 设 备驱动程序提供了一个自动化的方法。这个产品包括改进的d r i v e r w i z a r d ,可以 引导你完成设备驱动程序开发的全过程,并能根据你的硬件种类自动生成设备驱 动程序源代码。类库把常用的操作封装起来,大大减少了你的编码工作, d r i v e r w o r k s 包含完整的源代码,其中有几力行例子和库的源代码,n u m e g a 驱动 程序访问体系结构可以保证在所有视窗系统上的源代码兼容性”“。 ( 2 ) v t o o l s d v t o o l s d 包含你用c 或c + + 为w i n d o w s9 8 、w i n d o w s9 5 和w i n d o w s3 1 编写 v x d 时所需要的全部文件、向导、库和例子代码。q u i c k v x d 向导可以很快创建出 你的驱动程序的框架,节省了你的时间和工作量。不需要微软的d d k 。v t o o l s d 的库均经精心制作,可保证性能的优化。n u m e g a 驱动程序访问体系结构可以保证 在所有视窗系统上的源代码兼容性。 d r i v e r a g e n t 可使w i n 3 2 应用程序直接访问和控制硬件。d r i v e r a g e n t 可以创 建用于测试硬件的快速原型;创建能减少相关设备驱动程序复杂程度的独立诊断 包:创建终端用户应用程序,这些程序可以将易于编程的特点和接近本机设备驱 动程序的性能结合在一起,但却只需要很少的工作量。从w i n 3 2 应用程序中可以 快速方便地访问硬件。接口与语言无关一d r i v e r a g e n t 支持c 、c + + 、j a v a 、d e l p h i 和v i s u a lb a s i c 。配置工具为开发人员和终端用户简化了即插即用的设置过程。 功能强大的向导可以使驱动程序的丌发很快切入正题。易于发现和修复系统级的 错误。 华中科技大学硕士学位论文 ( 4 ) s o f t i c e s o f t i c e 的强大功能突破了传统微软s d k d d k 工具的限制,可以减少故障停 机时间。s o f t i c e 有独特的系统范围的视图和控制,能很容易地推测和诊断形形 色色的视窗系统软件问题。通过因特网进行远程调试提供单机的、源程序级的调 试能力。支持w i n d o w sn t 、w i n d o w s9 5 、w i n d o w s9 8 和w i n d o w s2 0 0 0 ,给那些 正在为任何视窗平台编制设备驱动程序和系统部件的公司提供强大可靠的调试 手段。支持对称多处理器( s m p ) 一 ( s o f t i c ew i n d o w sn t ) s o f t i c e 现在可以 对最多具有8 个c p u 并且使用标准的i n t e l 多处理器方案( a p i c ) 的p e n t i u m 、 p e n t i u mp r o 和p e n t iu mi i i 多处理器系统进行调试。支持微软的内核调试扩展。 s o f t i c e 是一种功能强大的调试软件。为了让你最大限度的认识到你的程序的运 行情况,s o f t l c e 能一直调试到视窗系统的内核”。 2 w i n d r i v e r w i n d r i v e l ? 是k p f t e c h 公司丌发的设备驱动程序开发工具,w i n d r i v e r 是一 款c c + + 的工具组合,可用来存取硬件,而不需要写入装置驱动程序。你只要写 入一次,就可以在这些平台上执行。不需要任何核心或0 s 的知识。w i n d r i v e r 使 用引导来诊断你的硬件,然后自动产生你的驱动程序代码1 。它内含对p l x 和 g a l i l e op c i 芯片组的支持。5 0 4 版包含远程硬件存取能力,可让研发商远程研 发驱动程序、除错,节省铺货成本,且减少行销的时间。 w i n d r i v e r 开发系统由用户态和核态两部分组成,用户态部分主要是 w i n d r i v e r 的用户态库,驱动程序通过调用库函数实现对硬件的操作。核态部分 分w i n d r i v e r 核心和核态嵌入两部分。w i n d r i v e r 核心对用户态提供服务。在 w i n d r i v e t 的体系结构中,w i n d r i v e rk e r n e l 处于中心位置,它主要是由一个设 备驱动程序构成( 1 i ) i n d o w s9 x 中使用w i n d r v r v x d ,而在w i n d o w sn t 中使用 w i n d r y f s y s ) ,它提供的用户态库函数( a p i ) 实际就是对w i n o r i v e r k e r n e l 中实 现的功能进行调用。用户同硬件几乎所有的交互都是通过w i n d r i v e r k e r n e l 来实 现的。这样就极大地解放了开发人员,他所做的主要任务就利用w i n d r i v e r 提供 的用户态函数库( a p i 函数库) ,在用户态实现自己的驱动程序代码,完成硬件 驱动的功能“”。它具有以下主要特点: ( 1 ) 借助独特的设计使设计者能够按“用户模式”创建整个设备驱动程序: 4 华中科技大学硕士学位论文 ( 2 ) 不用写一行代码即可诊断硬件状念,并自动创建驱动程序代码框架: ( 3 ) 可利用常见的软件开发平台m i c r o s o f tv i s u a lc + + 、b o r l a n dc + + 、d e l p h i 并支持其他w i n 3 2 编译器: ( 4 ) 不需要熟悉w in d o w s 内部体系结构、m i c r o s o f ta s m 汇编语言和设备驱动 程序结构体系: ( 5 ) 可创建出运行于w i n d o w s9 5 9 8 n t 3 5 1 n t 4 0 和n t 5 0 的设备驱动程 序: ( 6 ) 支持d m a ,即插即用和多板处理: ( 7 ) 支持i o 中断控制和访问板卡映射的存储器: ( 8 ) 支持p c i ,i s a ,e i s a 总线设备的丌发: ( 9 ) 提供了非常丰富的p c i 总线接口芯片驱动程序库,包括p l x 公司的9 0 5 2 、9 05 4 、9 0 6 0 、9 08 0 ,a m c c 公司的$ 5 9 33 等“。 1 2 2 u d l ( u n i f o r md r i v e ri n t e r f a c e ) u d i ( u n i f o r md r i v e ri n t e r f a c e ) 统一驱动接口是1 9 9 3 年由多家著名电脑产商提 出的,其基本思想是提供一个统一的与平台无关,与操作系统无关的新的u n i x 设备驱动程序接口规范,该规范免费并且公丌,可从s c o 公司的网站上下载。这 些产商包括s c o ,i b m ,i n t e l ,s u n ,s b s ,c o m p a q 等”。 通常设备厂商必须提供多种驱动程序支持( 设备数操作系统数操作系统 版本数平台) ,以数据加密卡为例,它包括服务器端和客户端,并且需运行于多 种操作系统如s c o ,l i n u x ,a i x 等下,因此它就必须提供2 3 种驱动程序,这 不但大大浪费资源,而且给用户也带来诸多不便“。 u d i 可以确保驱动程序源代码具有完全的移植性,它定义了一系列的体系结 构、a p i 以及包的格式,支持源代码级和二进制代码级的分发。同时提供了各种 设备类型的统一形式,定义了通用的执行模型,模块间的通讯以及系统服务等。 并且其具有合法的驱动程序支持”。图1 1 列出了u d i 驱动程序在整个操作系统 中的地位”o 。 华中科技大学硕士学位论文 幽1 1u d i 环境幽 到1 9 9 7 年,u d i 基本成型,随后在1 9 9 9 年形成了v 1 0 ,迄今又推出了v 2 0 ,现 在的u d i 不仅提供了可移植性,同时具备良好的性能以及可扩展性,u d i 正在不 断改进完善,其下一步的目标是: ( 1 ) 实例无关。支持热插拔设备。 ( 2 ) 位置无关。支持分布式环境及i o 处理器,支持用户模式驱动程序, 高级驱动程序调试工具。 ( 3 ) 对所有设备类型运用单一模型。 ( 4 ) 隐含m p 同步,无需锁原语。 ( 5 ) 支持域安装的第三方扩展,增加新的数据模型“”1 。 1 3 主要研究工作 本文阐述了在u n i x 系统下如何丌发设备驱动程序,同时,从l i n u x 内核角度 剖析了设备驱动的具体实现方式,最后综合具体设备的开发经验以及对内核的深入 理解,研究开发出一个类似图形开发环境比如g t k 的u n i x 驱动程序开发工具包 u d d k ( u n i xd r i v e rd e v e l o p m e n tk i t ) 。 u n i x 操作系统作为一套成熟的体系结构,其关于设备管理的框架基本无大 6 华中科技大学硕士学位论文 的改变,而且各种u n i x 变种之间的结构极为类似,可以给驱动程序开发人员提 供一个基于不同设备类型不同总线类库的驱动程序库。本文所讨论的驱动程序开 发工具以及u n i x 系统核心对驱动程序的支持都是基于l i n u x 操作系统的,一则 因为各种u n i x 变种结构相似,二则因为l i n u x 的应用更广。 本文主要研究工作如下: 1 提出将软件工程及面向对象的理论和方法运用到驱动程序开发中,实现了一 个基于u n i x 操作系统( 以l i n u x 和s c oo p e n s e r v e r 为例) 的驱动程序开发 工具包( u d d k ) 。 2 通过定义一些数据结构、宏和功能函数来抽象所有的硬件设备,对不同类型 的设备,不同类型的总线设计不同的类,每个类封装各自的实现方法,即对 应设备的设备操作。 3 对各种设备类,分析u d d k 是如何实现该类对应类型设备的驱动程序。并进 而剖析u n i x 操作系统设备管理的实现,从内核角度分析了操作系统是如何 描述设备进而对设备进行控制,为u d d k 的进一步扩展提供理论支持。 4 定制相应的驱动程序接口,自动为驱动程序分配各种内核资源。详细讨论了 驱动程序中如何申请及调度各种内核资源如内存,i 0 端口,i r q ,d m a 通 道等,并分析了内核对上述资源的相应分配调度策略。 5 分析几种常用总线规范以及操作系统对该总线的支持,讨论了u d d k 如何实 现不同总线如p c i ,u s b 总线类型设备的支持。 7 华中科技大学硕士学位论文 2u n i x 设备驱动 本章剖析了u n i x 操作系统驱动程序的基本框架,并以一个实际的p c i 硬件 设备在l i n u x 操作系统下的驱动程序为线索,具体讨论了在l i n u x 操作系统下如 何开发一个实际应用的设备驱动程序。 2 1 基本概念 设备驱动程序是由操作系统提供的应用程序和设备之间的抽象接口,不同的 设备千差万别,设备驱动程序实际是处理或操作硬件控制器的软件,从本质上讲, 它们是内核中具有高特权级的,驻留内存的,可共享的底层硬件处理例程。在内 核的不断升级过程中,驱动程序的结构通常还是相对稳定。 在u n i x 系统里,对用户程序而言,设备驱动程序隐藏了设备的具体细节,对 各种不同设备提供了一致的接口,一般来说是把设备映射为一个特殊的设备文件, 用户程序可以像对其它文件一样对此设备文件进行操作“”。为u n i x 系列编写驱 动程序,并不像其他操作系统那么复杂。实际上,你所要做的只是为相应的设备 编写几个基本函数并向v f s 注册就可以了。当应用程序需要使用你的设备时, v f s 会调用设备函数。 u n i x 中的设备分为字符设备、块设备和网络设备三种。字符设备和块设备的 主要区别是:在对字符设备发出读写请求时,实际的硬件i o 一般就紧接着发生了, 块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求读写时, 它首先察看缓冲区的内容,如果缓冲区的数据能满足用户的要求,就返回请求的 数据。否则,就调用请求函数来进行实际的i o 操作,块设备是主要针对磁盘等 慢速设备设计的,以免耗费过多的c p u 时间来等待“。网络设备一般通过b s d 套接字接口访问。 除了设备类型( 字符设备或块设备) 以外,内核还需要一对主、次设备号的参 i 华中科技大学硕士学位论文 数,才能唯一标识设备。例如,执行1 s - - 1 命令,可以看到: c r w r w r w lr o o tr o o t4 ,6 4m a r82 0 0 2 t t y s 0 c r w r w r w 一1r o o t t t y 4 ,6 5m a r92 0 0 2 t t y s l 设备文件是特殊文件,第一列中的“c ”表明这是个字符节点,相应块设备的第 一列是b ”。在设备文件条目的最新修改f 1 期前你会看到两个数( 用逗号分隔) , 这些数就是相应设备的主设备号和次设备号。主设备号标识设备对应的驱动程序, 如上,t t y s o 和t t y s l 都由驱动程序4 管理。内核利用主设各号将设备与相应的驱 动程序对应起来,次设备号只能由设备驱动程序使用,内核的其他部分不使用它, 仅将它传递给驱动程序。一个驱动程序可以控制若干个设备,而次设备号提供了 一种区分它们的方法”。 2 2 l i n u x 设备驱动概论 下面是具体到l i n u x 系统罩,设备驱动程序所遵循的通用模式 2 2 1 设备驱动程序接口 i o 子系统向内核其他部分提供了一个统一的标准设备接口,这是通过数据结 构f i l e _ o p e r a t i o n s ( 见i n c l u d e l i n u x f s h ) 来完成的,当应用程序对设备文件进行 诸如o p e n c l o s e ,r e a d w r k e 操作时,内核使用f i l e _ o p e r a t i o n s 结构访问驱动程序的 函数。也就是说,如果应用程序对设备执行读操作,内核将执行f i l e _ o p e r a t i o n s 结构中的r e a d 程序。 此结构定义为: # i n c l u d e s t r u c tf i l e _ o p e r a t i o n s i n t ( + l s e e k ) ( s t r u c ti n o d e + i n o d e ,s t r u c tf i l e + f l i p , o f f _ to f f , i n tp o s ) ;定位操作 i n t ( + r e a d ) ( s t r u c ti n o d e + i n o d e ,s t r u c tf i l e + f l i p , c h a r * b u li n tc o u n t ) ;读操作 i n t ( + w r i t e ) ( s t r u c ti n o d e + i n o d e ,s t r u c tf i l e + f l i p , c h a r + b u f , i n tc o u n t ) ;写操作 9 华中科技大学硕士学位论文 i n t ( + r e a d d i r ) ( s t r u c ti n o d e + i n o d e ,s t r u c tf i l e + f l i p , s t r u c td i r e n t * d i r e n t i n tc o u n t ) ;写操作 i n t ( * s e l e c t ) ( s t r u c ti n o d e + i n o d e ,s t r u c tf i l e + f l i p , i n ts e l _ t y p e s e l e c t _ t a b l e + w a i t ) ;选择操作 i n t ( * i o c t l ) ( s t r u c ti n o d e + i n o d e ,s t r u c tf i l e + f l i p , u n s i g n e di n tc m d ,u n s i g n e di n ta r g ) ;i 0 操作 i n t ( * m m a p ) ( v o i d ) ;,内存映射操作 i n t ( * o p e n ) ( s t r u c ti n o d e + i n o d e ,s t r u c tf i l e + f l i p ) ;打开操作 v o i d ( * r e l e a s e ) ( s t r u c ti n o d e + i n o d e ,s t r u c tf i l e + f l i p ) ;释放操作 ) ; 其中,s t r u c ti n o d e 提供了关于特别设备文件d e v d r i v e r ( 假设此设备名为 d r i v e r ) 的信息。”。 2 2 2 设备驱动程序的框架 了解设备驱动程序的框架,对丌发人员而言是十分方便的,l i n u x 的设备驱动 程序大致可分为如下几个部分: 驱动程序的注册与注销。 设备的打开与释放。 设备的读写操作。 设备的控制操作。 设备的中断和轮询处理。 1 驱动程序的注册与注销 向系统增加一个驱动程序意味着要赋予它一个主设备号,这一赋值过程应该在 驱动程序( 模块) 的初始化中完成,它调用 数r e g i s t e r _ c h r d e v o 或r e g i s t e r _ b l k d e v ( 1 向内核注册,这个函数定义在 。接下来就是给程序一个设备驱动程序名, 这个名字必须插入至t j d e v 目录中,并与驱动程序的主设备号和次设备号相连。在文 件系统上创建一个设备节点的命令是m k n o d ,必须以r o o t 身份进入才能创建设备。例 如创建一个字符设备( c ) ,主设备号是2 5 4 ,次设备号是0 ,执行命令: 1 0 华中科技大学硕士学位论文 m k n o d d e v d e v i e e n a m ec2 5 40 获得主设备号的方法有两种。是可以选择一个当前不用的设备号,或者在调 r e g i s t e r _ c h r d e v i 对,让参数m a j o r 为0 ,其返回值便是设备的主设备号,然后利用 m k n o d 仓l j 建新节点。 在关闭字符设备或块设备时,还需要通过u n r e g i s t e r _ c h r d e v o 或u n r e g i s t e r _ b l k d e v o 从内核中注销设备,并释放主设备号。 2 设备的打开与释放 打开设备是由o p e n ( ) 完成的,o p e n 方法是驱动程序用来为以后的操作完成初 始化准备工作的。在大部分驱动程序中,o p e n 完成如下工作: ( 1 ) 检查设备相关错误,如设备尚未准备好等。 ( 2 ) 如果是首次打开,初始化设备。 ( 3 ) 识别次设备号,如有必要更新当前r e a d w r i t e 位置c o p s 指针。 ( 4 ) 分配和填写要放在f i l e - p r i v a t e d a t a 旱的数据结构。 ( 5 ) 增加使用计数。次设备号可以通过m i n o r ( f i l e 一 c d e n t r y 一 di n o d e 一 i _ r d e v ) 来获得。 释放设备是由r e l e a s e ( ) 完成的,r e l e a s e 方法的作用正好与o p e n 相反,这个设 备方法有时也称为c l o s e 。它应该: ( 1 ) 使用计数减l 。 ( 2 ) 释放在f i l e - p r i v a t ed a t a 中o p e n 分配的内存。 ( 3 ) 在最后一次关闭操作时关闭设备。 3 设备的读写操作 字符设备使用各自的r e a d ( ) 和w r i t e ( ) 来对设备进行数据读写。块设备使用通 用b l o c kr e a d ( ) 和b l o c k w r i t e ( ) 来进行数据读写。这两个通用函数向请求表中增 加读写请求,这样内核可以优化请求顺序。由于是对内存缓冲区而不是对设备进 行操作的,因而它们能加快读写请求。如果内存缓冲区内没有要读入的数据或者 需要将写请求写入设备,那么就需要真正地执行数据传输。这是通过数据结构 华中科技大学硕士学位论文 b l k d e v s t r u c t 中的r e q u e s t _ f n ( ) 来完成的1 。所有块设备的读写都是通过策略程序 完成的。 4 设备的控制操作 除了读写操作外,有时还需要控制设备。这可以通过设备驱动程序中的i o c t l ( ) 来完成。i o c t l o 的用法与具体设备密切相关,对具体应用需具体分析。 5 设备的中断和轮询处理 对于不支持中断的设备,读写时需要轮流查询设备状态。以便决定是否继续 进行数据传输。如果设备支持中断,则可按中断方式进行。 下面是l i n u x 设备驱动程序的一些共同的特点,如表2 1 所示。 表2 1l i n t l x 设备驱动程序的共同特点 作为内核的一部分设备驱动程序作为内核的一部分而存在,因此“恶意” 的驱动程序会破坏系统。 提供内核接口设备驱动程序要为内核或内核的子系统提供标准接口。 利用内核机制和服务设备驱动程序要使州一些诸如内存分配、中断传输及等 待队列等内核机制和服务。 可装载大部分设备驱动程序可作为内核模块在必要时装入,而 不再需要时卸载。 可配置l i n u x 设备驱动程序可内建到内核中,可在编译时指定 内建的设备驱动程序。 动态性如果装载的设备驱动鞋序启动时没有找到对应的设备, 则该设备驱动程序只烂占用了一些系统内存,对系统并 没有害处。 2 3 本章小结 u n i x 操作系统抽象了设备的处理,所有对硬件设备的操作和通常的文件一样, 利用标准的系统调用可在设备上进行打开、关闭、读取或写入操作。u n i x 中的设 1 2 华中科技大学硕士学位论文 备分为字符设备、块设备和网络设备三种。设备驱动程序可以分为三个主要组成 部分:自动配置和初始化子程序,服务于i 0 请求的予程序以及中断服务子程序a 本章讨论了u n i x 操作系统下设备驱动程序的基本概念,分析了在u n i x 系 统下如何开发一个完整的设备驱动程序,并以l i n u x 操作系统为例,结合一个具 体的p c i 设备驱动程序的实现,探讨了设计设备驱动程序的基本思路和关键技术。 华中科技大学硕士学位论文 3u n i x 驱动程序开发工具包( u d d k ) 本章主要介绍了u n i x 驱动程序开发工具包的原理及设计思想。由于驱动程 序开发具有一定共性,且其应用越来越广泛,针对微软视窗系统系列均已形成成 熟规模的驱动程序开发环境,本章给出了一个在u n i x 系列操作系统下辅助开发 驱动程序工具包的总体结构。 3 1u d d k 原理 驱动程序的开发其实是一件很有趣的工作,它屏蔽了具体的硬件细节,为上 层应用提供良好的接口,但是它可能会花很多的时间,因为它涉及内核态,并且 每个操作系统都有自己的硬件管理规则,这就使得其下的驱动程序编制必须遵循 一定的规范,但是如前所述尽管各种u n i x 系统表象不太样,但其设计思想都 是一致的,各种类型设备驱动程序的开发都是有章法可循的,这就使得我们可以 通过调用驱动程序开发类库使我们的丌发更容易。 u d d k 的主要思想就是让开发驱动程序尽可能的容易。u d d k 含有丰富的数 据类型集和功能函数,可以对编写驱动提供便利。u d d k 的主要部分是代码生成 器c g e n ,它可以生成驱动程序模块源代码,包括m a k e f i l e s ,模块源,接口控制 函数在库以及内核态的函数声明。c g e n 读取d d l 文件以及一系列模板和d d l 库, 接着处理程序就处理d d l 文件,其中包含要处理的真正文本,以及在宏集中已 定义了的宏等。d d l 文件包括驱动程序如何组织,生成什么样的接口函数,它可 以通过和用户交互的图形界面生成。d d l 库提供某些例程或者子驱动程序定义, 可以通过包含d d l 库来实现另外的功能。d d l 所包含内嵌代码部分就是直接转 储为所生成的c 代码。所以c g e n 不仅仅是个简单的框架生成器。 3 2 模板和宏 代码生成器模仿著名的r e x 处理器,在处理器运行期间,该程序首先读取所 谓的格式文件,其中包含各种以原始语占写成的高级命令,也包含分割单词的连 1 4 华中科技大学硕士学位论文 字号安排模式。接着处理程序就处理源文件,其中包含要处理的真正文本,以及 在格式文件中已定义了的格式命令。它支持简单的宏定义以及替换机制。代码本 身产生于模板。模板是一些普通的a s c ii 文件其中包括宏替换语句以及c 代码。 d d l 分析器控制着来源于这些模板的代码的生成以及所想要的宏替换。对于不同 的代码段可能用到不同的模板,这取决于用户希望通过c g e n 产生什么样的驱动程 序。 在这里我定义了几个最基本的模板,分别为c o r e 模板( 包括i n i t 和c l e a n u p ) , r e a d 、w r i t e 模板,o p e n 模板,r e l e a s e 模板,i o c t l 模板,这几个模板通常是每 个驱动程序都将具备的例程,另外还可以添加诸如1 1 s e e k ,m m a p ,p o l l , s e l e c t 等模板,在和用户交互的图形界面中,其中个就是包含有上述内容的复 选项界面。 当用户将所需例程的相应选项选上时,即生成该d d l 文件的相应项,比如如 上图所示将c o r e ,o p e n ,r e l e a s e ,r e a d 勾上将会生成如下的d d l 文件,d d l 的语法将在下面篇幅介绍。 d d r i v e r ”m a i n “【m a j o r 。3 41 ( c o r e i n i t p r i n t k ( “t h i si sar e a ls t u p i dm e s s a g e n ”) ; ) c l e a n u p p r i n t k ( ”h a v ean i c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企事业单位义务消防队员成员及职责
- 税收筹划项目管理办法
- 系统安全评估管理办法
- 转观念勇担当强化安全生产高质量管理心得体会
- 小学一年级道德与法治课外拓展教学计划
- 放射科内部管理及职责流程
- 安全工程管理题库app及答案解析
- 脑炎治疗临床疗效评估-洞察及研究
- 江苏省建筑企业安全员b证题库及答案解析
- 多物理场耦合分析-第9篇-洞察及研究
- 2025年第九届“学宪法、讲宪法”知识竞赛题库及答案(中小学组)
- 2025年大型上市公司合同管理与合规制度
- 送瘟神教学课件
- 2025四川省公安厅招聘辅警(448人)笔试备考题库及答案解析
- 2025年内容分发网络(CDN)行业当前市场规模及未来五到十年发展趋势报告
- 故宫博物馆院课件
- 豌豆栽培种植技术
- 2025年低压电工理论考试1000题(附答案)
- 2025年运城社区专职工作人员招聘真题
- 钢材供货方案及保证措施范本
- JJF 2258-2025关联法天然气发热量测定仪校准规范
评论
0/150
提交评论