快捷搜索:  as  test

如何选择一个合适的嵌入式操作系统

选择一个相宜的嵌入式操作系统,可以斟酌以下几个身分:

第一是利用。假如你想开拓的嵌入式设备是一个和收集利用亲昵相关或者便是一个收集设备,那么你应该选择用嵌入式Linux或者uCLinux,而不是uC/OS-II。

第二是实时性。没有一个绝对的数字可以奉告你什么是硬实时,什么是软实时,他们之间的边界也是十分隐隐的,这与你选择什么样的CPU,它的主频、内存等参数有必然关系。假如你应用加入实时补丁等技巧的嵌入式Linux,如Monta Vista Linux(2.4.17版本),最坏的环境只有436微秒,而99.9%的环境是195微秒以内。斟酌到最新的Linux在实时性方面的改进,它可以得当于90~95%的各类嵌入式系统利用。当然,你假如盼望更快的实时相应,如高速A/D转换必要几个微秒以内的中断延时,可能采纳uC/OS-II是相宜的。当然,采纳像Vxworks这样传统的嵌入式操作系统也可以满意这样的强实时性要求。

Linux系统作为一个GPOS(通用操作系统)成长至今已经异常成熟靠得住了,并且因为遵照GPL协议,开放所有系统源代码,异常易于裁剪。更紧张的是,与其他开源的GPOS或RTOS比拟,Linux系统支持多种处置惩罚器、开拓板,供给多种软件开拓对象,同时Linux系统对收集和图形界面的支持异常出色。显然,选择Linux操作系统在产品的开拓周期和资源节制方面都有伟大年夜上风。

Linux支持的硬件设备种类繁多。Linux支持异常多的利用法度榜样和收集协议。Linux的扩展性很好,从小型的破费电子产品到大年夜型、粗笨的电信级互换机和路由器都可以采纳Linux。和传统的专有嵌入式操作系统不合,支配Linux不必要缴纳专利费。Linux吸引了为数浩繁的生动的开拓者,能很快支持新的硬件架构、平台和设备。越来越多的硬件和软件厂商,包括险些所有的顶级芯片制造商和自力软件开拓商,现在都支持Linux。

实时系统的范例定义如下:“所谓实时系统,便是系统中谋略结果的精确性不仅取决于谋略逻辑的精确性,还取决于孕育发生结果的光阴。假如完成光阴不相符要求,则可以说系统发生了问题。”也便是说,不管实时利用法度榜样进行的是何种义务,它不仅必要精确进行该义务而且还必须及时完成它。

人们很轻易对实时孕育发生误解,觉得实时即速率足够快,实际上,实时并不料味着速率快。实时的关键在于包管完成光阴,而不在于原始速率,由于速率机能与硬件相关,可以经由过程搭建快速硬件平台(处置惩罚器、存储器子系统等)来得到所需的机能。而实时的行径是一个软件问题,其目标是让关键的操作能够在所包管的光阴之内完成。

实时进程不会影响自己在履行情况中的调整,反而是情况影响实时利用法度榜样的调整。也便是说,实时进程平日和某个物理事故相关联,比如外围设备的中断。那么显然,影响实时的缘故原由在于中断相应延时,在Linux系统中可细分为中断延时、中断处置惩罚、调整延时。一样平常来说,针对用户对越过光阴限定所造成的影响的可吸收程度,实时又可分为软实时和硬实时。

大年夜多半人都批准软实时意味着操作有光阴限定。假如跨越了光阴限定后操作还没有完成的话,体验的质量就会下降,但不会带来致命后果。桌面事情站便是一个必要软实时功能的绝好例子。编辑文档时,你期望在按键之后立即在屏幕上看到结果。在播放MP3文件时,你期望听到没有任何杂音、爆音或中断的高品德音乐。假如这些所谓的软实时事故错过了时限,结果可能不尽如人意,并导致体验的质量有所下降,但这并不是劫难性的。

