(机械电子工程专业论文)嵌入式linux设备驱动的研究与开发.pdf_第1页
(机械电子工程专业论文)嵌入式linux设备驱动的研究与开发.pdf_第2页
(机械电子工程专业论文)嵌入式linux设备驱动的研究与开发.pdf_第3页
(机械电子工程专业论文)嵌入式linux设备驱动的研究与开发.pdf_第4页
(机械电子工程专业论文)嵌入式linux设备驱动的研究与开发.pdf_第5页
已阅读5页,还剩53页未读 继续免费阅读

(机械电子工程专业论文)嵌入式linux设备驱动的研究与开发.pdf.pdf 免费下载

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

文档简介

嵌入式l in u x 设备驱动的研究与开发 摘要 与其它操作系统相比,l i n u x 操作系统在安全性和可靠性方面是 很出色的。而且它的内核源代码开放,使用者在这基础上可以开发出 满足自己要求的嵌入式操作系统。l i n u x 操作系统的这些特点使它在 很多领域得到了应用,计算机上使用的外设很多,研究它们的驱动程 序也变得很有必要。高效、稳定的驱动程序可以充分发挥计算机外部 设备的优越性能,同时它也是整个系统可靠运行的前提。 设备驱动程序在l i n u x 内核中扮演着特殊的角色,它是进入l i n u x 内核世界的大门。对嵌入式l i n u x 设备驱动的研究,有助于深入理解 嵌入式l i n u x 内核代码。此外,硬件必须有配套的驱动程序才能正常 工作,由于嵌入式设备的种类繁多特点决定了不同的嵌入式产品在开 发时都必须设计自己的设备驱动程序,使得设备驱动程序的开发在整 个嵌入式系统开发工作中占有举足轻重的地位。因此,对嵌入式l i n u x 设备驱动的研究具有重要的社会和商业价值。 本文首先对l i n u x 设备驱动程序和嵌入式设备驱动程序进行了 介绍。接着对三种基本类型外部设备( 字符设备,块设备,网络设备) 的驱动程序作了分析,并以不同类型的设备驱动程序的开发为例,描 述了开发不同类型的设备驱动程序的一般方法和步骤。这些步骤完成 了驱动程序中与内核相关的几乎所有事务,包括设备的注册和注销、 设备的打开和关闭、读写,系统调用的统一接口、数据从内核内存传 送到用户内存的方法等。对内存的使用和设备的访问方式,本文也作 了详细的说明。有了以上的基础,开发者只需再熟悉外部设备的使用 方法和数据格式等硬件信息,一个完整的驱动程序就很容易写成了。 关键词:设备驱动程序字符设备块设备网络设备 北京邮i u 人学顺l j 学位论文 t h er e s e a r c ha n dd e v e l o p m e n to fe m b e d d e d l i n u xd e v i c ed i u v e r s a bs t r a c t c o m p a r e dw i t ho t h e ro p e r a t i o ns y s t e m s ,t h el i n u xo p e r a t i o ns y s t e m s s a f e t ya n ds t a b i l i t ya r ee x c e l l e n t a n di t sp r o g r a m ss o u r c ei so p e n ,t h u s u s e r sc a nd e v e l o pt h e i ro w ne m b e d d e do p e r a t i o ns y s t e m ,w h i c hi sb a s e d o nt h el i n u xo p e r a t i o ns y s t e m w i t ht h o s eg o o dq u a l i t i e s ,t h el i n u x o p e r a t i o ns y s t e mc a nb e u s e di nm a n yf i e l d s w r e a r a b l ec o m p u t e r s o p e r a t i o ns y s t e mi sj u s tb a s e do nt h el i n u xo p e r a t i o ns y s t e m m a n y d e v i c e sa r eu s e d o nt h ec o m p u t e r , s oi tb e c o m e s v e r ys i g n i f i c a n tt os t u d y t h e s ed e v i c ed r i v e r s t h ed r i v e r sw h i c hr u ne 伍c i e n t l ya n ds t e a d i l yc a n e x e r th i g hc a p a b i l i t yo ft h ec o m p u t e r p e r i p h e r a le q u i p m e n t s ,a n dt h e ya r e a l s ot h ei m p o r t a n tf a c t o r so ft h er e l i a b i l i t yo ft h ew h o l es y s t e m d e v i c ed r i v e rp l a y sa ni m p o r t a n tr o l ei nl i n u xk e r n e l ,i t st h ee n t r a n c e t ot h ew o r l do fl i n u xk e r n e l t h er e s e a r c ho ne m b e d d e dl i n u xd e v i c e d r i v e r sh e l p sd e e p l yu n d e r s t a n dt h el i n u xk e r n e lc o d e b e s i d e s t h e h a r d w a r ec a no n l yw o r kn o r m a l l yo nc o n d i t i o nt h a ti th a st h em a t c h e d d e v i c ed r i v e r t h en u m e r o u sc a t e g o r i e so fe m b e d d e dd e v i c ed e c i d e st h a t d if f e r e n te m b e d d e dd e v i c em u s th a v et h e i ro w nd r i v e r s ,w h i c hm a k e st h e d e v e l o p m e n to fd e v i c ed r i v e rp r o g r a m sh a v ea ni m p o r t a n tp a r ti nt h e w o r ko fe m b e d d e ds y s t e md e v e l o p m e n t t h e r e f o r e ,t h er e s e a r c h m e n to n e m b e d d e dl i n u xd e v i c ed r i v e r sh a sag r e a ts o c i a la n dc o m m e r c i a lv a l u e f i r s t l y ,t h i sp a p e ri n t r o d u c e sa r md e v i c ed r i v e ra n dt h el i n u x d e v i c ed r i v e r s e c o n d l yt h ep a p e ra n a l y z e st h r e ek i n d so fd e v i c e sd r i v e r s ( i n c l u d i n gc h a r a c t e rd e v i c e ,b l o c kd e v i c e ,n e t w o r kd e v i c e ) ,a n dg i v e st h e 北京邮i u 人学顾i j 学位论文 c o m m o nm e s u r e sa n ds t e p so nt h o s ed if f e r c n tk in d ss e v l c ed r i v e r p r o g r a m s d e v e l o p m e n t t h o s es t e p sa l m o s tc o m p e t ea l lt h ea f f a i r si nt h e d e v i c ed r i v e r s r e l a t e dw i t h k e r n e l ,i n c l u d i n gt h ed e v i c e sr e g i s t e ra n d u n r e g i s t e r ,o p e n ,c l o s e a n d w r i t e ,u n i t i v e i n t e r f a c eo f s y s t e m t r a n s f e r r i n g ,t h em e t h o do ft r a n s f e r r i n gd a t af r o mk e r n e lm e m o r yt ot h e u s e rm e m o r y , a n de t c t h ep a p e ra l s od e s c r i b e s d e t a i l e d l yt h e u s eo f m e m o r ya n dt h ev i s i t i n gm e t h o do fd e v i c e o nt h eb a s i so fa b o v et h i n g s ,a c o m p l e t e d r i v e rp r o g r a m m ew i l lb ed o n e o n l yi ft h ed e v e l o p e ri s a c q u a i n t e dw i t ht h eh a r d w a r ei n f o r m a t i o nl i k eu s i n gm e t h o do fp e r i p h e r a l d e v i c ea n dd a t af o r m a t k e yw o r d s :d e v i c ed r i v e r s c h a r a c t e rd e v i c e s b l o c kd e v i c e s n e t w o r kd e v i c e s 北京i l l l l i k 人学硕i j 学位论义 独创性( 或创新性) 声明 本人声明所譬交的论文是本人在导师指导下进行的研究r i :作及取得的研究成果。尽我所 知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不包含其他人已经发表或撰 写过的研究成果,也不包含为获得北京邮电人学或其他教育机构的学位或证j f 5 而使用过的材 料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢 意。 申请学位论文与资料若有不实之处, 本人签名: 皋园 本人承担一切相关责任。 日期:塑堕生:i 关于论文使用授权的说明 学位论文作者完全了解北京邮电大学有关保留和使用学位论文的规定,即:研究生在校 攻读学位期间论文工作的知识产权单位届北京邮电大学。学校有权保留并向国家有关部 门或机构送交论文的复印f t # l l 磁盘,允许学位论文被查阅和借阅;学校可以公布学位论 文的全部或部分内容,可以允许采用影印、缩印或其它复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后遵守此规定) 保密论文注释:本学位论文属于保密在一年解密后适用本授权书。非保密论 文注释:本学位论文不属于保密范围,适用本授权书。 本人签名:苤国 日期: 导师签名: 知0 8 l i t l 北京邮i 【1 人学硕i :学位论文 1 1 研究背景 第一章绪论弟一早 珀下匕 l i n u x 操作系统1 9 9 1 年诞生于芬兰赫尔辛基大学,出自一位名为 l i n u s t o r v a l d s 的大学生。但是养育它的却是全球数不胜数的通过国际互联网络相 互协作的计算机高手。l i n u x 是一种开放、免费的操作系统,从诞生至今它不断 的在发展壮大。i b m 、i n t e l 等国际大型企业都坚定地拥护l i n u x ,支持开源软件 的开发。英特尔公司已决定将其无线“迅驰”芯片包向l i n u x 开发,届时,l i n u x 用户同样可以享受到“迅驰”的无线体验。除了公司以外,政府也在l i n u x 发展 上扮演着重要的角色。前不久,信息产业部信息产品管理司司长表示,“中国、 同本和韩国政府j 下在联手,准备开发可以替代微软w i n d o w s 操作系统的公开源 代码软件产品。”是什么促使三国做出这样的决定? 原因有三:第一,l i n u x 的 应用越来越广,功能越来越强,完全可以取代商业软件的作用;第二,l i n u x 的 低廉价格将给三国节省非常大的政府预算:如果能有独立版权的操作系统,即可 以摆脱微软的技术垄断,也可以形成对微软的一种压迫,至少可以成为与微软讨 价还价的一个筹码;第三,也是出于长远的考虑,三国相信如果计算机在操作系 统级依赖于别国的技术,那么就有可能在政治上,甚至军事上受制于它国,这是 任何一国都不想看到的事情。由此可知l i n u x 在各个领域都发挥着越来越重要的 应用【1 5 】。, 众所周知,最初的微机只包括c p u 、主板、内存、软驱、键盘、显示器等组 件( 当时就连硬盘也是可选的“奢侈品”) ,于是设计者们也就仅将这些硬件设备 列为计算机的“标准设备”,并将它们设计到了系统的b i o s 中。这些标准设备 由b i o s 直接支持,我们只要将它们插入到计算机中就可以直接运行。而后随着 计算机的发展,各种外围设备( 如声卡、显卡、m o d e m 、打印机、扫描仪、数 码相机等) 相继涌现,不过由于前辈们的“鼠目寸光”,微机的b i o s 并不支持这 些新型硬件设备,它们不能直接被计算机所识别、利用。在这种情况下,驱动程 序就应运而生了。驱动程序实际上也是一种特殊的软件,只不过它的作用与普通 应用软件有所不同罢了。驱动程序主要是用于解释各种b i o s 并不支持的硬件设 备,使计算机能够“接受”它们,保证这些硬件设备的f 常运行。同时驱动程序 北京邮i 【i 人学硕l :学位论文 还可以有针对性地控制硬件设备,以便充分发挥硬件设备的性能。面对层出不穷 的新硬件产品,必须有人不断编写新的驱动程序以便让这些设备能够在l i n u x 下 正常工作。 。 1 2 研究现状 从l i n u x 诞生起就有人开始研究它的驱动程序,因为一个好用的操作系统需 要做到对外部设备很好的支持。通常开发设备驱动程序是外设生产厂家的事,因 为他们最容易获得第一手的设备硬件资料。但随着l i n u x 的成熟,个人也丌始对 编写驱动程序发生兴趣,但编写的很多都是简单的设备。 开发一个设备驱动程序通常分为以下几步: 【l 】收集硬件资料。收集硬件资料对外设厂家来说根本没问题,但如果个人 想编写外设的驱动程序,硬件资料就很难收集齐全。很多厂家并不愿意向个人提 供这方面的信息,因为他们觉得这样做有可能导致技术泄密。对于鼠标、键盘、 手写板、g p s 这类字符设备,还要收集接口资料,诸如串口、并口、u s b ,p s 2 接v i 等1 2 j ;对于显卡、声卡这类设备,需要收集p c i 、a g p 、i s a 这些插槽的资料; 对于硬盘、光驱、软驱这些设备,需要收集i d e 控制器、s c s i 控制器的资料。 【2 】确定设备访问方式。外设的访问方式主要有查询、中断和d m a 。每一种 方式都有它使用的特定场合,有时候还需要把它们结合起来使用,如硬盘驱动程 序既用到了d m a 又用到了中断。采用什么样的方法能把外设硬件的性能充分体 现出来,这一点很关键。 【3 】编写驱动程序源代码。l i n u x 操作系统中编写源代码的工具有很多,如v i 、 e m a c s ,但用户界面不友好,使用起来不太方便。不同外设的驱动程序之间是有 规律可循的,本课题找出了各种外设驱动程序的共同点,把它们归纳总结起来形 成了编写驱动程序的通用步骤,这样可以简化编写驱动程序的工作。 【4 】编译及调试程序。编译程序采用的是用命令行的方式,使用g c c 或m a k e 命令,使用m a k e 命令时需要编写一个m a k e f i l e 文件。调试程序并没有好的工具和 方法,唯一的调试工具g d b 使用起来很麻烦。 5 】把驱动程序加载入内核。使用驱动程序时需要先把它加载入内核。以往 加载时需要把驱动程序与内核程序放在一起,重新编译内核。在p e n t i u m11 3 5 0 的机器上编译一次内核需要5 至6 分钟,慢机器需要的时间就更长。编写成功一个 驱动程序,需要对它加载上百次是很正常的事情。可见丌发驱动程序的很多的时 剃都花在这罩了。 【6 】性能测试。通过应用软件对驱动程序进行测试。需要测试的内容有驱动 北京邮l u 人学颁i :学位论文 程序的可靠性、处理速度、外设硬件性能是否达到要求等。以往加载驱动程序是 很费劲的事情。加载时需要把驱动程序与内核程序放在一起,重新编译内核。后 来有人研究出了可加载模块( m o d u l e ) 技术。这种技术支持动态加载模( 1 0 a d a b l e m o d u l e ) 。这些加载后的模块是核心的一部分,但是并没有把它们编译到核心里 面去。m o d u l e 技术可以把驱动程序单独编译成为目标代码,形成一个目标文件, 可以根据需要在系统启动后动态地把目标文件加载到系统核心之中。当目标文件 不再被需要时,可以动态地卸载出系统核心。l i n u x 中大多数设备驱动程序或文 件系统都做成m o d u l e 类型,超级用户可以通过i n s m o d 和r m m o d 命令显示地将 m o d u l e 载入核心或从核心中将它卸载。采用m o d u l e 技术在调试新核心代码时, 用户不必每次修改后都需重新编译内核和启动系统。该技术的应用使开发驱动程 序节省了一半的时间。 虽然加载和卸载驱动程序的时间节省了,但总的说来开发驱动程序仍然是很 麻烦的事情。原因有如下: 【l 】l i n u x 操作系统并没有提供专门的驱动程序开发工具,开发者需要对驱动 程序本身的足够的认识和对内核的一定程度的了解。尽管l i n u x 内核源代码开放, 对内核具有一定了解还是不容易的事。驱动程序源代码也是开放的,但如果对驱 动程序没有总体的认识,对设备的工作过程不了解,读懂成千行的源代码是不可 能的事情。 【2 】驱动程序的调试工作也是很麻烦的一件事,因为没有很好的调试工具。 只能使用一些最老的方法,如使用p r i n t k 函数查看结果,效率很低。 【3 】驱动程序使用的是内核函数,它的一个小错误就可能破坏整个系统。开 发驱动程序的过程中,重新编译内核是很常见的事。 【4 】开发出高效可靠的驱动程序,开发者需要掌握更多方面的知识。软件方 面,首先是l i n u x 内核,其中包括i 0 设备管理、文件系统、内存管理和进程管理; 其次是l i n u x 内核编程和应用程序编程,当然还少不了l i n u x 的很多操作命令。硬 件方面,首先是中断和d m a ;接着是内存j 如系统内存和外设内存;其次是总线, 如物理总线和接e l 总线;再次是接口技术,如串口、并口和u s b 接口【2 】最后是具 体外设的硬件信息,如各寄存器的作用,初始化设备步骤,设备数据格式等。 1 3 课题研究的意义 从国家战略目标与产业发展来看,嵌入式软件特别是嵌入式操作系统是实现 传统制造业转型与提升的关键技术,它对整体提升我国制造业的竞争能力、大幅 度地增强我国软件自主创新能力意义重大。但是我国当前嵌入式系统研究和开发 北京邮i u 人学颂i :学位论文 的整体水平不高,与国际领先水平还有较大的差距,国内的嵌入式设备生产商大 多数还是采用国外的商用嵌入式操作系统。而免费丌源的l i n u x 在嵌入式领域的 发展为我国发展自己的嵌入式操作系统,扭转p c 机软件市场的被动局面提供了 难得的机遇,也为振兴国内软件行业找到了最佳的突破口。 设备驱动程序在l i n u x t 为核中扮演着特殊的角色,它是进入l i n u x 内核世界的 大门。对嵌入式l i n u x 设备驱动的研究,有助于深入理解嵌入式l i n u x l 内核代码。 此外,硬件必须有配套的驱动程序才能正常工作,由于嵌入式设备的种类繁多特 点决定了不同的嵌入式产品在开发时都必须设计自己的设备驱动程序,使得设备 驱动程序的开发在整个嵌入式系统开发工作中占有举足轻重的地位。因此,对嵌 入式l i n u x 设备驱动的研究是一个很好的课题,具有重要的社会和商业价值。 1 4 主要研究内容 本文先对l i n u x 设备驱动程序和嵌入式设备驱动程序进行了详细介绍,接 着对三种基本类型外部设备( 字符设备,块设备,网络设备) 的驱动程序作了分 析,并以三种相应类型的设备驱动程序的丌发为例,详细说明了各种不同设备驱 动的特点,以及这些不同类型驱动程序开发过程的相似之处和差别,最后总结出 了不同类型的设备驱动程序开发的一般方法和步骤。 北京邮i u 人学顾i :学位论文 第二章嵌入式设备驱动程序 2 1 设备驱动程序的概念 在多任务操作系统中,内核建立应用程序和设备之间的抽象接口,而不是由 应用程序直接操作硬件。为此,操作系统一般提供设备驱动程序来专门完成对特 定硬件的控制。设备驱动程序实际上是处理和操作硬件控制器的软件,从本质上 讲,它们是内核中具有高特权的、驻留内存的、可共享的底层硬件处理进程【2 】。 从某种意义上讲,设备驱动可以理解为操作系统的一部分,对于一个特定的 硬件设备来说,其对应的设备驱动程序是不同的。比如网卡、声卡、键盘、鼠标、 显卡等。对于操作系统来说,挂接的设备越多,所需要的设备驱动程序也越多。 操作系统本身并没有对种类繁多的硬件设备提供持久不变的“设备驱动”,也就 是说操作系统在没有设备驱动程序支持下是无法正常支配硬件行为的。这个时候 就需要独立开发一套适合自己产品的设备驱动。正是操作系统留下了扩展设备驱 动的接口,才有了现在支持各种应用场合的硬件设备的蓬勃发展。对于嵌入式开 发,更没有通用的驱动程序可以使用。因此,驱动程序开发是整个嵌入式设计过 程中必不可少的一部分。 2 2 设备驱动程序的特点 设备驱动程序具有以下几个特点: 1 】设备驱动程序要为内核或内核的子系统提供标准接口。 【2 】设备驱动程序要使用一些诸如内存分配、中断传输及等待队列等内部机 制和服务。 【3 】可装载,大部分设备驱动程序可作为内核模块在必要时装入,而在不需 要时卸载。 【4 】可配置,设备驱动程序可内建到内核中,可在编泽时指定内建的设备驱 动程序。 【5 】动态性,如果装载的设备驱动程序启动时没有找到对应的设备,则该设 备驱动程序只是占用了一些系统内存,对系统并没有坏处。 北京邮f 【1 人学硕i :学位论文 2 3 设备驱动程序的功能 系统函数是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统 内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样, 在应用程序看来,硬件设备只是一个设备文件。应用程序可以像操作普通文件一 样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能: 【1 】对设备初始化和释放。 2 】把数据从内核传送到硬件和从硬件读取数据。 【3 】读取应用程序传送给设备文件的数据和回送应用程序请求的数据。 【4 】检测和处理设备出现的错误。 2 4 设备驱动软件结构 设备驱动层介于文件系统层和硬件层之间,整个设备驱动的系统结构如下图 所示: 用户进程 文什系统层 + 设备僮动层 l i 硬件层 i 图2 - 1 设备驱动的系统结构 用户进程: 用户进程一般位于内核之外,当它需要操作设备时,可以就像济问普通文件 一样,通过文件操作系统调刚来完成对设备文件的访问和控制。 文件系统层: 它位于用户进程层下面,属于内核空1 1 ;l j ,基本功能是执行适合于所有设备的 北京邮电人学颂l ? 学位论文 输入输出功能,使用户透明的访问文件。通过本层的封装,设备文件在上一层看 来就和普通文件没有区别,也拥有读、写和执行权限,拥有和它对应的索引节点 等。在用户进程发出系统调用要求输入输出操作时,文件系统层就处理请求的权 限,通过设备驱动层的接口将任务传到驱动程序。 设备驱动层: 设备驱动程序位于内核中,它根据文件系统层的输入输出请求来操作硬件上 的设备控制器,完成设备的初始化、打开释放、以及数据在内核和设备间的传递 等操作。 2 5 小结 本章抽象概括了嵌入式设备驱动程序的概念、特点、功能和架构。设备驱动 程序是嵌入式操作系统内核的重要组成部分,驱动程序开发是整个嵌入式系统设 计过程中必不可少的一部分。 北京邮i u 人学硕l :学位论文 第三章l in u x 设备驱动程序 3 1l in u x 设备管理 计算机的每个外部设备都有自己的控制器。键盘、鼠标、串口由4 个高级i o 芯片统一管理,i d e 控制器控制i d e 硬盘,而s c s i 硬盘控制器控锘i s c s i 硬盘等。 每个硬件控制器都有各自的控制和状态寄存器( c s r ) 【5 】,并且各不相同。这些c s r 用于启动、停止、初始化及诊断设备。在l i n u x 中管理硬件设备控制器的代码并 没有放在每个应用程序中,而是由内核统一管型4 1 。这些处理和管理硬件控制器 的软件就是设备驱动程序。 l i n u x 把外部设备主要分为三类:字符设备、块设备和网络设备。字符设备 指那些无需缓冲区可直接读写的设备,如鼠标、键盘、串口设备等,对它们读写 数据直接通过读写寄存器就可实现。l i n u x 并没有给字符设备的数据定义特别的 数据结构。块设备则仅能以块为单位对它们进行读写,如硬盘、光驱、软驱等。 典型的块大小为5 1 2 或1 0 2 4 字节【4 】。块设备的存取是通过b u f f e r c a c h e 来完成的,并 且可以进行随机访问,即不管块位于设备的何处都可以对其进行读写。为了屏蔽 网络环境中物理网络设备的多样性,l i n u x 对所有的物理设备进行抽象并定义了 一个统一的概念,称之为接口( i n t e r f a c e ) 。所有对网络硬件的访问都是通过接 口进行的,接口提供了一个对所有类型的硬件一致化的操作集合来处理基本数据 的发送和接收。一个网络接口被看作是一个发送和接收数据包( p a c k e t s ) 的实体。 对于每个网络接口,都用一个d e v i c e 的数据结构表示,通常,网络设备是一个物 理设备如以太网卡,但软件也可以作为网络设备,如回送设备( 1 0 0 p b a c k ) 。在 内核启动时,通过网络设备驱动程序,将登记存在的网络设备。 l i n u x 内核与设备驱动之间必须有个以标准方式进行互操作的接口。每一类 设备驱动都提供了通用接口以便在需要时为内核提供服务。这种通用接口使得内 核可以以相同的方式来对待不同的设备及设备驱动。设备驱动的一个基本特征是 设备处理的抽象概念。所有硬件设备都被看成普通文件,可以通过和操作普通文 件相同的标准系统调用来打丌、关闭、读取和写入设备。系统中每个设备都用一 种特殊的设备相关文件来表示,例如系统中的一个i d e 硬盘被表示成d e v h a d 。 块设备和字符设备的设备文件可以通过m k n o d 命令来创建,并使用主从设备号来 北京邮l u 人学硕l :学位论义 描述次设备。由同一个设备驱动控制的所有设备具有相同的主设备号。从设备号 则被用来区分具有相同主设备号且由相同设备驱动控制的不同设备。例如主i d e 硬盘的每个分区的从设备号都不相同。如d e v h d a 2 表示主i d e 硬盘的主设备号为 3 而次设备号为2 通过使用主从设备号将包含在系统调用中的设备相关文件映射 到设备的设备驱动及大量系统表格中。 3 1 1l in u g 的i 0 子系统 l i n u x 系统将所有的外围设备都高度地抽象成一些字节的序列,并且以文件 的形式来表示这些设备。我们可以来看一下l i n u x 的i o 子系统【4 j ( 图3 1 ) 图3 - 1l i n u x 的i 0 子系统 从图上我们可以看出,内核紧紧地包围在硬件周围,内核是一些软件包的组 合,它们可以直接访问系统的硬件,包括处理器、内存和i o 设备。而用户进程 则通过内核提供的用户服务来和内核通讯,从而间接地控制系统硬件。我们可以 通过图3 2 来了解这些动作的具体情况。 北京i lj g i h 人学顾i j 学位论文 甬i 幼 l望! 堡! 羔i 用户级l 一 内核级l ,堡璺丝 i 蓊丽丽一 内核级 一一一一一一一一一一一一一一一l 一一一一一一一一一一一一一一一 觥级 二二三左二二 硬件 j 图3 2 用户级、内核级和硬件级三者之间的通讯 上面的两个图说明了设备驱动程序的作用以及用户对一外部设备的服务请 求是如何实现的。 3 1 2l i n u x 设备驱动的系统调用 用户级的程序使用内核提供的标准系统调用来与内核通讯。这些系统调用 有:o p e n ( ) 、r e a d 0 、w r i t e ( ) 、i o c t l o 、c l o s e ( ) 等。l i n u x 的内核是一个有机的整体。 每一个用户进程运行时都好像有一份内核的拷贝,每当用户进程使用系统调用 时,都自动地将运行模式从用户级转为内核级,此时进程在内核的地址空间中运 行。l i n u x 内核使用“设备无关”的i 0 子系统来为所有的设备服务。每个设备都 提供标准接口给内核,从而尽可能地隐藏了自己的特性。图3 3 展示了用户程序 使用一些基本的系统调用从设备读取数据并且将它们存入缓冲的例子。可以看 到,每当一个系统调用被使用时,内核就转到相应的设备驱动例程来操纵硬件。 北京邮i u 人学硕f :学位论义 曰围围固 圆回国围 系统调用 内核 设各驱动例程 图3 - 3l i n u x 设备驱动的系统调用 每个设备在l i n u x 系统上看起来都像一个文件,它们存放在d e v 目录中并被 称为特殊文件或是设备节点。大家可以使用命令i s 1 d e v l p * 来得到以下的输出: c r w f w f wlr o o tr o o t6 ,0a p r i l2 31 9 9 9 d e v l p 0 这行输出表示l p 0 是一个字符设备 ( 属性字段的第一个字符是c ) ,主设备号是6 ,次设备号是0 。主设备号用来向 内核表明这一设备节点所代表的驱动程序的类型( 比如:主设备号是3 的块设备是 id e 磁盘驱动程序,而主设备号为8 的块设备是s c s i 磁盘驱动程序) ;每个驱动程 序负责管理它所驱动的几个硬件实例,这些硬件实例则由次设备号来表示( 例如: 次设备号为0 的s c s i 磁盘代表整个也可以说是“第一个”s c s i 磁盘,而次设备号 为1 到1 5 的磁盘代表此s c s i 磁盘上的1 5 个分区) 。 3 2 设备访问方式及l in u x 下的实现 设备访问方式有多种,选择哪种访问方式不仅与设备本身有关,还与它的使 用情况有关。l i n u x 对以下三种方式都提供了很好的支持。 3 2 1 查询方式 在数据传送之前,对目标设备的状态进行查询,确知外设已经做好了传送数 据的准备时再进行数据传送,否则,c p u 等待并持续不断的查询,一旦外设准 备好,则立即进行读或写操作,这种方式称为查询方式。对于查询方式来说,一 个数据传送过程由三个环节组成: 北京邮l u 人学硕l j 学位论文 1 】c p u 从接1 2 1 中读取状态字。 2 】c p u 检测状态字的对应位是否满足就绪条件,如果不满足,则回到前一 步,继续读取状态字。 【3 】如果状态字表明外设己处于就绪状态,则传送数据。 这种方式看上去似乎太浪费c p u 资源,效率低,但在某些情况下仍有使用的 价值。例如当一个设备从打开计算机到关闭之前一直需要使用,而它又没有向系 统发中断的功能,这种场合下查询方式还是很有用的。在l i n u x 驱动程序中实现 这种方式还是比较简单的。只要在驱动程序的r e a d ( ) 例程中使用w h i l e 语句一直判 断外设的状态,状态一旦满足要求,则跳出循环,读取外设数据并返回r e a d 函数 就可以了。 3 2 2 中断方式 从传送方式的工作过程可以看出,查询传送方式实际上是程序循环等待方 式,即利用程序循环检测外设状态,直到外设准备好时才能进行数据传送操作。 这种方式下,c p u 资源大部分被用来循环执行查询程序,而其它任务被搁置了, 因此这种工作方式效率显然很低。另外,用查询方式工作时,如果系统有多个外 设,那么c p u 只能轮流对每个外设进行查询,而这些外设的速度往往并不相同, 这时c p u 显然不能很好的满足各个外设随机的对c p u 提出输入输出服务的要 求。、 在中断传送方式下,外设具有申请c p u 服务的主动权,当输入设备已将数据 准备好或者输出设备可以接收数据时,便可以向c p u 发出中断请求,使c p u 暂时 停下目前的工作而和外设进行一次数据传输,等输入操作完成后,c p u 继续进行 原来的工作。可见中断传送方式就是外部设备中断c p u 的工作,使c p u 停止执行 当前程序,而去执行一个为外部设备的数据输入输出服务程序,该服务程序称为 中断处理子程序或中断服务子程序。中断子程序执行完后,c p u 又转回来执行原 来的程序。被外界中断时,程序中下一条指令所在处称为断点,从中断服务程序 返回时,从断点处继续执行被中断的程序。 在中断传送时,c p u 和外设处在并行工作的状态下,c p u 不必在两个输入 输出过程之间对接口进行状态测试和等待,而可以去做别的处理,因为每当外部 设备准备就绪时,会主动 占j c p u 发中断请求,由此而进入一个传输过程。此过程 完成后,c p u 可以执行别的任务,而不是处在等待状态,这样大大提高了c p u 的 效率。 采用这方式访问外设的前提是该外设能发出操作系统能识别的中断。在 l i n u x 驱动程序中采用中断方式访问外 殳需做到以下几点: 北京邮i u 人学顾。i :学位论文 【1 向系统申请中断。l i n u x 提供了函数r e q u e s t来实现申请中断。申请irqo 成功与否的关键在于此函数的一个参数i r q ,它是希望申请的中断号。如果外设 可以发中断4 ,那该参数就填4 。不过还有一点需要考虑的是。如果想申请的中断 号己被别的设备占用,那就需要想办法协调这两个设备了。可以使用命令c a t p r o c i n t e r r u p t s 来查看操作系统中现有中断号的使用情况。当然是否申请成功, 也可以通过这条命令查看。 【2 】释放中断。函数f r e ei r q 0 可以实现这个功能。 【3 】实现中断函数。申请完中断号以后,希望系统响应该中断后做些什么全 依赖此函数。其实该函数也没有特别的地方,无非就是做些读写设备的动作,采 集需要的数据。不过需要说明的是该函数应该尽量的短,因为此时在独占c p u 资 源,系统很难响应别的事件。该函数的末尾应该调用函数w a k eu p) , 来唤醒该设备队列中其它进程。 i n t e r r u p t i b l e ( 如果希望开机以后就让外设一直占用某中断号,那么函数r e q u e s t i r q o 就应该 放在驱动程序初始化函数i n i tm o d u l e ( ) 中,函数f r e ei r q o 就放在函数 c l e a n u p m o d u l e ( ) ,否则函数r e q u e s t i r q ( ) 可以放在系统调用的函数o p e n ( ) 中,函数 f r e e i r q o 放在函数r e l e a s e ( ) 中。系统中断向量是宝贵的资源,应尽量做到使用 完了就释放掉。 3 2 3d m a 方式 利用中断方式进行数据传送可以大大提高c p u 的工作效率。但在中断方式 下,仍然是通过c p u 执行程序来实现数据传送的,每进行一次传送,c p u 都必须 执行一遍中断处理程序,而每进入一次中断处理程序,c p u 都要保护断点和标志 寄存器,此外在中断处理程序中,通常有一系列保护寄存器和恢复寄存器的指令, 显然这些指令与数据传送没有直接关系。但在执行时,都要使c p u 花费不少时间, 还有,对于8 0 8 6 以上的微处理器,本来取指令和执行指令分别有总线接口部件和 执行部件来完成的,他们并行工作。当中断或从中断返回时,预取的指令全部作 废,执行部件要等待总线接口部件重新装入新的指令后才开始执行。上述几方面 的因素造成中断方式下的传输效率仍然不是很理想。 如果i o 设备的数据传输率较高,那么c p u 和这样的外部设备进行数据传输 时,即使尽量压缩程序查询方式和中断方式中的非数据传输时问也仍然不能满足 要求。这是因为在这种方式下,还存在另外一个影响传输速度的原因,即它们都 是按字节或字进行传输的,为了解决这个问题就需要改变传输方式,这就是块传 送方式,即d m a 方式i 7 1 在d m a 方式下,外部设备利用专门的接口电路直接和存储器进行数据传送, 北京邮l u 人学硕i :学位论文 并不经过c p u 。这样,进行传输就不必进行保护现场之类的一系列额外操作,数 据传输的速度基本上决定与外设和存储器的速度。d m a 方式传送数据则由d m a 控制器d m a c 来提供源和目的地址、修改地址、控制结束及发出控制信号。显然, 采用d m a 方式,数据传送的速度显著提高,而且c p u 的负担也明显减轻了。同 时也缩短了传送的响应时间。 d m a 传送的基本过程如下: 【1 】外部设备( 或c p u 利用指令) 向d m a 控制器发出d m a 传送请求。 2 】d m a c 向c p u 发总线请求,要求c p u 交出总线的管理和使用权,并在接 至i c p u 的总线响应信号后接管系统总线的管理和使用权,从而变为系统的主设 备。 3 】d m a c 将被访问存储单元地址送到地址总线上。 4 】向存储器和进行d m a 传送的外设发出读写命令,则存储器和外设通过 数据总线进行数据传送。 5 】若d m a 传送已完成,贝j j d m a c 撤销对c p u 的总线请求,交回系统总线 的管理和使用权,回到从设备状态。 d m a 方式一般适用于成组传送的场合,每次成组传送之前都要对d m a c 进 行初始化,一般情况下,c p u 要对d m a c 写入二、三十个字节的控制字。因此, d m a 的初始化建立比程序控制数据传送的初始化可能要花费更多的时间。所以, 在数据块很短的情况下,可能就不宜采用d m a 方式,d m a 的应用场合主要有以 下几种: 1 】硬盘和软盘读取:可以使用d m a c 来作磁盘存储接着与半导体主存储器 之间传送数据的接口。 2 】多处理机和多任务块传送:对于多处理机结构,通过d m a c 来控制数据 传送可以较容易的实现专用存储器和公用存储器之间的数据传送。对多任务用、 页式调度和任务调度都与要传送大量的数据。因此采用d m a 方式可以提高数据 传输速度。 【3 】扫描操作:对c r t 屏幕送数据可采用d m a 方式。 4 】快速数据采集:当要采集的数据量很大,并且数据是以密集突发的形式 到达,采用d m a 是唯一的方法,只有它才能满足响应时问和数据传输率的要求。 l i n u x 驱动程序中采用d m a 方式访问外设需要做到: 【l 】申请和释放d m a 通道。f f l 数r e q u e s t j r q ( ) 和仔e e _ i r q ( ) 分别能实现上述功 能。数据的传送就是通过这个通道实现的。d m a 通道资源也是很珍贵的,使用 时注意及时释放。 2 】分配d m a 缓冲区。该缓冲区必须是物理内存的连续页,可以使丌j 函数 北京邮l u 人学硕1 :学位论文 k m a l l o c 0 或g e t _ f r e e _ _ p a g e 0 来实现。分配完后要确保得到该缓冲区的物理地址。 【3 】初始化d m a ,l i n u x 使用函数s e t _ d m a _ m o d e ( ) ,s e t d m a _ a d d r ( ) $ 1 s e t _ d m ac o u n t ( ) 来实现初始化。这三个函数分别完成了设置读写模式、d m a 缓冲区的地址和要传送的字节数的功能。在初始化d m a 通道时要先用函数 d i s a b l ed m a o 关闭它,初始化完成后再用函数e n a b l ed m a o 打开。 通常d m a 方式是与中断方式结合使用的,因为d m a 每传动完一块数据就会 产生一次中断。 3 3l i n u x 设备驱动程序 从程序结构角度而言,驱动程序是子程序和数据的集合,是输入输出设备的 软件接口,它的任务就是向系统提供接口函数,所以简单地说编写驱动程序就是 实现这种接口函数。 3 3 1 设备驱动程序概念 设备驱动程序是由内核中的相关子例程和数据组成的i 0 设备软件接口。每 当内核意识到要对某个设备进行特殊的操作时,他就调用相应的驱动例程,当驱 动例程完成后控制又被返回至用户进程。图3 - 4 就显示了以上的过程。 用户进程 d e v x x x 7 p 一一一一一一一一叶一 、0 设备驱动程序 设备 用户级 一一 内核级 图3 4 设备驱动程序的工作过程 从上图可以看出,系统调用是操作系统内核、应用程序之间的接口,设备驱 动程序是操作系统内核、机器硬件之问的接口。设备驱动程序为应用程序屏蔽了 硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件

温馨提示

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

评论

0/150

提交评论