(计算机应用技术专业论文)串行物理设备与功能模型互操作方法的研究.pdf_第1页
(计算机应用技术专业论文)串行物理设备与功能模型互操作方法的研究.pdf_第2页
(计算机应用技术专业论文)串行物理设备与功能模型互操作方法的研究.pdf_第3页
(计算机应用技术专业论文)串行物理设备与功能模型互操作方法的研究.pdf_第4页
(计算机应用技术专业论文)串行物理设备与功能模型互操作方法的研究.pdf_第5页
已阅读5页,还剩51页未读 继续免费阅读

(计算机应用技术专业论文)串行物理设备与功能模型互操作方法的研究.pdf.pdf 免费下载

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

文档简介

华北电力大学硕士学位论文 摘要 由于高效率软硬件协同设计的需要,硬件仿真模型开始广泛应用于软件的早期 开发中。在基于仿真平台的软件开发过程中,一些软件需要使用到物理设备( 如串 口、网卡等串行设备) 进行通信或者进行早期测试验证,此时仿真环境需要能够通 过本地物理设备通信来满足需求。 本课题的主要研究内容是l i n u x 下串行设备功能模型与物理设备互操作方法。 在本论文中提出了串口、网卡功能模型与物理设备互操作的方法,加以实现,并搭 建了嵌入式钡0 试平台,对互操作方法进行正确性验证。 关键词:串口,y s t e m c ,l w i p ,t u n t a p a b s t r a c t h a r d w a r es i m u l a t i o nm o d e l sw i d e l yu s e di nt h ee a r l yd e v e l o p m e n to ft h e s o f t w a rb e c a u s eo fh i g he f f i c i e n c yo fh a r d w a r ea n dr e q u i r eo fs o f t w a r ec o d e s i g n i n t h es o f t w a r ed e v e l o p m e n tb a s e do ns i m u l a t i o np l a t f o r m ,s o m es o f t w a r en e e dt ou s e p h y s i c a ld e v i c e s ( s u c ha ss e r i a lp o r t s ,n i ce t c ) f o rc o m m u n i c a t i o n s ,o re a r l yt e s t s o s i m u l a t i o ne n v i r o n m e n ts h o u l db ea b l et oc o m m u n i c a t et h r o u g hl o c a l p h y s i c a l e q u i p m e n tt om e e tt h ed e m a n d t h em a i nt o p i co ft h i s p a p e ra r e :r e s e a r c ho fi n t e r a c t i v eo p e r a t i o nm e t h o d b e t w e e ns e r i a lp h y s i c a ld e v i c ea n df u n c t i o nm o d e lu n d e rl i n u x t h i sp a p e rm a i n l y p u tf o r w a r dai n t e r a c t i v eo p e r a t i o nm e t h o db e t w e e ns e r i a lp o r t s ,n i cf u n c t i o nm o d e l a n dp h y s i c a ld e v i c e ,a n da c h i e v e d t h e nt h ep a p e rs t r u c t u r e dae m b e d d e dt e s t p l a t f o r mt ov e r i f ya c c u r a c yo fi n t e r a c t i v eo p e r a t i o nm e t h o d l i a n gx u e h o n g ( c o m p u t e ra p p l i c a t i o nt e c h n o l o g y ) d i r e c t e db yp r o f s h a oz u o z h i k e y w o r d s :u s a r t ,s y s t e m e ,l w l p , t u n t a p 华北电力大学硕士学位论文 摘要 由于高效率软硬件协同设计的需要,硬件仿真模型开始广泛应用于软件的早期 开发中。在基于仿真平台的软件开发过程中,一些软件需要使用到物理设备( 如串 口、网卡等串行设备) 进行通信或者进行早期测试验证,此时仿真环境需要能够通 过本地物理设备通信来满足需求。 本课题的主要研究内容是l i n u x 下串行设备功能模型与物理设备互操作方法。 在本论文中提出了串口、网卡功能模型与物理设备互操作的方法,加以实现,并搭 建了嵌入式钡0 试平台,对互操作方法进行正确性验证。 关键词:串口,y s t e m c ,l w i p ,t u n t a p a b s t r a c t h a r d w a r es i m u l a t i o nm o d e l sw i d e l yu s e di nt h ee a r l yd e v e l o p m e n to ft h e s o f t w a rb e c a u s eo fh i g he f f i c i e n c yo fh a r d w a r ea n dr e q u i r eo fs o f t w a r ec o d e s i g n i n t h es o f t w a r ed e v e l o p m e n tb a s e do ns i m u l a t i o np l a t f o r m ,s o m es o f t w a r en e e dt ou s e p h y s i c a ld e v i c e s ( s u c ha ss e r i a lp o r t s ,n i ce t c ) f o rc o m m u n i c a t i o n s ,o re a r l yt e s t s o s i m u l a t i o ne n v i r o n m e n ts h o u l db ea b l et oc o m m u n i c a t et h r o u g hl o c a l p h y s i c a l e q u i p m e n tt om e e tt h ed e m a n d t h em a i nt o p i co ft h i sp a p e ra r e :r e s e a r c ho fi n t e r a c t i v eo p e r a t i o nm e t h o d b e t w e e ns e r i a lp h y s i c a ld e v i c ea n df u n c t i o nm o d e lu n d e rl i n u x t h i sp a p e rm a i n l y p u tf o r w a r dai n t e r a c t i v eo p e r a t i o nm e t h o db e t w e e ns e r i a lp o r t s ,n i cf u n c t i o nm o d e l a n dp h y s i c a ld e v i c e ,a n da c h i e v e d t h e nt h ep a p e rs t r u c t u r e dae m b e d d e dt e s t p l a t f o r mt ov e r i f ya c c u r a c yo fi n t e r a c t i v eo p e r a t i o nm e t h o d l i a n gx u e h o n g ( c o m p u t e ra p p l i c a t i o nt e c h n o l o g y ) d i r e c t e db yp r o f s h a oz u o z h i k e y w o r d s :u s a r t ,s y s t e m e ,l w l p , t u n t a p 声明尸明 本人郑重声明:此处所提交的硕士学位论文串行物理设备与功能模型互操作 方法的研究,是本人在华北电力大学攻读硕士学位期间,在导师指导下进行的研 究工作和取得的研究成果。据本人所知,除了文中特别加以标注和致谢之处外,论 文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得华北电力大学或 其他教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的 任何贡献均已在论文中作了明确的说明并表示了谢意。 学位论文作者签名:驻! 查焦 e l 期:7 位爱、主。“ 关于学位论文使用授权的说明 本人完全了解华北电力大学有关保留、使用学位论文的规定,即:学校有权 保管、并向有关部门送交学位论文的原件与复印件;学校可以采用影印、缩印或 其它复制手段复制并保存学位论文;学校可允许学位论文被查阅或借阅;学校 可以学术交流为目的,复制赠送和交换学位论文;同意学校可以用不同方式在不 同媒体上发表、传播学位论文的全部或部分内容。 ( 涉密的学位论文在解密后遵守此规定) 作者签名:邋 日 期:1 趟:圣) 导师签名:丑让 导师签名:埋竺臣叁一 日 期:弓田么殳2 石 t 华北电力大学硕士学位论文 1 1 研究背景及意义 第一章引言 随着i c ( 集成电路) 技术的迅猛发展,s o c ( s y s t e m co nc h i p ) 已经成为当今 集成电路设计的发展方向【l 】。一般来说,一个集成电路开发的四个步骤是设计、制 造、封装、和测试。应用的需求和集成电路工艺的发展促进了复杂的片上系统( s o c ) 的制造实现,同时也要求新的设计方法以支持复杂s o c 的设计。 “s o c 设计是a s i c ( a p p l i c a t i o ns p e c i f i ci n t e g r a t e dc i r c u i t s ) 设计方法学中的新 技术,是指以嵌入式系统为核心,以i p 复用技术为基础,集软、硬件于一体,并追 求产品系统最大包容的集成芯片设计。狭义上,指在一个芯片上实现信号采集、转 换、存储、处理和i 0 等功能,包含嵌入软件及整个系统的全部内容;广义上,指 一种芯片设计技术,可以实现从确定系统功能开始,到软硬件划分,并完成设计的 整个过程【2 1 。 由于高效率的软硬件协同设计在设计初期需要对整个s o c 进行高层次的抽象以 提供更快的仿真速度及更高效率的s o c 早期设计验证方法,所以s o c 系统级设计正 广泛被提及p 】。 系统级设计方法是s o c 设计方法中的一种,它可以划分为行为和结构两个层面 来深化设计。行为规定了系统实现的目标,而结构则说明如何实现这个目标,结构 包括软件和硬件。将行为映射到结构就组成了一个完整的系统。映射之后,一部分 系统功能( 行为) 用软件实现,一部分系统功能用硬件实现。这就是软硬件协同设 计所要处理的问题【4 】。 以前在软件开发中,依赖于硬件的部分通常要等到样机加工好后才能调试,这 样的验证流程不够顺畅,使得软件的完整验证只能在系统设计周期的后端进行,此 时发现的设计错误通常要花费较高的修改代价,特别是那些牵涉到软硬件划分等系 统层次的问题,对于更复杂或运算量非常大的系统,验证的速度尤其是软硬件联合 仿真的速度太慢,难以进行有效的验证【5 】。 在嵌入式系统软件开发过程中,由于嵌入式系统本身资源有限,如内存资源非 常有限,在开发过程中嵌入式系统本身没有显示终端等工具,应用程序的开发和调 试有很多困难,因此在嵌入式硬件设备之上开发应用程序存在着一些问题。同时, 在嵌入式硬件系统的设计开发中,一旦在底层硬件的实现以后发现设计问题,例如 需要增减某些功能,势必将造成硬件重新制造,使开发成本增加,而如果是用软件 实现的硬件模型,则易于修改删减,能够节约开发成本。 华北电力大学硕士学位论文 也有一部分软件在开发过程中需要使用到串行口、网卡类似的设备进行通信或 者软件要求在多种异构的环境下测试,而此时硬件尚未完成或硬件单一,并且相当 的昂贵,这给应用软件的开发带来困难。 使用系统级设计并选取适当的描述语言对硬件进行建模,建立一个可以进行软 硬件协同设计和验证的公共平台,就可以解决上述问题。这使得软件的验证可以在 早期进行,及时发现问题,使得软硬件协同设计高效率的进行,缩短开发周期,节 省各种资源。 目前,系统级设计正被广泛的用于嵌入式开发中。在目前的嵌入式系统开发过 程中,采用系统级设计方法完成嵌入式系统的仿真模型,为软件的开发和验证提供 一个仿真环境,常被用来代替真正的硬件系统进行软硬件开发调试,从而较早地发 现、纠正程序中的错误,大大缩短开发周期。 软件开发工程师对硬件进行系统级设计并建模,建立一个仿真环境,以至于开 发的软件在真正的硬件产品上和虚拟环境中运行没有任何不同。当二进制代码在这 个完全可控、虚拟的环境中运行的时候,开发人员为了发现和标识错误可以在开发 周期做任何必要的测试,节省了时间和资金。开发人员甚至可以一次又一次的仿真 硬件组件的破坏性错误来确保系统按计划好的方式工作。这种严格的测试在昂贵、 物理的硬件上几乎是不可能的。 在设计初期,采用系统级设计的仿真模型的建模多采用系统建模应用类型中的 功能模型。其中的纯功能模型不需要任何时钟,建模所消耗的时间和仿真、验证的 时间比较短,是最高抽象程度的仿真。这种模型力求实现高层次上的抽象,满足较 快的仿真速度。选用纯功能模型对嵌入式系统的建模,必然能够加快开发的速度, 提高生产率。 由于纯功能模型本身的优势,故而对嵌入式系统的建模通过功能模型将缩短嵌 入式系统的开发时间,在实际应用中具有良好的前景。 目前,在基于嵌入式系统仿真模型的嵌入式软件开发过程中,有些软件的开发 需要使得功能模型之间通过串口或网卡通信来完成软件的功能或对软件进行测试。 比如,需要开发一款具有网络传输功能的嵌入式软件,该软件需要能够通过 i n t e r n e t 进行数据传输,那么运行在本地机上的模型需要能够通过本地机的网卡连 接到i n t e r n e t 上,此时功能模型与物理设备的互操作方法的研究成为必要。 当进行软件测试时,若采取运行在一台本地机上的两个模型之间通信,模型之 间通信复杂且慢,并且系统需要对两个模型分别建立运行环境,增加了系统的开销, 而且操作起来不方便。而且仅仅只是模型与模型之间进行通信来进行测试验证,极 有可能由于测试不够真实全面,而导致无法发现软件中隐藏的问题。但是如果运行 在本地p c 机上的功能模型与另一台p c 机上运行的功能模型之间通信则将虚拟设备 之间的通信转换为虚拟设备与物理设备之间的通信,大大提高了通信速率,系统开 2 华北电力大学硕士学位论文 销也比较小,而且使得测试比较全面。此时功能模型与物理设备之间通信的研究也 是必需的,所以本课题的主要研究内容为功能模型与物理设备互操作方法。 在目前的嵌入式系统开发中,由于多数嵌入式平台没有显示终端,所以需要将 显示输出通过串口显示,或者需要通过串e l 网卡将应用程序下载到开发板上运行, 所以在嵌入式开发板上串口是必需的,而且越来越多的开发板上也扩展了网卡,并 且由于设备之间通信方式分为并行通信和串行通信,串行通信较并行通信协议简 单,例如u s a r t 、网卡、u s b 等。因为过去没有进行这方面的研究,并且u s b 相 对比较复杂,故而先从通信协议、方式比较简单的串行通信u s a r t 、网卡做起。所 以本课题选用串口网卡进行功能模型与物理设备互操作方法的研究。 本课题的主要任务是就是研究u s a r t 、网卡功能模型与物理设备的互操作方法, 如图1 1 所示,以串口为例来说,使得功能模型能通过串口模型能与本地机的串口 通信,再由本地机串口设备与另一台本地机的串口设备通信,完成数据的发送接收。 做法是研究出u s a r t 功能模型和物理设备的通信的算法方案,选用硬件描述语言 s y s t e m c 写出模型及测试平台的纯功能模型,实现研究出的算法,并进行算法的验 证。对于网卡也是同样的做法。 本地p c 机 本地p c 机 嵌入 串 物物 串 嵌入式 式 口 理理 口 平台 网 审 串平台功 功能 卡 口 口 网 能模型 模 | 卡 模型 网网 模 型型 卡卡 1 2 国内外研究现状 图1 - 1 互操作示意图 本论文中使用s y s t e m c 作为描述语言,这是一种完成电子系统从软件到硬件的 全部建模过程的语言。与v h d l v e r i l o gh d l 相比,其在系统设计方面的优势明显 【6 】 o s y s t e m c 的最近的版本是2 1 ,据i e e e 称,s y s t e m c2 1 将硬件和软件建模功能 拓宽至更高抽象级。它令工程师从头建造整个系统,从而加快设计,允许共享并复 用知识产权。除了从软硬件的概念到实现扩展了设计和验证之外,i e e e 表示, 3 华北电力大学硕士学位论文 s y s t c m c2 1 还提供了可互用的建模平台,用于开发并交换快速系统级c + + 模型。它 还构筑了一条结构设计和寄存器传输级( r t l ) 实现之间的桥梁,为在丰富设计环 境内创建可互用工具提供了平台【7 j 。 目前许多e d a 厂商都在开发或者扩展设计工具以支持s y s t e m c 。现在已经推出 的商用s y s t e m c 软件有c c s s 、s p w 、s y s t c m ca r t 等五十多种。由于开发工具的 不断推出,s y s t e m c 在国外已经十分流行。目前已经有国内外一些大公司利用 s y s t e m c 开发项目成功的案例。在深圳清华大学研究院e d a 与网络应用重点实验室 使用s y s t c m c 开发的数字音频芯片的流片也是使用s y s t c m c 开发成功的案例之一。 很多著名公司西门子、a l c a t c l 、富士通、中国的东方通信、大唐飞利浦等开始使用 s y s t c m c 作为其系统级开发语言。 同时仿真模型的概念也不断受到人们的关注。例如美国的系统模拟技术供应商 v i r t u t e c h 推出了商用软件s i m i e s ,该软件可以用来提供软件模拟环境,用户可以使 用这个模拟模型来测试和评估芯片。 s i m i e s 是目前领先的完全系统模拟器,可运行于w i n ,l i n u x ,s o l a r i s 平台下的 虚拟机软件,支持x 8 6 ,x 8 6 6 4 ,p o w c r p c ,a l p h a 等许多种平台,s i m i c s 也能够仿 真电子设备和系统的复杂的网络,甚至能仿真应用不同公司的设备构成的不同种类 的网络。 s i m i e s 构建的虚拟模型实现了模型与物理设备的通信。例如:s i m i c s 允许s i m i c s 网络组件模型( 例如路由器) 可以跟真实的网络通信。从仿真环境发送出的数据包 或者经过经过地址译码,从仿真器运行的本地机的网络端口发送出去,类似的,数 据包到达另一台本地机的网络接口,经过过滤,或者还有地址译码,出现在了仿真 器内的网络接口,触发了一个中断并且像在正常的网络流通中一样被设备驱动程序 处理【引。 类似的商业软件还有v m w a r e 公司发布的v m w a r c 9 1 ,开源软件有b o c h s 1 0 】( 一 个x 8 6 硬件平台的模拟器) ,s k y e y e 儿】( 可配置模拟多种嵌入式开发板) ,这几款软 件都实现了硬件模型通过本地机设备与外界的通信。 1 3 本文研究主要内容 1 3 1 研究u s a r t 及网卡的工作原理、提出互操作的实现算法 课题的任务是通过研究u s a r t 网卡芯片的硬件工作原理及l i n u x 下操作系统中 驱动程序对u s a r t 网卡的操作方法,提出一种功能模型能够通过本地机的物理设 备进行通信的算法并加以实现。 4 华北电力大学硕士学位论文 1 3 2 分析并使用s y s t c m c 语言建模 实现互操作算法后,需要使用s y s t c m c 硬件描述语言进行对串口,网卡建模, 将实现的互操作方法集成到串口、网卡模型中去。所以需要在建模前学习研究 s y s t c m c 的使用。 s y s t e m c 本质上是c + + 基础上添加的硬件扩展库和仿真核。一方面可以把它 看作是与v h d l 或v c d l o g 类似的硬件语言,另一方面可以把它看作纯粹的c + + 程序,只是拥有类似h d l 的类库支持。这使得s y s t c m c 可以建模不同抽象级别的 包括软件和硬件的复杂电子系统。它既可以提供纯功能模型和系统体系结构,也可 以描述软硬件的具体实现【l 引。 为了更好地进行s o c 建模,需要对s y s t c m c 的源代码有一定的了解。由于纯功 能模型不带有任何时钟,所以对s y s t c m c 事件触发,接口方法调用实现部分的了解 将有助于纯功能模型的构造。由于s y s t c m c 是基于面向对象的语言,所以将使用面 向对象的分析和设计方法,将s y s t e m c 的设计过程再现。 1 3 3 利用s y s t e m c 构建测试平台完成互操作方法的正确性验证 本论文的最终的目的是完成互操作方法的研究,加以实现,然后进行正确性验 证,并完成统一接口的定义。而在网卡互操作方法的验证过程中由于涉及到网络应 用,需要移植协议栈进行测试,故而需要操作系统的支持。由于测试过程中需要运 行操作系统,所以需要搭建嵌入式平台仿真模型进行正确性验证。该模型力求实现 高层次上的抽象,这里使用了面向对象的设计方法设计模型。 5 华北电力大学硕士学位论文 第二章互操作方法的设计、实现及统一接口的定义 2 1 串口互操作方法设计思想与具体实现 2 1 1u s a r t 互操作方法的实现思想 操作系统的设备驱动程序能够对物理设备直接进行操作,但是由于模型运行在 用户态,而设备的驱动运行在核心态,所以用户不能够直接调用设备驱动来对物理 设备进行操作,故而需要考虑其他方法来实现互操作。 l i n u x 共支持三类硬件设备:字符设备、块设备和网络设备【l3 1 。字符设备是指无 须缓存直接按字节读写的设备,块设备是以块为单位进行读写,能够进行随机访问。 网络设备在l i n u x 里做专门的处理,它没有映射到文件系统的设备节点,对它的访问 采用s o c k e t 机制实现。字符设备与块设备的主要区别是:在对字符设备发出读写请 求时,实际的硬件i o 一般紧接着发生。块设备则不然,它利用一块系统内存作缓冲 区来进行实际的i o 操作【1 4 1 。 l i n u x 系统采用设备文件统一管理硬件i o 设备,设备文件是用来代表物理设备 的,从而将硬件设备的特性及管理细节对用户隐藏起来,实现用户程序与设备无关 性。 对于字符设备和块设备,用户是通过文件系统与设备接口的,所有设备都作为 特别文件,从而在管理上就具有一些共性。 ( 1 ) 通过文件系统名字( 或“节点) 可以访问设备,每个设备都对应文件系 统中的一个索引节点,都有一个文件名,例如d e v t t y l 。在l i n u x 的文件系统中,可 以找到( 或者使用m k n o d 仓o 建) 设备对应的文件名,称这种文件为设备文件。对于 设备文件的输入输出( i o ) 操作,系统会调用相应的设备驱动程序。习惯上,这 些设备文件存在于系统的d e v 目录。设备的文件名一般由两部分构成,第一部分是 主设备号,第二部分是次设备号。 主设备号代表设备的类型,可以唯一地确定设备的驱动程序和界面,l i n u x 系统 利用主设备号来联系驱动程序和设备文件节点的( 而不是设备文件的路径) ,在同 一个系统中,一类设备的主设备号是唯一的,如h d 表示i d e 硬盘,s d 表示s c s i 硬盘, t t y 表示终端设备等;次设备号代表同类设备中的序号,内核的其他部分不是用它, 只由设备驱动使用,仅将它传递给驱动程序。一个驱动程序控制若干个设备并不为 奇,此设备号提供了一种区分它们的方法。如h d a 表示i d e 主硬盘,h d b 表示i d e 从硬 盘等。 6 华北电力大学硕士学位论文 ( 2 ) 应用程序通常可以通过系统调用o p e n ( ) 打开设备文件,建立起与目标设备 的连接。对设备的使用类似予对文件的存取。打开设备文件以后,就可以通过r e a d 、 w r i t e 、i o c f l 等文件操作对目标设备进行操作。设备的驱动程序中通常会实现o p e n , c l o s e ,r e a d ,w r i t e 这些系统调用。 ( 3 ) 设备驱动程序都是系统内核的一部分,它们必须为系统内核或它们的子系 统提供一个标准的接口。例如,一个终端驱动程序必须为l i n u x 内核提供一个文件i 0 接口;一个s c s i 设备驱动程序应该为s c s i 子系统提供一个s c s i 设备接口,同时s c s i 子系统也应为内核提供文件i o 和缓冲区。设备驱动程序利用一些标准的内核服务, 如内存分配等。另外,大多数l i n u x 设备驱动程序都可以在需要时装入内核,不需要 时可以卸载l i 引。 ( 4 ) 处于应用层的进程主要通过文件描述字f d 与已打开文件的f i l e 结构相联系。 在文件系统层,按照文件系统的操作规则对该文件进行相应处理。 在本论文的互操作方法中,采用了上述原则对设备文件进行操作和访问。当访 问课题中研究的串口设备文件( 即进行i 0 操作) 时,共有三种模型可以实现i 0 操 作,分别为:阻塞型i o 、非阻塞型i 0 和复用型i 0 t 1 6 】。 阻塞型i 0 ,顾名思义,它以阻塞方式操作1 7 0 。若一个进程以阻塞方式调用r e a d 函数读取串口数据,则该进程会通过调用i n t e r r u p t i b l e ) 函数让用户进程一s l e e po n ( 直睡眠在r e a d 系统调用上。此时系统内核会一直等待数据,直到串口有数据到达为 止。当串口数据预备好后,内核就把数据从内核拷贝至用户空间;而当数据拷贝完 成后,才唤醒串口读取进程,通知它读取数据。 在非阻塞1 7 0 模型下,i 0 操作是即时完成的。当进程调用r e a d w r i t e 函数时,设置 了0n o n b l o c k 标志,那么即使串口没有数据可读写,函数也会立即返回。此时 其返回值为e a g a i n ,表明串口数据未就绪。通常轮询i 0 的方法就是采用这种模型 来读写串口数据的,用此方法,相当于系统不断地对接收或者发送操作的执行结果 进行探测,直到把数据发出去或者接收完成定量的数据,才退出此轮询循环。对于 接收与发送不确定哪个时刻会到达的情况,即随机性比较高的读写操作,采用轮询 方法会造成c p u 资源浪费。如果轮询频率过低,则会使系统少接收一部分数据或接 收过慢:反之,则接收方会因为等待太久而不能接收更多新的数据。轮询频率过高 的情况,会让c p u 过度频繁地查询串口状态,造成过多的耗用c p u 执行周期,降低 其利用率。 由于本课题中需要实现对多个设备进行i 0 操作,而在面向较复杂、需要处理多 个i 0 的系统时,这两种模型存在着不足之处。在本课题中,应用进程中需要对串口 及网卡两个i 0 设备进行监听,当某个设备可读或可写时,进程能马上得知,并进行 相关处理。这时若采用阻塞方式操作i 0 ,则进程会阻塞在某个设备的i 0 读写操作 上而不能适用于这种情况;若采用非阻塞方式,则往往需要定时或循环地探测所有 7 华北电力大学硕士学位论文 设备,才作相应处理,这种作法相当耗费系统中央处理器的执行周期。可见,上述 的两个i o 模型都不能满足本课题的应用。 鉴于阻塞型i o 、非阻塞型i o 的这些特点,在本课题中采用复用型i o 模型来操 作i o 设备。 所谓i o 复用,是指当一个或多个i o 条件( 可读、能写或出现异常) 满足时,进 程能立即知道,从而正确并高效地对它们进行处理。系统提供s e l e c t 函数,用来支持 f o 复用的实现。若使用s e l e c t 的系统调用来查询是否有数据可读时,进程是在等待 多个i o 描述接口的任一个变为可读,但此期间并不阻塞进程。当有数据来到时,返 回可读条件,并通知进程再次进行系统调用准备读取相应的i o 数据。此时内核就开 始拷贝准备好的数据至用户空间,并返回进程处理数据。在这个处理过程中,使用 了两次系统调用来达到读取数据的目的。虽然两次系统调用的开销似乎更大,但它 的最大好处在于能同时等待多个描述符准备好。因此s e l e c t 调用功能更多地是借助了 内核来监听i o 设备描述符的。 s e l e c t 的函数定义于 中,原型如下。 i n ts e l e c t ( i n tn ,f d s e t r e a d f d s ,f d s e t 誊w r i t e f d s ,f d s e t 宰e x c e p t f d s ,s t r u c tt i m e v a l 霉t i m e o u t ) ; 该函数允许进程指示内核等待多个事件中的任一个发生,并仅在一个或多个事 件发生或经过某指定的时间后才唤醒进程。 与频繁调用非阻塞读写函数来轮询监听i o 的方法相比,s e l e c t 调用允许用户把进 程本身挂起来,同时使系统内核监听所要求的一组文件描述符的任何活动。只要确 认在任何被监控的文件描述符上出现活动,s e l e c t 调用将返回指示该设备文件已经准 备好的信息。这样就使进程能相对实时地监测到i o 设备上随机的变化,而不必由进 程本身去探测输入数据是否准备好。在应用中,通常先调用s e l e c t 查看哪个i o 设备 可读写。如果没有可读写的设备,并且没有设置超时返回功能,那么进程将阻塞 在s e l e c t 调用上;如果有,贝l j s e l e c t 函数返回,紧接着可通过r e a d w r i t e 读写i o 设备。 所以s e l e c t 机制能充分利用系统时间。本课题中采用了i o 复用的方式实现对多个设 备文件进行监听的情况。 2 1 2u s a r t 互操作方法的具体实现 在u s a r t 的互操作方法的具体实现中,主要采用了2 1 1 中介绍的l i n u x 下对设备 文件的操作方法和i o 复用模型。实现功能模型与物理设备互操作,即实现功能模型 通过物理设备来接收发送数据。在收发数据前需要先打开串口设备文件,获得一个 跟打开的串口文件相关联的句柄,并对串口设备进行些属性设置。 l i n u x 操作系统下串口等通信资源是作为串行通信终端设备t t y s x x 实现的,包括 8 华北电力大学硕士学位论文 标准p c 串口( c o m i c o m 4 ) 。在本课题中使用的c o m l ,对应的设备文件为t t y s o 。 需要注意到是在l i n u x 中设备文件通常是不能被普通用户访问的。工作的范围包 括改变有问题的文件的访问权限,以超级用户的身份运行程序,或将应用程序设置 为u s e r i d ,使它像设备文件所有者的程序一样运行。 假设串口文件对所有的用户都是可访问的,由于串1 2 1 设备为标准的字符设备, 在l i n u x 下可以使用o p e n ( ) 系统调用函数来打开串口。本课题中实现的互操作方法中 打开串口操作的流程图如图2 1 所示。 图2 - 1 串口打开流程图 打开设备文件时除了读写模式外,还使用了两个其他的标记。 f d o p e n ( d e v t t y m l ,o _ r d w rl 0 一n o c t t y lo _ n o n b l o c k ) 1 7 1 ; o _ n o c t t y 标记告诉l i n u x 操作系统,这个程序并不想成为那个端口的“控制终 端 ,如果不指定,设备文件将属于这个程序,并且任何输入( 例如键盘中止信号 之类的) 将影响该进程。如果0n o n b l o c k 标记被设置,文件描述符将不被阻塞 而被直接返回替代【1 8 】。一个例子是打开t t y ,如果用户不在终端调用里输入任何东西, 9 华北电力大学硕士学位论文 r e a d 将被阻塞,直到用户有输入, on o n b l o c k 标记被设置,r e a d 调用将直接返 回设置到e a g a i n 的值。 当打开串口设备文件后,在进行收发数据前,可以对串口进行属性设置。为了 能够改变一些参数,例如波特率、字符数目等,支持p o s i x ( p o r t a b l eo p e r a t i n gs y s t e m i n t e r f a c e 可移植操作系统接口) 终端( 串行) 接口,需要包含文件 。这 个文件中定义了终端控制结构,也定义了p o s i x 控制函数。两个最重要的函数是 t c g e t a t t r 和t c s e t a t t r ,分别用于获得和设置终端属性【1 9 1 。 主要是设定结构体t e r m i o s 各成员的值,如表2 1 所示。基本设置包括:波特率、 数据位、校验位、停止位、输入和输出模式等。一般在设置时,先获取系统已有的 串口属性,并在它的基础上进行修改。另外,设置时要用到系统预定义的宏。 表2 1 t e r m i o s 结构成员 成员描述 cc f l a g控制项 e _ l f l a g线路项 c _ i f l a g 输入项 e _ o f l a g输出项 cc c控制字符 c _ i s p e e d输入波特( 新接口) c _ o s p e e d输出波特( 新接口) 根据用户要设置的属性,设置t e r m i o sn e w 中相应的成员变量,然后就可以调用 t c s e t a t t r ( f d ,t c s a n o w , & t e r m i o sn e w ) 来完成对串行口的设置。 当打开并设置串口设备后,用户即可在功能模型接收来自物理串口设备的数据 或将数据通过物理串口发送到其他p c 机上,这是互操作方法中研究的重点。这里采 用了i o 复用模型来监听是否有串口设备文件是否数据可读或可写。 为了完成收发数据而实现的与物理设备互操作方法中使用r e a d ( ) 和w r i t e ( ) 系统 调用。比如在实现的接收来自物理设备数据时,接收函数会使用s e l e c t 查看该设备是 否可读,如果没有数据可读,那么该进程将被阻塞,直到有数据可读,此时该进程 被唤醒,根据该串口文件的句柄,调用r e a d ( ) 将数据读到用户的数据接收缓冲区。 课题中实现的互操作方法中通过物理设备发送数据,当需要发送大量数据时, 可以将数据分多次发送,避免由于溢出丢失数据。 i n t 3 2w r i t e c o m p o r t ( c h a r d a t a ,i n t 3 2d a t a l e n g t h ) i n t 3 2 r e t v a l ,l e n = 0 ,t o t a ll e n = o ; 1 0 华北电力大学硕士学位论文 f d z e r o ( & f s _ w r i t e ) ; f d s e t ( f a ,& f s _ w r i t e ) ; f o r ( t o t a l _ l e n ;0 ,l e n = 0 ;t o t a l 一1 e l l o ) t o t a l 一1 e n + = l e n ; ) ) e l s e t c f l u s h ( f d ,t c o f l u s h ) ; 掌f l u s ha l lo u t p u td a t a 幸 b r e a k ; ) ) r e t u r n ( t o t a l _ l e n ) ; ) 本课题中实现的互操作方法中通过物理设备接收数据的流程图如图2 2 所示。 在图2 2 所示流程图的实现中,使用到以下s e l e c t 相关接口。 v o i df d _ z e r o ( f d _ s e t 搴f d s e t ) ; v o i df d _ s e t ( i n tf d ,f d s e t 幸f d s e t ) ; 其中,f ds e t 表示设备文件描述符集合,f d 表示设备文件描述符。f dz e r o 函数 用于清除设备文件描述符集合所有元素。f d s e t i 函数用于把某个文件描述符添加 至文件描述符集合,这里是将串口文件描述符添加到读文件描述符的集合中。 由于串口物理设备收发数据跟模型中处理数据的速度有差异,所以在互操作的 方法中存在流控制的问题。 在接收方法中,串口物理设备接收数据包时,可能上次接收的数据还未被处理, 此时接收新的数据,极有可能将上次的数据覆盖。有两种策略可解决此问题:在接 收时,若上次的数据未取走,则动态申请缓冲区,存储数据后,将缓冲区的首地址 保存在地址队列中:采用同步的方法,每次接受的数据包处理完后,发送一个信号 给发送数据的一方,表示可以发送新的数据。由于同步的方法影响通信速度,所以 课题中选用了前一种方式进行流控制。 在用户完成数据收发,不再使用串口文件时,可关闭串口设备文件。需要注意 的是,在关闭前需设置终端控制属性为打开之前的属性值,然后根据串口文件描述 符关闭已打开的串口文件。 华北电力大学硕士学位论文 v o i dc l o s e c o m p o r t ( ) | f l u s ho u t p u td a t ab e f o r ec l o s ea n dr e s t o r eo l da t t r i b u t e t c s e t a t t r ( f d ,t c s a d r a i n ,& t e r m i o s _ o l d ) ; c l o s e ( f d ) ; p r i n t f ( ”p o r tc l o s e d ! n ”) ; ) 图2 - 2 数据接收流程图 2 2 网卡互操作方法的设计及具体实现 在嵌入式仿真环境中开发嵌入式软件时,有些软件要实现网络方面的应用,这 样无论为了实现软件的开发还是在早期验证或后期的完全测试都需要实现仿真环 境通过本地机的物理设备来进行网络通信,以完成此种需求,所以提出了网卡模型 与物理网卡互操作方法研究的需要。 1 2 华北电力大学硕士学位论文 实现仿真平台通过本地机的物理网卡的进行网络通信,可以在仿真平台的网卡 模型中进行网络编程来完成。通常的网络编程都是采用s o c k e t 编程,但是这里存在 如下问题,在嵌入式仿真环境上开发的涉及到网络应用的嵌入式应用软件多是采用 s o c k e t 编程,如果在网卡功能模型中也采用s o c k e t 编程来实现互操作,那么比如开发 款能够实现类似邱功能的网络应用程序,当数据包经过仿真环境上运行的嵌入式 操作系统协议栈的封装,进入到仿真环境的网卡模型中,然后通过物理网卡发送时, 嵌入式软件的数据包将会进入本地机的l i n u x 系统中的协议栈再进行一次数据包的 封装,这样通过本地机发送出去的数据包,如果发送的网络中的其他没有运行该仿 真环境的p c 机上时,将由于协议不对等,接收数据的p c 机无法收到正确的数据包。 反之,当仿真模型通过本地机的物理网卡接收数据时,数据报经过本地机的l i n u x 操作系统协议栈解析,然后再进入嵌入式操作系统的协议栈,两次解析将使得嵌入 式应用软件无法接收到正确的数据包。所以在网卡功能模型中不能简单的使用 s o c k e t 编程来实现模型与物理设备进行互操作,所以为了使得嵌入式应用软件能接 收正确的数据包,需要寻求其他的办法来实现互操作方法。 由于网络接口不是面向流的设备,所以网络接口不能像串口设备文件d e v t t y l 那样简单的映射到文件系统的节点上,因此也不能直接使用r e a d ,w r i t e 系统调用来 读写网络数据,而且网卡收到数据后,将直接调用协议栈函数来分析数据包,普通 用户无法截取到数据。 为了避免以上问题,本课题使用t u n t a p 虚拟设备来实现网卡模型与物理网卡 互操作方法。t u n t a p 虚拟设备为用户空间程序提供了网络数据包的发送和接收能 力【2 0 1 ,t u n 设备表示它虚拟的是点对点设备,t a p 设备表示它虚拟的是以太网设备。 这两种设备针对网络包实施不同的封装。利用t u n t a p 驱动,可以将t c p i p 协议 栈处理好的网络分包传给任何一个使用t u n t a p 驱动的进程,由进程重新处理后再 发到物理链路中【2 1 。在本课题中,选用了点对点设备即t u n 设备。 为了能够使用n t a p 驱动,用户使用的本地机操作系统中必须已经加载 t u n t a p 驱动模块,并且在d e v 目录下建立了与t u n 设备对应的文件节点。 在进行网络数据包收发之前需要打开t u n 设备文件,流程图如图2 3 所示。 打开字符设备d e v n e t t u n 后,使用i o c t l 函数配置设备属性,i o c t l 是设备驱动程序 中对设备的i o 通道进行管理的函数。所谓对i o 通道进行管理,就是对设备的一些 特性进行控制。i o c t l 函数是文件结构中的一个属性分量,就是说如果驱动程序提供 了对i o c t l 的支持,用户就可以在用户程序中使用i o c t l 函数控制设备的v

温馨提示

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

评论

0/150

提交评论