(计算机应用技术专业论文)基于linux的实时数据采集系统软件研究.pdf_第1页
(计算机应用技术专业论文)基于linux的实时数据采集系统软件研究.pdf_第2页
(计算机应用技术专业论文)基于linux的实时数据采集系统软件研究.pdf_第3页
(计算机应用技术专业论文)基于linux的实时数据采集系统软件研究.pdf_第4页
(计算机应用技术专业论文)基于linux的实时数据采集系统软件研究.pdf_第5页
已阅读5页,还剩61页未读 继续免费阅读

(计算机应用技术专业论文)基于linux的实时数据采集系统软件研究.pdf.pdf 免费下载

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

文档简介

西北工业大学硕士学位论文摘要 摘要 本论文结合某航空测量数据采集系统的研究背景,研究基于实时l i n u x 的实时软件。文中综述了实时l i n u x 的开发及应用现状,并对实时l i n u x 系 统内核的构造机制、设备驱动程序开发技术、实时数据存盘等关键技术进行 了研究,在此基础上,设计实现了基于实时内核r t l i n u x 的一个实时数据采 集系统软件,满足了研究所提出的实时需求。 论文首先介绍了实时l i n u x 操作系统的开发和应用现状,阐述了实时 l i n u x 的实现机制及典型实现方案,着重论述了r t l i n u x 的相关技术及其使 用。在此基础上,给出了以r t l i n u x 为基础构造的实时数据采集系统软件的 一个设计方案。 论文第二部分重点介绍了基于实时l i n u x 的实时采集系统软件实现技 术。首先分析研究了实时l i n u x 环境下的硬件设备驱动程序的实现技术和方 法;为了满足实时数据存盘要求,论文通过深入地分析l i n u x 文件系统,设 计和实现了一种优化存盘操作的连续文件系统:据此,设计实现了一个集实 时数据采集、实时数据存盘、动态数据显示于一体的实时数据采集系统软件。 论文第三部分介绍了基于r t l i n u x 的实时采集系统软件的实验研究。 通过构造数据发送的前端来模拟采集系统应用环境,对系统进行长时间地模 拟测试:试验表明基于r t l i n u x 的实时采集系统软件能满足某航空测量数据 采集系统的实时性能要求。 总之,论文在实时l i n u x 系统及基于实时l i n u x 的应用软件技术方面 做了较深入的研究,为进一步的实时应用和实时系统研究奠定了基础。 关键词:实时操作系统l i n u x r t l i n u x 实时采集系统 设备驱动程序文件系统连续文件系统 耍! ! 三些查堂婴主堂垡堡苎 塑墨 a b s t r a c t a c c o r d i n g t ot h eb a c k g r o u n do ft h ea v i a t i o nm e a s u r e m e n t s d a t a c o l l e c t i o ns y s t e m ,w es t u d yt h er e a l t i m ea p p l i c a t i o ns o f t w a r eb a s e d o nr e a l t i m el i n u xi nt h i st h e s i s w eg i v e a no v e r v i e wo ft h e d e v e l o p m e n ta n da p p l i c a t i o ns t a t u so fr e a l t i m el i n u x 。i na d d i t i o n ,w e a l s or e s e a r c ht h ec o n s t r u c t i v em e c h a n i s mo fr e a l t i m el i n u xc o r e ,t h e t e c h n o l o g yo ft h ed e v i c ed r i v e r sa n dt h er e a l t i m ed a t as t o r i n g o n t h i sb a s e ,w ec o n s t r u c tar e a l t i m ed a t ac o l l e c t i o ns o f t w a r eb a s e do n r e a l t i m el i n u xr t l i n u xa n dm e e tt h ep r a c t i c a lr e a l t i m ed e m a n d s o nt h ef i r s t p a r t o ft h i st h e s i s ,w ei n t r o d u c et h es t a t u so f r e a l t i m el i n u x s d e v e l o p m e n t a n da p p l i c a t i o n t h ea c h i e v e m e n t m e t h o d o l o g y a n dt h et y p i c a la c h i e v e m e n tp r o j e c to ft h er e a l t i m el i n u x a r e e x p o u n d e d s u b s e q u e n t l y ,w ep a ye m p h a s i s o n d i s c u s s i n g t h e t e c h n o l o g yo fr t l i n u xa n dh o wt ou s ei t a tl a s t ,w eg i v ead e s i g no f t h er e a l t i m ed a t ac o l l e c t i o ns o f t w a r eo nr t l i n u x o nt h es e c o n dp a r t ,w ed i s c u s st h ep r a c t i c a lt e c h n o l o g yo ft h e r e a l t i m ed a t ac o l l e c t i o ns o f t w a r eb a s e do nr e a l t i m el i n u x a f t e r s t u d y i n gt h et e c h n o l o g ya n dm e t h o d o l o g yo fr e a l t i m e l i n u xd e v i c e d r i v e r s ,w ee x p o u n da n da c h i e v eac o n t i g u o u sf i l es y s t e mi no r d e rt o i m p r o v et h es p e e do ff i l es t o r i n g i naw o r d ,w ed e s i g na n da c h i e v e ar e a l t i m es o f t w a r ew h i c hc o m b i n et h er e a l t i m ed a t ac o l l e c t i o n ,t h e r e a l t i m ed a t a s e n d i n go u t ,t h e r e a l t i m ed a t a s t o r i n g a n dt h e c h a n g e a b l ed a t ad i s p l y i n g o nt h et h i r dp a r t ,w ei n t r o d u c et h ee x p e r i m e n t a lr e s u l to ft h e r e a l t i m ed a t ac o l l e c t i o ns o f t w a r e b yc o n s t r u c t i n gt h ea p p l i c a t i o n s u r r o u n d i n go ft h ed a t ac o l l e c t i o ns y s t e m ,w ep u tt h es y s t e mt ot e s t f o ra l o n g t i m e t h er e s u l ti n d i c a t e st h a t t h er e a l t i m ed a t a c o l l e c t i o ns o f t w a r ec a nm e e tt h ep r a c t i c a lr e a l t i m ed e m a n d i nb r i e f ,w ed od e e p l yr e s e a r c ho nt h er e a l t i m el i n u xa n dt h e t e c h n o l e g y o fa p p l i c a t i o ns o f t w a r eb a s e do nt h er e a l t i m el i n u xi nt h i s t h e s i s w h i c hm a k eas t r o n gf o u n d a t i o n f o r t h em o r er e a l t i m e a p p l i c a t i o n sa n dm o r ed e e p l yr e s e a r c hi nr e a l t i m es y s t e m k e yw o r d :r e a l t i m eo p e r a t i n gs y s t e m ,l i n u x ,r t l i n u x ,r e a l t i m ed a t a c o l l e c t i o ns y s t e m 。d e v i c ed r i v e r ,f i l e s y s t e m ,c o n t i g u o u s f i l e s y s t e m 西北工业大学硕士学位论文第一章绪论 第一章绪论 1 1 论文研究的背景和目的 本论文以某航空测量数据采集系统为背景,对实时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 的实时数据采集软 件的实现做必要的技术储备。 1 2 实时l i n u x 的研究现状及其应用 l i n u x 操作系统在近几年迅猛发展和不断成熟,除了在网络服务器,集 群技术和p c 桌面领域的进展引人瞩目外,它在嵌入式设备和实时应用领域 也崭露头角。 l i n u x 为实时应用软件的开发提供了一条新的途径。但是,标准l i n u x 并不能根本的满足硬实时系统的要求。因为,标准l i n u x 为分时操作系统, 分时操作系统注重平均表现性能,不注重个体表现性能;分时操作系统无法 明确说明它的每一个系统服务运行所需要的最长时间,运行在它上面的任务 的行为是不可预测的。 目前,有两种基本的实时构造方法可以使l i n u x 提供实时功能。 1 、双重内核法。这种方法在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 来实现。一般需要将任务划分为实时任务和非实时任务两部分。典型 西北工业大学硕士学位论文 第一章绪论 的有r t l i n u x ( r e a l t i m el i n u x ) ,r t a i ( r e a l t i m ea p p l i c a t i o ni n t e r f a c e ) 等。 这类实时l i n u x 的特点为:1 ) 由于实时系统的一部分任务被划分出来, 因此降低了实时内核需要处理的复杂度,提高了实时部分的计算效率;2 ) 由于实时内核独立且简单,因此这类系统实时性能较好,可达到硬实时系统 性能;3 ) 实时任务的开发由于面对的是小的实时内核,所以不能直接利用 l i n u xa p i 和第三方软件及运行库;4 ) 系统要求应用的实时需求必须限制 于由实时内核提供的功能需求限度以内,而实时核心提供的功能支持非常有 限。当然我们也可以扩展实时核心的功能,比如增加实时网络功能等。然而, 新增加的部分很有可能会重叠l i n u x 核心已有功能,当增加的部分较复杂的 情况下,不仅工作量大而且其可靠性和使用便利性都将受到不同程度上的影 响。 该方法研究得比较早,并取得了较广泛的应用。例如“:n a s a ( 美国 国家航空和宇宙航行局) 将r t l i n u x 应用在航天飞机的测控上;h a t ( t h e h u n g a r i a na u t o m a t e dt e l e s c o p e 匈牙利自动观测望远镜) 将r t l i n u x 应用 在整个太空自动观测上;日本富士通公司还将r t l i n u x 用于机器人控制器 上;甚至在医学方面用r t l i n u x 来控制心脏的跳动,等等。 2 、修补内核法。这种方法是基于l i n u x 系统,进行源代码级修改,改 善操作系统的实时性,从而使通用的l i n u x 变成一个真正的实时操作系统。 这种方法的原则是精心选择部分改动,就可以满足一系列相关l i n u x 实时开 发。此外,由于这些改动都是相对局部的,不会从根本上改变l i n u x 的核心。 如k u r t ( k a n s a su n i v e r s i t yr e a l t i m el i n u x ) ,r e d l i n u x ( r e a l t i m ea n d e m b e d d e dl i n u x ) 等。 采用这种方法的特点为“:1 ) 可以方便使用标准l i n u x 资源,支持复 杂的实时应用;2 ) 修改l i n u x 的工作量比较大,关系复杂,不同的l i n u x 内核版本之间移植困难;3 ) 系统性能受原系统框架的影响比较大,很难达 到真正的硬实时性能,由于受时间精度的限制对于要求i o k h z 以上频率的实 时应用是无法使用这种架构来达成。 这类系统也得到了定的应用,例如 1 “:k u r t 被应用于具有一定实时 要求的一些多媒体应用和a t m 网络应用、美国的磊讯公司将r e d - l i n u x 应用 于信息家电的生产中,等等。 这两种实时l i n u x 架构研究的侧重点不一样,系统各有优缺点。目前, 有些较新的实时l i n u x 版本将以上两种架构融合在一起,使系统即使用方便 又有较好的实时性能,例如 1 7 :r e d i c e l i n u x 和l i n u x r t 等都同时采用 r t a i 和r e d l i n u x 的相关技术,这些系统据设计者介绍,都达到了较好的 西北工业大学硕士学位论文第一章绪论 实时性,并取得了一些具体的应用。 但是,总的来说,目前各种实时l i n u x 操作系统的功能还比较简单, 同步、互斥和通信机制还比较租糙,需要进一步完善,需要对当前网络环境 下的分布实时提供更好的支持,如高效可预测的通讯协议、分布实时调度算 法等。另外,对于恶劣条件下的应用应当提供除定时狗以外更多的保护。为 了增强系统的可靠性、减少错误,还应该提供一种好的测试工具以分析系统 的最大中断延时、中断屏蔽时间、可调度性等指标,降低开发难度,提高软 件的可靠性“。 1 3 论文内容及组织 本文以某航空测量数据采集系统为研究背景,研究基于实时l i n u x 的 实时软件技术。研究内容包括实时l i n u x 系统内核的构造机制、设备驱动程 序开发技术、实时数据获取、实时数据存盘等关键技术。在此基础上,设计 实现了基于r t l i n u x 的一个实时数据采集系统软件。 全文共分七章,按如下结构组织: 第一章为绪论。介绍论文的研究背景和目的意义,实时l i n u x 操作系 统的研究与应用现状,论文研究的内容。 第二章为实时l i n u x 操作系统的简介。介绍实时l i n u x 的种类及其特 点;重点介绍r t 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 存盘过程的m y e x t 2 连续文件系统的设计和 实现过程。 第六章为实时采集系统软件的实现与检验。首先论述了基于r t l i n u x 的一个实时采集系统软件的总体实现;接着对所建立的实验研究环境、实验 研究内容及实验结果的对比分析进行了介绍。 第七章为结束语。对所做研究工作做了总结,对进一步的研究提出了 展望。 两北工业大学硕士学位论文 第二章宴时l i n u x 操作系统 第二章实时l i n u x 操作系统 2 。l 实时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 的特征。 2 1 1l i n u x 简介 简单地说,l i n u x 是一套免费使用和自由传播的类u n i x 操作系统。这 个系统是由世界各地的成千上万的程序员设计和实现的。其目的是建立不受 任何商品化软件版权制约的、全世界都能自由使用的u n i x 兼容产品。l i n u x 不仅为用户提供了强大的操作系统功能,而且还提供了丰富的应用软件。目 前,l i n u x 内核最高稳定版本为2 4 。 l i n u x 主要是根据p o s i x ( p o r t a b l es t a n d a r df o ru n i x ) 设计的;在 放弃p o s i x 的地方通常遵循s y s t e mv ( 贝尔实验室的一个u n i x 版本 惯例, 但是网络互连接口是完全遵循b s d ( b e r k e l e ys o f t w a v ed i s t r i b u t i o n 伯克 利软件发布版本,即伯克利的u n i x 版本) 模型。 l i n u x 是一个单内核系统。与普通单核系统不同的是,l i n u x 内核程序 可以方便地以模块的形式设置,并在系统运行期间直接装载或卸载。单内核 模型以提高系统执行效率为设计核心,因为整个系统是一个统一的内核,所 以其内部调用效率很高,但对于远程调用来说同样没有优势。单内核的系统 缺点也正是由于其源代码是一个整体而造成的,通常其模块之间的界线并不 是特别的清晰,模块间的调用比较随意,所以做系统修改时,往往牵一发而 动全身,导致工作量大,维护困难。 2 1 2 实时l i n u x 作为实时l i n u x ,除了要满足应用的功能需求以外,更重要的是还要满 足应用提出的实时性要求,而组成一个应用的众多实时任务对于实时性的要 西北工业大学硕士学位论文 第二章实时l i n u x 操作系统 求是各不相同的,此外实时任务之间可能还会有一些复杂的关联和同步关 系,如执行顺序限制、共享资源的互斥访问要求等,这就为系统实时性的保 证带来了很大的困难。 因此,和别的实时操作系统一样,实时l i n u x 所遵循的最重要的设计 原则是:采用各种算法和策略,始终保证系统行为的可预测性 ( p r e d i c t a b i l i t y ) 。可预测性是指在系统运行的任何时刻、任何情况下,实 时操作系统的资源调配策略都能为争夺资源( 包括c p u 、内存、网络带宽等) 的多个实时任务合理地分配资源,使每个实时任务的实时性要求都能得到满 足。 这样,就要求实时l i n u x 不仅应该具有低的延时和高的可靠性,还要 求它的行为应该被用户了解和掌握,包括以下几个方面: ( 1 ) 中断延时,即从中断产生到被调度运行的时间。它必须是可预测 并满足应用的要求,当然中断延时依赖于并发中断的数量。中断延时可分为 两大部分:系统的中断响应和实时任务的调度,它与以下的指标有关:中断 分派时间( i d t ) 、中断服务时间( i s t ) 、内核抢先时间( k p t ) 、调度延时( s d ) 、 上下文切换时间( c s t ) 、系统调用返回时间( r s t ) 。 ( 2 ) 每个系统调用的最长时间。由于应用在设计时无法知道执行时的 系统状态,所以该指标必须独立于系统中的对象数。 ( 3 ) 操作系统和设备驱动程序屏蔽中断的最长时间。 另外,对于一个优秀的实时l i n u x 来说,不仅要有一个好的内核、很 短的中断延时或上下文切换时间,还要有说明文档、很好的开发和调试工具, 这样才能为开发者提供一个良好的开发环境。 2 1 3l i n u x 实时应用的缺陷 虽然从l i n u x 2 2 开始兼容p o s i x1 0 0 3 i b 实时规范,提供内存锁定 ( m l o c k ) 、实时任务的特定调度策略( s c h e d _ m e t s e h e d ) 和p o s i xr t 信号, 但l i n u x 的实时进程仍可能被内核阻塞相当长时间,原因为: ( 1 ) l i n u x 采用的时钟中断的精度不够。l i n u x 为了提高系统的平均 吞吐率,将时钟中断的周期设为1 0 毫秒,这个时钟精度不能满足实时要求。 ( 2 ) l i n u x 在每个系统调用期间都关闭中断。有些系统调用的时间很 长,这增加了中断延时和调度延时。 ( 3 ) l i n u x 设立了许多缓冲机制使得实时任务不能及时执行。例如磁 盘缓冲和各种c a c h e 机制,这使得系统行为难以预测。 ( 4 ) l i n u x 采用粗糙的同步策略,系统可能长时间占用某个临界资源 西北工业大学硕士学位论文 第二章宴时l i n u x 操作系统 而阻塞实时进程。 ( 5 ) l i n u x 下优先级倒置时间没有上界,实时任务可能被阻塞非常长 的时间。 总之,标准l i n l l x 只能提供一般性能的软实时能力,实时性很弱。所 以,标准l i n u x 必须要经过实时改造后,才能很好的应用于实时应用。 2 2 典型实时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 实时操作系统 有:r t l i n u x ,r t a i ,r e d l i n u x ,k u r t 。与传统商业实时操作系统相比较, l i n u x 实时操作系统的研究有独特的应用价值及学术意义,目前世界上正在 进行之中的几个相关研究项目都各有其独到之处及鲜明的技术特征。 前面我们也提到,按照改造的思路不同,实时l i n u x 操作系统可分为 二个大类。第一类是r t l i n u x 和r t a i 等,它们采用双内核的模式,实时 进程由实时内核来控制,实时进程要求比较简单。第二类,如k u r t , r e d 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 的网络、x w i n d o w s 和开发环境等资源的同时,提供很好的实时能力,下面 将分别一一介绍这几种有代表性的实时l i n u x 操作系统: 1 、r t l i n u x r t l i n u x 属于硬实时系统,双内核模式。将实时核设计成为可被抢占的, 主要方法是构造一个实时内核负责处理硬件消息,接管中断,实时任务在该 内核上直接运行。r t l i n u x 把l i n u x 内核本身作为优先级最低的任务去运行。 该实时内核有自己的基于优先级的调度算法,l i n u x 内核随时可以被优先级 更高的实时任务抢占。实时任务与l i n u x 进程之间通过特定的通讯机制( 如 f i f o ) 进行通信。运行在l i n u x 内核之上的进程则可以完成些非实时功能。 2 、i 玎a il i n u x r t a i 的技术实现与r t l i n u x 的类似,属于双内核模式。r t a i 和r t l i n u x 西北工业大学硕士学位论文第二牵实时l i n u x 操作系统 最大的不同地方在于它适当的在l i n u x 上定义了一组实时硬件抽象层r t h a l ( r e a l t i m eh a r d w a r ea b s t r a c t i o nl a y e r ) 。r t a i 是建立在r t h a l 上的实 时应用接口,为实时应用编程提供一个通用而强大的接口。r t a i 修改了与 体系结构相关的代码而形成了r t h a l 层。r t h a l 的作用是使r t a i 能够在实 时任务需要运行的任何时刻中断l i n u x 。引入r t a i 后,l i n u x 的功能没有改 变,但运行于最低优先级下,当无实时任务执行时它才允许执行。 r t a l 分为以下三个模块: 1 ) r t a i ( 中断处理) ;2 ) r t a i s c h e d ( 调度模块) ;3 ) r t a i f i f o ( f i f o 模块) 。 r t a i 能动态装入和卸载,实时任务在r t a i 装入之后再装入。 r t a i 提供直接高效的硬件存取调用,而不登通过标准l i n u x 的中断管 理层。r t a i 的任务调度器提供硬实时能力,采用基于固定优先级的抢先调 度策略;全部调度可根据定时函数、实时时间( 如信号获取) 或异步事件来 管理。r t a i 的实时任务到实时任务的通讯方法包括:信号、互斥、消息队 列及远程过程调用:实时任务到l i n u x 任务的通信方法包括实时f i f o 和共 享内存。 r t a i 这样做的好处在于我们可以将直接修改l i n u x 内核的代码减至最 小,这使得将r t h a l 移植到新版l i n u x 的工作量减至最低。但是,实时 任务只能使用r t a i 提供的函数,不能直接使用标准l i n u x 的资源。因此。 虽然r t a i 能提供硬实时性能,但实时应用的规模有限,不适合复杂的实时 应用。 3 、k u r tl i n u x k u r t 是由k a n s a s 大学所研制,它和r t l i n u x 及r t a i 有很大的不同。 它不在硬件与l i n u x 之间增加一层内核,它只有一个内核,它是通过修改 l i n u x 内核使之满足实时性要求。k u l 订保留l i n u x 中原有的中断管理,并通 过对时钟芯片8 2 5 4 编程达到微秒级的定时能力,而不是l i n u x 的毫秒级的 周期时钟,从而提供比l i n u x 更好的软实时能力。换句话说,k u r t 在提供 很好的系统平均性能的同时又尽可能的提供好的实时性。 k u r t 使用三种不同的内核态控制实时进程的调度。 ( 1 ) 普通态,内核不提供实时支持,这时与通常的l i n u x 没有区别; ( 2 ) 实时态,内核仅仅调度实时进程,非实时进程全部被挂起。 ( 3 ) 混合态,实时进程和非实时进程同时被调度。 这种实时进程的调度方式容易产生的问题是:它的安全性依赖于应用 程序员,若内核态之间的切换没有很好的实现,那么由此而带来的实时进程 和非实时进程之间的不正确交替会导致系统崩溃。 西北工业大学硕士学位论文 第二章实时l i n u x 操作系统 k u r t 通过实时调度框架来处理所有实时事件和它们相应的处理程序。 当产生一个实时事件时,实时框架调用相关的实时事件处理程序。这样就将 实时任务的调度和执行分成两个独立的方面,从而简化了在实时系统的设 计。 k u r t 采用循环调度策略,即根据“计划表”进行调度。计划表中包含 全部所需调用的动作,如动作的执行时间,动作执行的处理程序等。此表在 系统设计期间建立,在随后的运行中,调度的工作就是连续的从表中读取指 令。当读到表尾部时,又从头开始执行,因此叫循环调度。它的好处是实现 简单、高效,计划制定后就可立即执行。主要的困难是如何确定计划,而且 每次修改一个任务的参数都必须重建整个计划。 k u r t 实时任务与实时任务之间、实时任务与非实时任务之间可通过实 时f i f o 进行通信。 k u r t 是第一个可以使用全部l i n u x 原有系统调用的实时l i n u x ,有利 于充分利用l i n u x 的软件资源。由于k u r t 只是简单的将l i n u x 的调度器用 一个很简单的时间驱动调度器加以取代,实时进程的执行很容易受其它非实 时进程的影响。另外,它受限于原有的l i n u x 架构,使得系统响应时间很 难控制。k u r t 主要应用于这样一类系统:采用一般操作系统性能达不到, 而采用硬实时系统又觉得代价太大,如多媒体和高速a t m 网络。 4 、r e d l i n u x r e d l i n u x 和k u r t 类似,可以直接使用标准l i n u x 的系统调用。为提 高效率采用一个很短的任务分派间隔( s t a r t = m y b u f f l 一 e n d = 0 : 在驱动程序中一共申请了四块共享内存块,大小为3 m 字节;g p s l 和g p s 2 各用两块。 对于r t l i n u x 下共享内存的使用,本驱动程序还尝试使用另外一种方 法:在l i n u x 初始化的时候,预留了一定数量的内存提供给该驱动程序专用。 具体做法是,例如p c 带有1 2 8 m 内存,可将线搜索路径a p p e n d = ”m e m = 1 2 0 m ” 添加进l i l o c o n f 文件。当启动带有l i n u x 内核和r t l i n u x3 1 的系统时, l i n u x 仅使用1 2 0 m b 内存。系统不用剩下的8 m b 内存( 物理地址为o x 7 f 0 0 0 0 0 到o x 7 f f f f f f ) ,而是留给在系统下运行的各种任务共享。要想从用户进程 获取存储器地址并访问预留的存储器,必须用or d w r 访问模式来打开 d e v m e m 驱动程序,然后利用m m a p 0 保留存储器: if ( f d = o p e n ( ”d e v m e m ”,o _ r d w r ) ) 0 ) ( 出错处理 m mp t r = ( c h a r ) m m a p ( 0 ,o x l 0 0 0 0 0 ,p r o t _ r e a d jp r o t _ w r i t e , m a e s h a r 印,f d ,o x t f 0 0 0 0 0 ) : if ( m m - p t r = = m a p _ f a i l e d ) 出错处理) e l s e f 使用 而从实时模块一侧,则必须使用i o r e m a p ( o x 7 f 0 0 0 0 0 ,o x l 0 0 0 0 0 ) 才能 获取这8 m b ( o x l 0 0 0 0 0 字节) 预留内存。这种方法比较笨,既不能通过预留 内存的所有权,也不能通过读或写来获取控制权。正确地配置和释放大量内 存的机制尚未问世。另外,无论实时进程是否需要,该内存都不能为l i n u x 所用。从使用方便性来讲,前者较方便。 这样,驱动程序的初始化工作就作完了。加载模块时用i n s m o d 指令, 后面跟着模块名,此时系统将找到i n i t _ m o d u l e0 函数并执行初始化工作。 2 、模块出口函数 西北工业大学硕士学位论文第四章智能多串口通讯卡的设备驱动 卸载模块的代码在c l e a n u p _ m o d u l e ( v o i d ) 中,主要是把所申请的各项 系统资源释放掉。卸载时用r r a m o d 指令来完成。主要函数为: r e l e a s er e g i o n ( i o b a s e ,o x 3 1 4 - i o b a s e ) :释放端口 r e l e a s em e mr e g i o n ( r a mb a s e ,o x l 0 0 0 ) ;释放内存地址 i o u n m a p ( r a m _ b a s e ) :取消映射 m b u f f - f r e e ( ”m y b u f f l ”,( v o id * ) b u f ) :释放共享内存 r t l f r e e i r q ( u n s i g n e di n ti r q ) :释放中断号 4 3 3 通讯卡设备驱动程序的读写函数 1 、端口读写函数 由于大多数硬件都把8 位、1 6 位和3 2 位的端口区分开来,因此,i o 端口的访问必须调用不同的函数来访问大小不同的端口。通讯卡为8 位端 口,所以使用如下函数: u n s i g n e di n b ( u n s i g n e dp o r t ) : v o i do u t b ( u n s i g n e dc h a rb y t e ,u n s i g n e dp o r t ) : 端口的访阀还有一个重要的问题需要注意:尽管端口和内存非常相似, 但i o 端口和内存的最主要区别就是端口操作具有边际效应,而内存操作则 没有。 内存写操作的唯一结果就是在指定位置存储一个数值;内存读操作则 仅仅返回指定位置最后一次写入的数值。由于内存访问速度对c p u 的性能至 关重要,而且也没有边际效应,所以可用多种方法进行优化,如使用高速缓 存保存数值,重新排序读写指令等。编译器能够将数值缓存在c p u 寄存器中 而不写入内存,即使存储数据,读写操作也都能在高速缓存中进行而不用访 问物理r a m 。无论在编译器一级或是硬件一级,指令的重新排序都有可能发 生:一个指令序列如果以不同于程序文本中的次序运行常常能执行得更快, 例如在防止r i s c 处理器流水线的互锁时就是如此。在c i s c 处理器上,耗时 的操作则可以和运行较快的操作并发执行。在对常规内存进行这些优化的时 候,优化过程是透明的,而且效果良好( 至少在单处理器系统上是这样) 。 但对i o 端口操作来说这些优化很可能造成致命的错误,处理器无法预料到 某些其它进程( 在另一个处理器上运行,或在某个i o 控制器中) 是否会依 赖于内存访问的顺序。因此驱动程序必须确保不会使用高速缓存,并且在访 问寄存器时不会发生读或写指令的重新排序:编译器或c p u 可能会自作聪明 地重新排序所要求的操作,结果是发生奇怪的错误,并且很难调试。 由编译器优化和硬件重新排序引起的问题的解决办法是,在从硬件角 西北工业大学硕士学位论文 第四章智能多串口通讯卡的设备驱动 度看必须以特定顺序执行的操作之间设置内存屏障。因为内存屏障会影响系 统性能,所以应该只用于真正需要的地方。因此,在端口的读写函数分别为: i n b ( u n s i g n e dp o r t ) : r m b 0 : 和 o u t b ( u n s i g n e dc h a rb y t e ,u n s i g n e dp o r t ) : w m b 0 : l i n u x 分别对读写操作提供不同的内存屏障函数,以尽量减少对系统性 能的影响。 2 、存储器地址读写函数 解决了端口的访问,下面来看存储器地址的访问。 前面也提到存储器地址的访问与i 0 端口的访问有区别:i o 端口可以 直接访问;而存储器地址不能直接访问,必须先进行内存映射,然后对映射 得到的内存区域进行访问。通讯卡的存储器地址( e 0 0 0 段) 是个人计算机 上的i s a 内存段。它的内存范围在6 4 0 ( o x a 0 0 0 0 ) k b 到1 ( 0 x 1 0 0 0 0 0 ) m b 之 间。因此它正好出现在常规系统r a i l 的中间。在早期的l i n u x 版本该区域 可以直接访问,这个内存段属于非直接映射一类的内存。但因为该区域很小 而且使用频繁,所以内核在启动时就建立了访问这些地址的页表。现在的 l i n u x 访问它们使用的虚拟地址和实际物理地址并不相同,所以无论如何都 是要使用i o r e m a p 的( 因为如果访问是经由页表进行的,内核必须首先安 排物理地址使其对设备驱动程序可见,这通常意味着在进行任何地址操作之 前必须先调用i o r e m a p ) ,具体的映射函数在模块初始化部分已介绍了。 存储器地址经过映射得到的内存地址仍然不应该直接使用i 0 指针指 向的地址一一即使在某些体系结构这么傲也能正常工作。为了编写出的代码 在各种系统和内核版本都能工作,应该避免使用直接访问的方式,而代之的 是使用经过包装的函数,每个体系结构都提供这些函数。对于通讯卡的驱动 程序每次读写的是一个字,所以读写函数为: u n s i g n e dr e a d w ( a d d r e s s ) : v o i dw r i t e w ( u n s i g n e dv a l u e ,a d d r e s s ) : 再次强调a d d r e s s 是由i o r e m a p 函数映射后返回的地址。 4 3 4 通讯卡设备驱动程序的中断处理 当中断发生后,驱动程序需要作的事情是:首先清中断;接着,读接收 完整状态字,判断是哪一个通道的数据已经接收完整了;然后,根据通道 西北工业大学硕士学位论文 第四章智能多串口通讯卡的设各驱动 找到相应的地址,读出当前帧的长度:最后,将数据帧从数据区地址写到 缓冲区中。 在定义中断处理函数前,首先定义了共享内存的读写操作函数: i n tb u f _ g e t ( s t r u c tm y b u f f e r 半b ) : i n tb u fd u t ( s t r u c tm yb u f f e r 柚,i n tc o u n t ) :c o u n t 为数据帧长度 写操作函数首先判断剩余的内存块是否足够容纳一个m y b u f f e r 结构, 空间不够( 即写满了) 将重新从另一块的头部开始写入,也就是说每个通道 的数据轮流使用两个共享内存。 正如前面所说的,中断处理函数主要的工作便是对存储器地址进行读写 操作,完了以后将得到的数据放到共享内存中便完成任务了。 中断处理程序和普通程序相比,唯一特殊的地方就是处理程序是在中断 期间运行的,因此它的行为会受到一些限制:处理程序不能向用户空间发送 或者接收数据,因为它不是在任何进程的上下文中执行的:处理程序也不能 做任何可能发生睡眠的操作,例如调用s l e e p _ o n ,或者锁住一个信号量等 等;最后,处理程序不能调用s c h e d u l e 函数。还应注意,无论是快速还是 慢速处理程序,都应该编写执行时间尽可能短的处理例程;如果需要执行一 个长时间的计算任务,最好的方法是使用任务队列在更安全的时间内调度计 算任务。 本驱动程序中断处理函数最费时的是将数据帧写到共享内存块中,因 为数据帧比较长,加上时标,一共为5 0 8 个字节,我们在第三章已分析过, 每帧处理时间最快约为4 毫秒。中断处理程序需要尽快结束而不要使中断被 阻塞的时间过长,因为外部设备产生的中断是随机的,任何时刻都有可能产 生中断。为此,将中断处理函数分成两部分:顶半部和底半部。“顶半部” 是实际响应中断的例程,也就是用r e q u e s t i r q 注册的中断例程:“底半 部”是一个被“顶半部”调度并在稍后更安全的时间内执行的例程。 顶半部处理程序和底半部处理程序之间最大的不同,就是当底半部处 理程序执行时,所有的中断都是打开的一一这就是所谓的在更安全时间内运 行。典型的情况是顶半部保存设备的数据到一个设备特有的缓冲区并调度它 的底半部,然后退出,这些处理是非常快的。然后,底半部执行其它必要的 工作,例如唤醒进程,启动另外的i o 操作等等。这种方式允许在底半部 工作期间,顶半部还可以继续为新的中断服务。值得注意的是,所有应用于 中断处理程序的限制也在底半部处理中适用。这样,底半部也不可以睡眠, 不可以访问用户空间,不可以调用调度器。 l i n u x 内核有两种不同的机制可以用来实现底半部处理:一种是2 4 内 核的t a s k l e t ,另一种是较老的底半部( b h ) 实现( 存在于老的内核中) 。 西北工业大学硕士学位论文 第四章智能多串口通讯卡的设备驱动 t a s k l e t 是进行底半部处理的首选方法,但是它们不能移植到早期的内核版 本上。我们将使用t a

温馨提示

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

评论

0/150

提交评论