硬实时的特征是错过刻日会造成严重结果。在一个硬实时系统中,假如错过了时限,后果每每是劫难性的。当然,“劫难”是相对而言的。但假如你的嵌入式设备正在节制喷气式飞机引擎的燃料流,而它没有能够及时相应飞行员输入的敕令或操作特点的变更,致命后果就弗成避免了。

这里,我们总结一下软实时和硬实时的定义。对付软实时系统,假如错过了时限,系统的谋略值或结果会不太抱负。然而,对付硬实时系统,假如错过了某个时限,系统便是掉败的,而且可能会造成劫难性的后果。

虽然Linux系统功能强大年夜、实用性强、易于软件的二次开拓,并且供给编程职员认识的标准API。然则因为Linux系统一开始就被设计成GPOS(通用操作系统),它的目的是构建一个完备、稳定的开源操作系统,只管即便缩短系统的匀称相应光阴,前进吞吐量,重视操作系统的整体功能需求,达到更好地匀称机能。(在操作系统中,我们可以把吞吐量简单的理解为在单位光阴内系统能够处置惩罚的事故总数。)

是以在设计Linux的进程调整算法时主要斟酌的是公道性,也便是说,调整器尽可能将可用的资本匀称分配给所有必要处置惩罚器的进程,并包管每个进程都得以运行。但这个设计目标是和实时进程的需求背道而驰的,以是标准Linux并不供给强实时性。

Linux的系统进程运行分为用户态和内核态两种模式。当进程运行在用户态时,具有高的优先级的进程可以抢占进程,可以较好地完成义务;然则当进程运行在内核态时,纵然其他高优先级进程也不能抢占该进程。当进程经由过程系统调用进入内核态运行时,实时义务必须等待系统调用返回后才能得到系统资本。这和实时系统所要求的高优先级义务运行是互相抵触的。

当然,这种环境在Linux2.6版本的内核宣布以来有了显明改进,Linux2.6版本后的内核是抢占式的,这意味着进程无论在处于内核态照样用户态,都可能被抢占。Linux2.6今后的内核供给以下3种抢占模式供用户选择。

PREEMPT_NONE——没有强制性的抢占。整体的匀称延时较低,但有时也会呈现一些较长的延时。它最得当那些以整体吞吐率为重要设计准则的利用。PREEMPT_VOLUNTARY——低落延时的第一阶段。它会在内核代码的一些关键位置上放置额外的显示抢占点,以低落延时。但这因此就义整体吞吐率为价值的。PREEMPT/PREEMPT_DESKTOP——这种模式使内核在任何地方都是可抢占的,临界区除外。这种模式适用于那些必要软实时机能的利用法度榜样,比如音频和多媒体。这也因此就义整体吞吐率为价值的。

Linux在进行中断处置惩罚时都邑关闭中断,这样可以更快、更安然地完成自己的义务,然则在此时代,纵然有更高优先级的实时进程发生中断,系统也无法相应,必须等到当前中断义务处置惩罚完毕。这种状况下会导致中断延时和调整延时增大年夜,低落Linux系统的实时性。

时钟系统是谋略机的紧张组成部分,相称于全部操作系统的脉搏。系统所能供给的最小光阴距离称为时钟粒度,时钟粒度与进程相应的延迟性是正比关系,即粒度越粗拙,延迟性越长。但时钟粒度并不是越小越好,就一致硬件情况而言,较小的光阴粒度会导致系统开销增大年夜,低落整体吞吐率。在Linux2.6内核中,时钟中断发生频率范围是50~1200Hz,周期不小于0.8ms,对付必要几十微秒的相应精度的利用来说显然不满意要求。而在嵌入式Linux系统中,为了前进整体吞吐率,时钟频率一样平常设置为100HZ或250HZ。

Linux采纳虚拟内存技巧,进程可以运行在比实际空间大年夜得多的虚拟空间中。在分时系统中,虚拟内存机制异常适用,然而对付实时系统这是难以忍受的,频繁的页面换进换出会使得系统进程运行无法在规准光阴内完成。对付此问题,Linux系统供给内存定功能,以避免在实时处置惩罚中存储页被换出。

