已阅读5页,还剩46页未读, 继续免费阅读
(计算机应用技术专业论文)面向epa现场设备的嵌入式linux驱动软件开发.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
重庆邮电大学硕士论文 摘要 摘要 随着嵌入式系统的广泛应用和飞速发展,作为自由软件的l i n u x 操作系统 由于其对多平台的支持、强大的网络支持功能以及开放源代码,无需版税和许 可费用等突出的优势,成为嵌入式领域研究和开发的一个热点。嵌入式系统在 自动控制中得到越来越多的应用,自动控制设备的多样性决定了设备驱动方面 的多样性。对于嵌入式l i n u x 系统开发,没有通用的驱动程序可以使用,因此, 驱动程序开发是整个嵌入式系统设计中必不可少的一部分。 在l i n u x 系统下,应用程序编程与内核编程有很大不同,设备驱动是内核 编程的一个重要方面。本论文首先概述了在l i n u x 系统下驱动程序设计的一般 理论,讲述了如何编写驱动程序以及内核相关的知识,介绍了用户空间和内核 空间、核心模块和应用程序的异同。接下来介绍了e p a 测控系统,并结合8 6 3 课题开发了基于m p c 8 2 3 e 的采集器模块设备驱动程序,采集器模块属于字符设 备,模块有交通灯检测、交通灯控制、温度检测、温度控制、电机转速检测和 电机转速控制六个设备,分数据输入( d i ) 、数据输出( d o ) 、模拟输入( a i ) 和模拟输出( a o ) 四个功能。针对六个设备的每个功能都开发了相应的设备驱 动程序。最后我们介绍了基于p c m c i a ( 个人计算机存储卡国际协会) 的 i e e e 8 0 2 1l b 的无线网络终端设计,在这一章节里我们简单介绍了i e e e 8 0 2 1 l b 及p c m c i a 标准,重点介绍了l i n u x 系统下p c m c a 子系统结构及其p c m c i a 系统 中“插槽”层在l i n u x 操作系统下的驱动实现。p c m c i a “卡和插槽服务”( c a r d a n ds o c k e ts e r v i c e s ) 软件规范要求“插槽”层提供的服务共有1 2 个,其中有 9 个是必须的,本论文依据p c m c i a 的标准在m p c 8 5 2 t 下开发了前9 个必要的服 务。 关键词:嵌入式l i n u x ,设备驱动程序,i e e e 8 0 2 1 l b ,p c m c i a 重庆邮l b 大学硕士论文摘要 a b s t r a c t w i t ht h ef a s td e v e l o p m e n ta n dw i d ea p p l i c a t i o no fe m b e d d e ds y s t e m ,l i n u xa s af l e es o f t w a r eh a sc o m et ob et h eh o t s p o to fe m b e d d e dd o m a i n sr & d ,f o ri t s s t r o n ga d v a n t a g e so fs u p p o s i n gm u l t i p l a t f o r m ,o fs u p p o r t i n gp o w e r f u ln e t w o r k f u n c t i o n a l i t y , o fo p e n i n gs o u r c ew i t h o u tt e x tt a xa n dl i c e n c ef e e w i t ht h ei n c r e a s i n g a p p l i c a t i o no fe m b e d d e do p e r a t i n gs y s t e m i n a u t o c o n t r o l ,t h ed i v e r s i t yo f a u t o c o n t r o ld e v i c ed e m a n d sv a r i o u sd e v i c ed r i v e r t h e r ei sn oc o m m o nd r i v e rf o r s y s t e md e v e l o p m e n tu n d e r e m b e d d e dl i n u x ,s od r i v e r d e v e l o p m e n t i sa r l i n d i s p e n s a b l ep a r to fe m b e d d e ds y s t e m sd e v e l o p i n g k e r n e lp r o g r a m m i n gi sq u i t ed i f f e r e n tf r o ma p p l i c a t i o np r o g r a m m i n g u n d e r l i n u x d e v i c ed r i v e r sd e v e l o p m e n ti sav i t a la s p e c ti nk e r n e lp r o g r a m m i n g i nt h i s t h e s i s ,t oe m p h a s i z eh o wad r i v e rc a nd r i v et h eh a r d w a r e ,t h ec o m m o nt h e o r yo f d r i v e rd e v e l o p m e n ti si n t r o d u c e df i r s t l y ,w h i c hi n c l u d eh o wt op r o g r a m m i n gad r i v e r , t h er e l a t i v ek n o w l e d g eo nl i n u xk e m e l ,t h ed i f f e r e n c eo fu s e rs p a c ea n dk e m e l s p a c ea n dt h ed i f f e r e n c eo fk e m e lm o d u l ea n du s e rm o d e s e c o n d l y ,c o m b i n i n gt h e p r o j e c t ,a u t h o ri n t r o d u c et h ed r i v e r s d e v e l o p m e n tp r o c e s so fm p c 8 2 3 ec o l l e c t o r s w h i c hb e l o n gt oc h a rd e v i c e 、i t ls i xm o d u l eo ft r a f f i cl i g h td e t e c t e r , t r a f f i cl i g h t c o n t r o l ,t e m p e r a t u r ed e t e c t ,t e m p e r a t u r ec o n t r o l ,m o t o rs p e e dd e t e c ta n dm o t o rs p e e d c o n t r 0 1 t h e s em o d u l e si nd i f f e r e n td i v e c ea r ec l a s s i f i e di n t oo n eo ft h ef o u r f u n c t i o n a l i t yi n c l u d i n gd i g i t a li n p u t ,d i g i t a lo u t p u t ,a n o l o gi n p u ta n da n o l o go u t p u t a tl a s t ,t h ed e s i g no fi e e e 8 0 2 1l bw i r e l e s st e r m i n a lb a s e do np c m c i a ( p e r s o n a l c o m p u t e rm e m o r yc a r di n t e r n a t i o n a la s s o c i a t i o n ) i sp r e s e n t e d i nt h i ss e c t i o n , i e e e 8 0 2 1l ba n dp c m c i as p e c i f i c a t i o na r eb r i e f l yi n t r o d u c e d t h ep c i v i c i a s y s t e ms t r u c t u r ea n di t ss o c k e tl a y e r sd r i v e rd e v e l o p m e n tu n d e rl i n u xi si l l u s t r a t e d i nd e t a i l t h e r ea r et w e l v es e r v i c e sa r ed e m a n d e di np c m c i a sc a r da n ds o c k e t s e r v i c e ss p e c i f i c a t i o nw i t hn i n en e c e s s a r y k e yw o r d s :e m b e d d e dl i n u x ,d e v i c ed r i v e r s ,i e e e s 0 2 1 i b ,p c m c i a 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的 研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其 他人已经发表或撰写过的研究成果,也不包含为获得 重废鲤鱼盍堂或其他教 育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何 贡献均已在论文中作了明确的说明并表示谢意。 学雠文作者繇m 渤签字吼沙6 年易月9 日 学位论文版权使用授权书 本学位论文作者完全了解重庆塑鱼盍堂 有关保留、使用学位论文的规 定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查 阅和借阅。本人授权重庞邮电太堂 可以将学位论文的全部或部分内容编入 有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论 文。 ( 保密的学位论文在解密后适用本授权书) 学位论文作者签名: 膨、渤 导师签名 签字日期:_ 砷6 年占月吁日签字日期:撕6 年 日 , 7 军阳 重庆邮电大学硕士论文第一章绪论 1 1 嵌入式系统 第一章绪论 1 1 1 嵌入式系统的定义及其特点 通常,计算机连同一些常规的外设是作为独立的系统而存在,并非为某一 专门应用而存在的。例如一台p c 机就是一个计算机系统,整个系统存在的目的 就是为人们提供一台可编程、会计算、能处理数据机器。可以用它作为科学计 算的工具,也可以用它作为企业管理的工具。所以,人们把这样的计算机系统 称为“通用”计算机系统。但有些系统却不是这样,例如,医用的c t 扫描仪也 是一个系统,这里面也有计算机,但是这种计算机( 或处理器) 是作为某个专 用系统中的一个部件而存在的,其本身的存在并非目的而是手段。像这样“嵌 入”到更大的、专用的系统中的计算机系统,我们就称之为“嵌入式系统”或 曰“嵌入式计算机系统”n ,。 嵌入式系统的一般定义是:嵌入式系统是指以应用为中心,以计算机技术 为基础,软硬件均可裁减,适应应用系统对功能、可靠性、成本、体积、功耗 严格要求,用于执行独立功能的专用计算机系统。1 。它一般是由微电子芯片( 包 括微处理器、定时器、序列发生器、控制器、存储器、传感器等一系列微电子 芯片与器件) 和嵌入在r o m 、r a m 和f l a s h 存储器中的微型操作系统、控制与应 用软件等组成的,用于实现各种自动化处理任务的电子设备或装置。 不过,虽然计算机在整个大系统中只是一个部件,却通常起着相当于“大 脑”的作用。所以事实上所嵌入的计算机就是整个系统的核心,而系统中的其 它部件则是其外部设备。所以,也可以说,常规的计算机系统是面向计算( 包 括数值与非数值) 和处理的,而嵌入式计算机则一般是面向控制的。 与通用计算机系统相比较,嵌入式系统具有如下特征: 1 专用的嵌入式c p u 。嵌入式的c p l 3 一般具有低功耗,体积小,集成度高 等特点,能够把通用c p u 中许多由板卡完成的认为集成在芯片内部,从而有利 于嵌入式系统设计趋于小型化,移动能力大大增强,与网络的耦合也越来越紧 密。 2 专用性和算法的唯一性。嵌入式系统往往被设计完成某个特定任务,一 旦设计完成就不再改变。嵌入式系统与具体应用有机地结合在一起,它的升级 换代也和具体产品同步进行,因而嵌入式系统产品一旦进入市场,具有较长的 生命周期。 重庆邮电大学硕士论文第一章绪论 3 多种技术的结合体。嵌入式系统是将先进的计算机技术、半导体技术和 电子技术和各个行业的具体应用相结合后的产物。这一点就决定了它必然是一 个技术密集、资金密集、高度分散、不断创新的知识集成系统。 4 软硬件的相互依赖型。嵌入式系统的专用性决定了它的设计目标是单一 的,软件与硬件的依赖性强,因而一般要求进行协同设计( c o - d e s i g n ) ,以求 达到共同完成预定的功能,并满足性能,成本和可靠性目标。嵌入式系统的硬 件和软件都必须高效率的设计,量体裁衣、去除冗余,力争在同样的硅片面积 上实现更高的性能。 5 系统对用户是透明的。用户在使用嵌入式设备的时候只是按照预定的方 式使用它,既不需要用户进行编程,也不需要用户知道设备内计算机系统的设 计细节,用户也不能改变它。 6 嵌入式计算机系统大多数是实时控制系统。例如工业仪器、控制装置、 数控系统、信息家电、军用设备等。 7 系统配置专一,结构紧凑,坚固可靠,一般来说计算机资源( c p u 运行 速度,存储容量等) 有限。 嵌入式系统与通常计算机系统可能具有的种种不同,势必要其软件、特别 是在操作系统中有所反映,从而使嵌入式软件的开发与常规软件的开发有显著 的区别。特别地,典型的嵌入式操作系统与常规的操作系统有着显著区别,并 因而成为操作系统的一个重要分支和一个独特研究方向。不过,这里需要说明, 并不是所有的嵌入式系统都需要有真正意义上的操作系统。有的嵌入式系统所 采用的其实只是个简单的监控程序。这方面的例子是i c 卡( 也叫智能卡) 上的 “片上操作系统( c h i po p e r a t i n gs y s t e m ) ”c o s ,那实际上就只是个监控程序。 对于什么样的软件可以称为操作系统并没有明确的大家都能接受的判定标准, 本文的倾向是:如果系统中没有引入进程的概念,又很简单,我们就不认为其 是个操作系统。 1 1 2 嵌入式操作系统 用于嵌入式计算机的操作系统称为嵌入式操作系统。嵌入式操作系统一方 向是指通常具有某些特性的操作系统,另一方面它实际上代表着一个集合、一 个谱系。常规的操作系统也可以用在嵌入式计算机中,因而也可以看作是嵌入 式操作系统。嵌入式操作系统是嵌入式系统的灵魂,它的出现大大提高了嵌入 式系统开发的效率。在嵌入式操作系统中开发嵌入式系统,不仅极大地减少了 系统开发的总工作量,而且提高了嵌入式应用软件的可移植性0 1 。嵌入式系统 一般有如下特点: 2 重庆邮电大学硕士论文第一章绪论 l 、对嵌入式操作系统常常有实时要求,所以嵌入式操作系统往往又是“实 时操作系统”。 2 、许多嵌入式操作系统的内核是“微内核”,而不是像l i n u x 那样的“一 体化内核”。 3 、许多嵌入式系统都不带磁盘,所以有些嵌入式操作系统根本就不支持文 件系统,或者只是在结构上,即为了设备驱动而支持文件系统,却不支持文件 系统本原的目的,即文件存储。 4 、为了简化结构、降低成本和改进效率,许多嵌入式操作系统不采用存储 管理技术,即不采用虚拟存储的技术。进一步,许多嵌入式操作系统还不划分 “系统空间”和“用户空间”。换言之,c p u 一直在同一种运行状态,一般是 “系统状态”下运行。 比之于通用的操作系统,由于嵌入式操作系统采用微处理器控制器的多样 性,嵌入式操作系统的可移植性显得更加重要。所以有些嵌入式操作系统的内 核明确分成两层,其上一层一般就称为“内核”;而低层则称为“硬件抽象层” 或“硬件适配层”。 目前流行的嵌入式操作系统可以分为两类“1 :从运行在个人电脑以上的系 统平台上的操作系统向下移植到嵌入式系统中形成的嵌入式操作系统,如微软 公司的w i n d o w s c e ,s u n 公司的j a v a o s ,朗讯科技公司的i n f e r n o 等。这类系 统经过个人电脑或高性能计算机等产品的长期运行考验,技术日趋成熟,其相 关的标准和软件开发方式由于应用广泛已被用户普遍接受,同时积累了丰富的 开发工具和应用软件资源。在沿用了原有技术的基础上进行了内核的精简和嵌 入式改造,并提供相应的成套开发工具。非常适合类p c 的嵌入式系统。 另外一类是专门从事嵌入式系统软件的开发商针对嵌入式系统的特点致力 开发的,如w i n d r i v e r 公司的v x w o r k s ,i s i 的p s o s ,q n x 系统软件公司的q n x , a t i 的n u c l e u s 等,这类产品在操作系统的结构和实现上都针对所面向的应用 领域如系统的实时性要求、高可靠性等进行了精巧的设计,而且提供了独立而 完备的系统开发和测试工具。 但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小 公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。高端嵌入 式系统要求许多高级的功能,如图形用户界面和网络支持。很多高端r t o s 供应 商已经提供了这些功能,但其价格也很高端,一般人难以接受。现在需要的是 一个便宜、成熟并且提供高端嵌入式系统所必须特性的操作系统,嵌入式l i n u x 操作系统以价格低廉、功能强大又易于移植而正在被广泛采用,成为新兴的力 量0 1 。 重庆邮电大学硕士论文 第一章绪论 1 2 嵌入式l i n u x 及其设备驱动 1 2 1l i n u x 用于嵌入式系统 很久以来,一直有人说l i n u x ”。7 1 不适合用于嵌入式系统,可是事实上却有 愈来愈多的嵌入式系统采用了l i n u x 。不过,把l i n u x 用于嵌入式系统9 ,一 般也不是原封不动的照搬,而是充分考虑各种具体嵌入式系统的特点,有针对 性地对l i n u x 内核加以裁剪、修改和补充,主要包括以下几方面: l 、将l i n u x 内核移植到一些典型的微控制器或s o c 芯片上并加以必要的补 充。l i n u x 内核源代码中的a r c h 目录下本来就已经有针对各种不同处理器的实 现,通过条件编译和条件连接就可以构成适用于不同处理器的映象。但是,目 标处理器可能有一些独特的资源和性质是原版l i n u x 没有加以充分利用的,所 以还需要加以补充。 2 、对l i n u x 内核的代码进行删剪和裁剪,一来减小内核映象的“脚印”, 二来加快系统的初始化过程。 3 、嵌入式系统的某些常用外设在通用系统中是很少见的,反之亦然;所以 嵌入式系统的内核中常常需要一些特殊的设备驱动程序。 4 、对于有实时要求的应用,则视要求的高低,采用不同的对策对内核进修 改,如实现可剥夺调度、提高时钟精度等。 1 2 2 嵌入式l i n u x 的设备驱动 嵌入式系统大多用于控制,其设备驱动方面的多样性就不消多说了。嵌入 式l i n u x 同样如此,但是要说明的一点是,控制并不只是设备驱动的事,更重 要、更复杂的是面向控制对象和控制过程的处理,这才是具体嵌入式系统存在 的目的。就拿作为嵌入式系统的“路由器”为例,其重要复杂之处当然在于对 各种网络规程的支持和实现,而在不于其操作系统。所以,应用软件才是嵌入 式软件的主体,而嵌入式操作系统只是为了这些应用软件得以有效运行提供条 件和手段而己。 作为一个宏内核操作系统,l i n u x 的设备驱动都是在内核中,即系统空间 实现的。实现的方式有两种:一种是将有关驱动程序和数据结构静态地连接在 内核的映像中:另一种是将具体设备的驱动程序和数据结构独立加以编译,成 为“可安装的模块”,需要时才由应用程序通过系统调用动态地予以安装或拆卸 的。由于所有设备驱动都实现于内核中,并且只能实现于内核中,对设备的操 作就最终必须进入内核才能完成。而系统调用又是进程主动进入内核的唯一途 径,于是对设备操作就只有通过系统调用才能完成。 此外,l i n u x 的设备驱动还有两个显著的特点。首先是把所有的设备都视为 4 重庆邮电大学硕士论文第一章绪论 文件,当然是特殊的文件,即“设备文件”。所谓视为文件,一方面是说每个设 备文件都必须呈现于文件系统的某个目录下,看起来就像普通文件一样;另一 方面是说设备驱动与文件操作具有相同的界面和语义,并通过同一组系统调用 进行,如o p e n 0 、r e a d ( ) 、w r i t e ( ) 等等。而且,在命令解释程序s h e l l 的控 制下,应用程序中凡是以文件为操作对象的都可以用设备取代,反之亦然。这 就是说,在l i n u x 里面,设备驱动是以文件系统的( 定程度的) 存在为前提 的。相比之下,在一些简单的嵌入式操作系统,例如此o s 里面,设备驱动是 独立存在,与文件系统无关。事实上这些系统中往往都没有文件系统。另一显 著的特点是l i n u x 的设备驱动有着分明的层次和结构。 1 3 论文背景及工作内容 1 3 1 自己编写驱动程序的必要性 设备驱动在系统中的重要地位是无需多加说明的,计算机最基本的三个物 质基础就是c p u 、内存以及输入输出( i o ) 设备。严格地说,离开了对设备 的操作,即输入输出操作,计算机本身也就失去了意义。相比之下,文件系统 的存在只不过是使对设备的操作更为方便、更为有效、更有组织、更接近人类 的思维方式而已。所以,文件操作是对设备操作的组织与抽象,而设备操作则 是对文件操作的最终实现。 嵌入式系统既然大多用于控制,其设备的多样性决定了其设备驱动的多样 性。可以说,只要涉及到嵌入式开发,一般就少不了驱动程序的开发。有时应 用难免会由于应用的不同而添加自己的硬件,这时就需要为自己的硬件编写驱 动程序。 1 3 2 嵌入式l i n u x 系统中设备驱动程序的作用 设备驱动在l i r u x 内核中扮演着特殊的角色。它们是一个个独立的“黑盒 子”,使某个特定的硬件响应一个定义良好的内部编程接口,同时完全隐藏了设 备的工作细节。用户通过一组标准化的调用完成,而这些调用是和特定的驱动 程序无关的。将这些调用映射到作用于实际硬件的设备特定的操作上,则是设 备驱动程序的任务。这个编程接口能够使得驱动程序独立于内核的其它部分而 建立,在需要时候,可在运行时“插入”内核。这种模块化的特点,使得l i n u x 驱动程序的编写相对简单。 还要注意,设备驱动程序一般只提供机制,而不是提供策略“。区分机制 和策略是l i n u x 设计背后隐含的最好思想之一。大多数编程问题实际上都可以 分成两部分:“需要提供什么功能生”( 机制) 和“如何使用这些功能”( 策略) 。 重庆邮电大学硕士论文第一章绪论 如果这个问题由程序不同部分来实现,或者甚至由不同的程序来处理,则这个 软件包更容易开发,也更容易根据需要来调整。驱动程序同样存在着机制和策 略的分离。例如,软驱的驱动程序不带策略,它的作用是将磁盘表示为一个连 续的数据块序列,而系统高层负责提供策略,比如谁有权访问软盘驱动器,是 直接访问驱动器还是通过文件系统访问驱动器,以及用户是否可以在驱动器上 挂装文件系统等等。既然不同的环境通常需要以不同的方式来使用硬件,我们 应当尽可能做到让驱动程序不带策略。 在写驱动程序时,程序员应该特别留心这样的基本问题:我们要写内核代 码访问硬件,但由于不同用户有不同需要,我们不能强迫用户采用什么样的特 定策略。设备驱动程序应该仅仅处理硬件,将如何使用硬件的问题留给应用程 序。如果在提供获得硬件能力的同时没有增加限制,我们就说驱动程序是灵活 的。不过,有时必须要作一些策略决策。 可以从不同侧面来看你的驱动程序:它是位于应用层和实际设备之间的软 件。驱动程序的程序员可以选择这个设备应该怎样实现:不同的驱动程序可以 提供不同的能力,甚至相同的设备也可以提供不同能力。实际驱动程序设计应 该是在众多需求之间的一个平衡。例如,不同程序可以同时使用同一个设备, 而驱动程序的开发者可以完全自由地决定如何处理同步机制。你可以实现到设 备上的内存映射,而完成独立于硬件的具体能力,或者你可以提供给用户函数 库,帮助应用程序的程序员在可用原语的基础上实现新策略,或者诸如此类的 方法。一个很重要需要考虑的问题就是,如何在提供给用户尽可能多的选项, 平衡你需要编写所花费的时间,以及为使错误尽可能少而保持代码简单之间的 平衡。 1 3 3 工作内容 本文针对实验室的e p a 系统的现场设备在l i n u x 系统下开发相应的硬件驱 动程序,包括: l 、基于m p c 8 2 3 e 的数据采集器的驱动设计,本论文主要叙述了采集器模块 包含的四个设备的驱动程序编写方法,即交通灯控制、温度检测、电机转速检 测和电机转速控制四个设备,分属数据输出( d o ) 、数据输入( d i ) 、模拟输入 ( a i ) 和模拟输出( a o ) 四个功能。 2 、基于p c m c i a 的i e e e 8 0 2 1 l b 无线网络终端的实现,针对硬件平台 m p c 8 5 2 t ,介绍了p c m c i a 子系统中“插槽”层在l i n u x 下的实现。 重庆邮电大学硕士论文第一章绪论 1 4 论文组织与结构 本论文的组织与结构如下: 第一章介绍了嵌入式系统、嵌入式l i n u x 及其驱动程序,以及本论文的研 究背景和研究工作等。 第二章介绍了编写l i n u x 驱动程序的一些基本知识,以及一些要注意的事 项,重点介绍了一般l i n u x 核心模块和应用程序的对比以及用户空间和内核空 间的区别。 第三章介绍了e p a 测控系统及系统中的a 、b 、c 、d 、e 和f 六个设备, 并对数据打采集器模块的设计和i e e e 8 0 2 1 1 b 无线网络终端的设计作了一个初 步的简单介绍。 第四章结合课题介绍了基于m p c 8 2 3 e 采集器模块的驱动程序设计,重点介 绍了采集器模块包含的四个硬件设备的设备驱动程序编写,这四个设备都是字 符设备,遵循一般字符设备驱动程序的编写方法。 第五章介绍了基于p c m c i a 的i e e e 8 0 2 1 1 b 的无线网络终端设计。重点介绍 了l i n u x 系统下的p c m c i a 子系统结构,以及p c m c i a 的最底层,即“插槽”层 的驱动程序编写。 本文最后一章对本论文进行了总结,提出进一步的工作。 重庆邮电大学硕: 论文第二章嵌入式l i n u x 系统设备驱动开发 第二章嵌入式l in u x 系统设备驱动开发 2 1 设备驱动概述 设备驱动程序是这样一类软件:它们控制着设备的操作动作,并且提供了 一个可用的程序接口使其它程序能够与这个设备互动。设备驱动程序并不定 控制着某个物理性的硬件外部设备,比如d e v r a n d o m ( 用来产生随机数) 和 d e v v c s o ( 当前虚拟终端) 就是这样的例子。这些设备与真实的硬件并没有什 么联系,它们只是从内核获取数据再送往应用程序的一种手段,它们通常被称 为软件设备。l i n u x 加载驱动的方式有两种,一种是编译到内核,在l i n u x 内 核启动时加载驱动程序;另外一种是编译为模块,在l i n u x 启动后用i n s m o d 或 m o d p r o b e 来加载,而卸载则用r m m o d 程序来完成,当然,只有超级用户才有权 限加载或是卸载模块。 2 1 1 设备驱动的层次 l i i u x 操作与u n i x 系统一样,从一开始就将所有的设备( 而不仅仅是磁盘 上的文件) 全都看成文件,都纳入文件系统的范畴,都通过文件操作的界面进 行操作1 。这就意味着: 每项设备都至少由文件系统中的一个文件( 确切的说应该是节点) 代 表,因而都有一个“文件名”。每个这样的“设备文件”都唯一地确定 了系统中的一项设备。应用程序通过设备的文件名寻访具体的设备: 而设备则像普通文件一件受到文件系统访问权限机制的保护。 应用程序通常可以通过系统调用o p e n 0 “打开”设备文件,建立起与 目标设备的连接,或者说“上下文”,代表着该设备的文件节点中记载 着建立这种连接所需的信息。对于执行该应用程序的进程而言,建立 起的连接就表现为一个已打开文件。 打开了代表目标设备的文件,即建立起与设备的连接以后,就可以通 过r e a d 0 、w r i t e 0 、i o c t l ( ) 等常规的文件操作对目标设备进行操作。 从应用程序的角度看,设备文件逻辑上的空间是个线性空间。从这个 逻辑空间到具体的物理空间的映射则由内核提供,并划分成文件操作 与设备驱动两个层次。 这样,对于一个具体的设备来说,文件操作和设备驱动就成为同一个事物 的不同层次,而不是相互独立或平行的两个概念。从这种观点和结构模型出发, 重庆邮电大学硕士论文第二章嵌入式l i n u x 系统设备驱动开发 一般而言,至少可以在概念上把l i n u x 系统划分成应用、文件系统以及设备驱 动这三个层次。处于应用层中的进程通过“打开文件号”f d 与己打开文件的f i l e 结构相联系,每个f i l e 结构代表着对一个己打开文件操作的上下文。通过各个 上下文,进程使用各个文件的线性逻辑空间进行文件操作。对于普通文件,即 “磁盘文件”,文件的逻辑空间在文件系统层按具体文件系统的结构和规则映射 到设备的线性逻辑空间,然后在设备驱动层进一步从设备的逻辑空间映射到其 物理空间。这样,一共经历了两层映射。或者,反过来说,磁盘设备的物理空 间经过两层抽象而成为普通文件的线性逻辑空间。而对于“设备文件”,则文件 的逻辑空间通常直接就等价于设备的逻辑空间,所以在文件系统层就不需要有 映射( 有些设备在文件系统层也需要简单的映射) 。这里要指出的是,代表着设 备文件的节点都要通过某个索引节点对能寻访,而对索引节点又要通过一些目 录节点才能寻访,这些目录节点实质上相当于普通文件,所以在打开设备文件 的过程中即隐含着对普通文件的操作。 2 1 2 设备和模块的分类 l i n u x 系统将设备分成三种类型:字符设备、块设备和网络接口“。每个 模块通常实现一种类型,相应地,模块可分为字符模块、块模块和网络模块三 种。然而这种分类方式并不是非常严格,程序员可以构造一个大的模块,在其 中实现不同类型的设备驱动程序。但是,通常还是为每个功能创建不同的模块, 从而实现良好的伸缩性和扩展性。在三类设备中,l i n u x 看待设备的方式有所 区别,每种方式是为了不同的任务。以下是这三种类型设备的介绍: 1 、字符设备 像键盘那样以字符( 字节) 为单位,逐个进行输入输出的设备,称为字符 设备,字符设备是能够像字节流( 比如文件) 一样被访问的设备,由字符设备 驱动程序来实现这种特性。字符设备驱动程序通常至少实现o p e n ,c l o s e ,r e a d 和w r i t e 系统调用。系统控制台和并口就是字符设备的例子,它们可以很好地 用流概念抽象地描述。通过文件系统节点可以访问字符设备,例如d e v t t y l 和d e v l p l 。在字符设备和普通文件系统间的唯一区别是:普通文件允许在其 上来回读写,而大多数字符设备仅仅是数据通道,只能顺序读写。当然,也存 在这样的字符设备,看起来象个数据区,可以来回读取其中的数据。 2 、块设备 像磁盘那样以记录块或“扇区”为单位,成块进行输入输出的设备,称为 “块设备”,和字符设备一样,块设备也是通过d e v 目录下的文件系统节点被 访问的。文件系统通常都建立在块设备上,块设备是文件系统的宿主,如磁盘。 9 重庆邮电大学硕士论文第二章嵌入式l i n u x 系统设备驱动开发 l i n u x 允许你像字符设备那样读取块设备允许一次传输任意数目的字节。 结果是,块设备和字符设备只在内核内部的管理上有所区别,因此也就是在内 核驱动程序间的软件接口上有所区别。就象字符设备一样,每个块设备也通过 文件系统节点来读写数据,它们之间的不同对用户来说是透明的。块设备驱动 程序除了给内核提供和字符设备驱动程序一样的接口以外,还提供了专门面向 块设备的接口,但这个接口对用户来说时不可见的。另外一个重要不同是块设 备必须要支持挂装( m o u n t ) 文件系统。 3 、网络接口 任何网络事务处理都是通过接口实现的,即可以和其他宿主交换数据的设 备。通常,接口是一个硬件设备,但也可以象l o o p b a c k ( 回路) 接口一样是软 件工具。网络接口是由内核网络子系统驱动的,它负责发送和接收数据包,而 且无需了解每次事务是如何映射到实际被发送的数据包。尽管“t e l n e t ”和 “f t p ”连接都是面向流的,它们使用同样的设备进行传输;但设备并没有看到 任何流,仅看到数据报。由于不是面向流的设备,所以网络接口不能象d e v t t y l 那样简单地映射到文件系统的节点上。u n i x 调用这些接口的方式是给它们分配 一个独立的名字( 如e t h o ) 。这样的名字在文件系统中并没有对应项。内核和 网络设备驱动程序之间的通信与字符设备驱动程序和块设备驱动程序与内核间 的通信是完全不一样的。内核不再调用r e a d ,w r i t e ,它调用与数据包传送相 关的函数。 事实上,l i n u x 中还存在其他类型的驱动程序模块,这些模块利用内核提 供的公共服务来处理特类型的设备。因此我们能够和通用串行总线( u s b ) 模块、 串口模块等通信。 除了设备驱动程序,内核中的其他一些功能,不管是硬件还是软件,都被 模块化了。文件系统可能是除驱动程序以外l i n u x 系统中最重要的模块类型, 它决定了如何在块设备上组织信息,以表示目录和文件树。文件系统并不是设 备驱动程序,因为其中并没有实际的某种物理设备与其信息组织的方式有关; 由于文件系统将原始数据组织为高层信息,它实际上是软件驱动程序。 如果你考虑到l i n u x 系统对底层文件系统的依赖程度,你就可以意识到文 件系统概念对系统操作的重要性。访问文件系统的功能位于内核分层的最底层, 具有非常重要的作用。如果给自己的c d - r o m 写一个新的块设备驱动程序时,要 是不能对其上数据上运行1 s 或c p ,那个驱动程序就根本没有什么用处。l i n u x 支持文件系统模块,它的软件接口声明了可以操作在文件系统节点、目录、文 件和超级块上的操作。 o 重庆邮电大学硕士论文第二章嵌入式l i n u x 系统设备驱动开发 2 2 构建和运行模块 本小节将介绍模块编程和内核编程所需的必要的概念。并且用不多的篇幅 来编写和运行一个完整的模块。这种技能是编写任何驱动程序模块的基础。本 节介绍的模块不涉及任何类别的设备。下面的代码是一个完整的“h e l l o ,w o r l d ” 模块( 这个模块事实上并没什么功能) 。 # d e f i n em o d u l e # i n c l u d e i n t i n i t _ m o d u l e ( v o i d ) p r i n t k ( “ h e l l o ,w o r l & n ”) ;r e t u r no ;) v o i d c l e a n u p _ m o d u l e ( v o i d ) p r i n t k ( “ g o o d b y e ,w o r l d h a ”) ;) m o d u l e _ l i c e n s e ( ”g p l ”) ; 函数p r i n t k 在l i n u x 内核中定义,其功能和标准c 库中的函数p r i n t f 类似。 内核需要单独的打印输出是因为它在运行时不能依赖于c 库。模块能够调用 p r i n t k 是因为在i n s m o d 函数装入模块后,模块就链接到内核,因而可以访问内 核的公共符号( 包括函数和变量) ,代码中的字符串 定义了这条消息的优先 级。我们需要在模块代码中显式地指定高优先级( 基数相对较小) ,原因在于: 具有默认优先级的消息可能不会显示在控制台上。 编译和运行模块 r o o t l o c a l h o s tc x f # g c c - d k e r n e l 一- i u s r s r c l i n u x i n c l u d e d m o d u l e w a l l 0 2 - ch e l l o c - oh e l l o 0 把这个模块插入到内核里去。模块是用i n s m o d ( 插入模块) 命令加载的, 它一般存放在s b i n 子目录里,只有根用户才能插入和移出一个模块。 r o o t l o c a l h o s tc x f # i n s m o d h e l l o o 没有出错信息,那么我们怎么才能肯定模块已经成功地插入到内核里去了 呢,我们可以用d m e s g 命令查看从内核缓冲区里读出来的最后一条消息: r o o t l o c a l h o s tc x f j # d m e s gt a i l - n l h e l l o ,w o r l d 我们可以看到来自我们模块的消息出现在内核缓冲区里,当然我们还可以 进一步证明这个模块确实被加载了,可以用l s m o d 命令查看内核的所有已添加 的模块。用移除模块命令( r m m o d ) 将一个模块从内核里取出来。 r o o t l o c a l h o s tc x f # r m m o d h e l l o r o o t l o c a l h o s tc x f # d m e s gt a i l - n l 重庆邮电大学硕士论文第二章嵌入式l i n u x 系统设备驱动开发 g o o d b y e ,w o r l d r o o t l o c a l h o s tc x q # 插入模块命令i n s m o d 和程序l d 有些类似,它将模块中未解析的符号链接 到内核的符号表,然而,它和链接器有些不同,它不修改磁盘文件,而仅仅修 改了内存中的副本。 2 2 1 核心模块和应用程序的对比 编写l i n u x 核心代码“3 并不见得都比编写l i n u x 应用程序代码更困难, 但它需要我们掌握一些新的函数库,考虑一些新问题,这些问题都是我们在应 用程序空间里不曾遇到的。在编写应用程序的时候,内核能够为我们的错误提 供一张安全网;但我们将要编写的代码将构成内核自身的一部分,而这就意味 着在内核空间里原来的安全网己不复存在。内核代码对计算机有绝对的控制权, 能够阻止其他任何进程的执行:而我们编写的代码绝不能滥用这种权利,它们 应该成为其他进程的友好邻居。 应用程序从头到尾执行单个任务,而模块却只是预先注册自己以便服务于 将来的某个请求,然后,它的“m a i n ”函数就立即结束。换言之,函数 i n i t m o d u l e ( 模块的入口点) 的任务是为以后调用模块函数预先做准备,这就像 模块在说:“我在这,我能做这些工作。”,模块的第二个入口点,c l e a n u p _ m o d u l e , 在模块即将卸载之前调用它,它告诉内核:“我要离开了,不要再让我做任何事 情。”能够卸载模块是模块化驱动程序编程中最为吸引人的特色,因为它帮助我 们缩短模块开发周期,使我们可以测试一系列新的驱动程序版本,却不需要每 次都经过冗长的关机重启过程。 作为一个程序员,你一定知道一个应用程序可以调用应用程序本身没有定 义的函数,这是因为链接过程能够解析外部引用,从而使用适当的函数库。例 如,p r i n t f 就是这样一个函数,它定义在l i b c 中。然而,模块仅被链接到内核, 它能调用的仅是由内核开放出来的那些函数,而没有任何可链接的库。例如, 上面的h e l l l o c 中的p f i n t k 函数就是内核版的p r i n t f ,并由内核开放给模块给使 用,除了没有浮点支持外,它和p r i n t f 函数几乎一模一样。 由于没有库连接到模块中,因此源码文件不应该包含任何常规头文件。内 核只能使用作为内核一部分的函数。与内核有关的所有内容都在内核源代码( 通 常位于u s r s r c l i n u x ) 的i n c l u d e l i n u x 和i n c l u d e a s m 目录下的头文件里声明。 图2 1 表示了如何在模块中使用函数调用和函数指针,从而为运行的内核 增加新的功能。 重庆邮电大学硕士论文第二章嵌入式l i n u x 系统设备驱动开发 二 单个函数啊哪 数据+ 函数调用+ 数据指针 一一一二二! 多个函数- 函数指针 数据赋值 图2 1 模块和内核的链接关系 模块运行在所谓的内核空间里,而应用程序运行在所谓的用户空间中,这 个概念是操作系统理论的基础之一。 事实上,操作系统“”的作用就是给程序提供一个计算机硬件的一致的视图。 此外,操作系统处理程序的独立操作,并防止对资源的未经授权的访问。当且 只有当c p u 可以实现防止系统软件免受应用软件干扰的保护机制,这些不同寻 常的工作才有可能实现。每种现代处理器都能实现这种功能。人们选择的方案 是在c p u 内
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026综合类-环保知识竞赛-造林绿化知识竞赛历年真题摘选带答案
- 2026年住宅小区物业服务质量提升方案
- 2026年医院感染爆发或疑似爆发应急预案及报告处置流程
- 2026年体育与健康试题及答案
- 膀胱损伤课件
- 2026年机动车检测站员工考试题及答案
- 2026年畜牧兽医师职业技能认证考试试题及答案解析
- 2025年自动化(工业自动化控制技术)试卷及答案
- 2025年超声波医学中级职称考试真题附答案
- 办公室水彩课件
- T/CSEA 49-2025微弧氧化陶瓷层
- 2026秋学期小学科普版英语四年级上册(新教材)教学计划含教学进度表
- 2026年高考化学试题(湖南卷)+答案
- 综合与实践 周长与面积的变化 课件(共21张) 苏教版数学四年级上册
- 6.1 友谊的真谛 课件(共24张)+内嵌视频
- 腰部运动康复课件
- 火力发电厂作业指导书
- 心电图机操作考核评分标准
- T∕CEA 0065-2025 电梯轿厢用空调
- 2026年精麻药品培训考试题题库及答案(完整版)
- 二次函数配方题目及答案
评论
0/150
提交评论