多个义务互斥地造访同一共享资本时,必要防止数据遭到破坏,系统平日采纳旌旗灯号量机制办理互斥问题。然而,在采取基于优先级调整的实时系统中,旌旗灯号量机制轻易造成优先级颠倒,即低优先级义务占用高优先级义务资本,导致高优先级义务无法运行。

虽然从2.6.12版本之后,Linux内核已经可以在较快的x86处置惩罚器上实现10毫秒以内的软实时机能。但假如想实现可猜测、可重复的微秒级的延时,使Linux系统更好地利用于嵌入式实时情况,则必要在包管Linux系统功能的根基上对其进行改造。下一节将先容经由过程实时补丁来前进Linux实时性的措施。

对Linux内核代码进行细微改动并纰谬内核作大年夜规模的更改,在遵照GPL协议的环境下,直接改动内核源代码将Linux改造成一个完全可抢占的实时系统。核心改动面向局部,不会从根本上改变Linux内核,并且一些篡改还可以经由过程Linux的模块加载来完成,即系统必要处置惩罚实时义务时加载该功能模块,不必要时动态卸载该模块。

在设置设置设备摆设摆设已经打过实时补丁的内核代码时,我们发明实时补丁添加了第4种抢占模式,称为PREEMPT_RT(实时抢占)。实时补丁在Linux内核中添加了几个紧张特点,包括应用可抢占的互斥量来替代自旋锁;除了应用preempt_disable()保护的区域以外,内核中的所有地方都开启了非志愿式抢占(involuntary preemption)功能。这种模式能够显明低落哆嗦(延时的变更),并且使那些对延时要求很高的实时利器具有可猜测的较低延时。

这种措施存在的问题是:很难百分之百包管,在任何环境下,GPOS法度榜样代码毫不会阻碍RTOS的实时行径。也便是说,经由过程改动Linux内核,难以包管实时进程的履行不会遭到非实时进程所进行的弗成猜测活动的滋扰。

实际上,双内核的设计启事在于,人们不信托标准Linux内核可以在任何环境下兑现它的实时允诺,由于GPOS内核本身就很繁杂,更多的法度榜样代码平日会导致更多的不确定性,这样将无法相符可猜测性的要求。更何况Linux内核极快的成长速率,使其会在很短的光阴内带来很大年夜的变更,直接改动Linux内核源代码的措施将难以维持同步。

双内核法是在同一硬件平台上采纳两个互相共同,合营事情的系统核心,经由过程在Linux系统的最底层增添一层实时核心来实现。此中的一个核心供给正确的实时多义务处置惩罚,另一个核心供给繁杂的非实时通用功能。

双内核办法的实质是把标准的Linux内核作为一个通俗进程在另一个内核上运行。关键的改造部分是在Linux和中断节制器之间加一其中断节制的仿真层,成为着实时内核的一部分。该中断仿真机制供给了一个标志用来记录Linux的关开中断环境。一样平常只在改动核心数据布局关键代码时才关中断,以是此中断相应很小。其优点是可以做到硬实时,并且能很方便地实现一种新的调整策略。

为方便应用,实时内核平日由一套可动态载入的模块供给,也可以像编译任何一样平常的子系统那样在Linux源码树中直接编译。常用的双内核法实时补丁有RTLinux/GPL、RTAI 和 Xenomai,此中RTLinux/GPL只容许以内核模块的形式供给实时利用;而RTAI和Xenomai支持在具有MMU保护的用户空间中履行实时法度榜样。下面,我们将对RTAI与Xenomai进行阐发。

RTAI(Real-TIme Linux ApplicaTIon interface)虽然实时机能较好,但对ARM支持不敷,更新速率极慢,造成项目开拓周期长,研发资源高。与RTAI比拟,Xenomai加倍专注于用户态下的实时性、供给多套与主流商业RTOS兼容的API以及对硬件的广泛支持,在其之上构建的利用系统能维持较高实时性,而且稳定性和兼容性更好;此外,Xenomai社区生动,紧跟主流内核更新,支持多种架构,对ARM的支持很好。

您可能还会对下面的文章感兴趣: