1. gzyueqian
      13352868059

      linux嵌入式培訓學院講解如何選擇一個合適的嵌入式操作系統(tǒng)?

      更新時間: 2018-10-10 11:30:09來源: 深圳嵌入式培訓瀏覽量:5876

          選擇一個合適的嵌入式操作系統(tǒng),可以考慮以下幾個因素:
          是應用。如果你想開發(fā)的嵌入式設備是一個和網(wǎng)絡應用密切相關或者就是一個網(wǎng)絡設備,那么你應該選擇用嵌入式Linux或者uCLinux,而不是uC/OS-II。
          第二是實時性。沒有一個的數(shù)字可以告訴你什么是硬實時,什么是軟實時,他們之間的界限也是十分模糊的,這與你選擇什么樣的CPU,它的主頻、內存等參數(shù)有一定關系。如果你使用加入實時補丁等技術的嵌入式Linux,如Monta Vista Linux(2.4.17版本),壞的情況只有436微秒,而99.9%的情況是195微秒以內。考慮到的Linux在實時性方面的改進,它可以適合于90~95%的各種嵌入式系統(tǒng)應用。當然,你如果希望更快的實時響應,如高速A/D轉換需要幾個微秒以內的中斷延時,可能采用uC/OS-II是合適的。當然,采用像Vxworks這樣傳統(tǒng)的嵌入式操作系統(tǒng)也可以滿足這樣的強實時性要求。
          為什么選擇Linux操作系統(tǒng)
          Linux系統(tǒng)作為一個GPOS(通用操作系統(tǒng))發(fā)展至今已經(jīng)非常成熟可靠了,并且由于遵循GPL協(xié)議,開放所有系統(tǒng)源代碼,非常易于裁剪。更重要的是,與其他開源的GPOS或RTOS相比,Linux系統(tǒng)支持多種處理器、開發(fā)板,提供多種軟件開發(fā)工具,同時Linux系統(tǒng)對網(wǎng)絡和圖形界面的支持非常出色。顯然,選擇Linux操作系統(tǒng)在產品的開發(fā)周期和成本控制方面都有巨大優(yōu)勢。
          憑借經(jīng)濟和技術方面的諸多優(yōu)勢,Linux正被越來越多的嵌入式設備所使用。Linux在嵌入式系統(tǒng)市場的占用率越來越高,以下是大部分產品選擇Linux系統(tǒng)的原因:
          Linux支持的硬件設備種類繁多。
          Linux支持非常多的應用程序和網(wǎng)絡協(xié)議。
          Linux的擴展性很好,從小型的消費電子產品到大型、笨重的電信級交換機和路由器都可以采用Linux。
          和傳統(tǒng)的專有嵌入式操作系統(tǒng)不同,部署Linux不需要繳納專利費。
          Linux吸引了為數(shù)眾多的活躍的開發(fā)者,能很快支持新的硬件架構、平臺和設備。
          越來越多的硬件和軟件廠商,包括幾乎所有的芯片制造商和獨立軟件開發(fā)商,現(xiàn)在都支持Linux。
          什么是實時?
          實時系統(tǒng)的典型定義如下:“所謂實時系統(tǒng),就是系統(tǒng)中計算結果的正確性不僅取決于計算邏輯的正確性,還取決于產生結果的時間。如果完成時間不符合要求,則可以說系統(tǒng)發(fā)生了問題。”也就是說,不管實時應用程序進行的是何種任務,它不僅需要正確進行該任務而且還必須及時完成它。
          人們很容易對實時產生誤解,認為實時即速度足夠快,實際上,實時并不意味著速度快。實時的關鍵在于保證完成時間,而不在于原始速度,因為速度性能與硬件相關,可以通過搭建快速硬件平臺(處理器、存儲器子系統(tǒng)等)來獲得所需的性能。而實時的行為是一個軟件問題,其目標是讓關鍵的操作能夠在所保證的時間之內完成。
          實時進程不會影響自己在執(zhí)行環(huán)境中的調度,反而是環(huán)境影響實時應用程序的調度。也就是說,實時進程通常和某個物理事件相關聯(lián),比如外圍設備的中斷。那么顯然,影響實時的原因在于中斷響應延時,在Linux系統(tǒng)中可細分為中斷延時、中斷處理、調度延時。一般來說,針對用戶對超出時間限制所造成的影響的可接受程度,實時又可分為軟實時和硬實時。
          軟實時
          大多數(shù)人都同意軟實時意味著操作有時間限制。如果超過了時間限制后操作還沒有完成的話,體驗的質量就會下降,但不會帶來致命后果。桌面工作站就是一個需要軟實時功能的絕好例子。編輯文檔時,你期望在按鍵之后立刻在屏幕上看到結果。在播放MP3文件時,你期望聽到?jīng)]有任何雜音、爆音或中斷的高品質音樂。如果這些所謂的軟實時事件錯過了時限,結果可能不盡如人意,并導致體驗的質量有所下降,但這并不是災難性的。
          硬實時
          硬實時的特點是錯過時限會造成嚴重結果。在一個硬實時系統(tǒng)中,如果錯過了時限,后果往往是災難性的。當然,“災難”是相對而言的。但如果你的嵌入式設備正在控制噴氣式飛機引擎的燃料流,而它沒有能夠及時響應飛行員輸入的命令或操作特性的變化,致命后果就不可避免了。
          這里,我們總結一下軟實時和硬實時的定義。對于軟實時系統(tǒng),如果錯過了時限,系統(tǒng)的計算值或結果會不太理想。然而,對于硬實時系統(tǒng),如果錯過了某個時限,系統(tǒng)就是失敗的,而且可能會造成災難性的后果。
          制約標準Linux操作系統(tǒng)實時性的因素
          雖然Linux系統(tǒng)功能強大、實用性強、易于軟件的二次開發(fā),并且提供編程人員熟悉的標準API。但是由于Linux系統(tǒng)一開始就被設計成GPOS(通用操作系統(tǒng)),它的目的是構建一個完整、穩(wěn)定的開源操作系統(tǒng),盡量縮短系統(tǒng)的平均響應時間,提高吞吐量,注重操作系統(tǒng)的整體功能需求,達到更好地平均性能。(在操作系統(tǒng)中,我們可以把吞吐量簡單的理解為在單位時間內系統(tǒng)能夠處理的事件總數(shù)。)
          因此在設計Linux的進程調度算法時主要考慮的是公平性,也就是說,調度器盡可能將可用的資源平均分配給所有需要處理器的進程,并保證每個進程都得以運行。但這個設計目標是和實時進程的需求背道而馳的,所以標準Linux并不提供強實時性。
      Linux系統(tǒng)實時性不強使其在嵌入式應用中有一定的局限性,主要是受內核可搶占性、進程調度方式、中斷處理機制、時鐘粒度等幾個方面的制約,具體如下:
          (1) 進程調度
          Linux系統(tǒng)提供符合POSIX標準的調度策略,包括FIFO調度策略(SCHED_FIFO)、帶時間片輪轉的實時調度策略(SCHED_RR)和靜態(tài)優(yōu)先級搶占式調度策略(SCHED_OTHER)。Linux進程默認的調度策略為SCHED_OTHER,這種調度方式雖然可以讓進程公平地使用CPU和其它資源,但是并不能保證對時間要求嚴格或者高優(yōu)先級的進程將先于低優(yōu)先級的執(zhí)行,這將嚴重影響系統(tǒng)實時性。那么,將實時進程的調度策略設置為SCHED_FIFO 或SCHED_RR ,似乎使得Linux系統(tǒng)具備根據(jù)進程優(yōu)先級進行實時調度的能力,但問題在于,Linux系統(tǒng)在用戶態(tài)支持可搶占調度策略,而在內核態(tài)卻不完全支持搶占式調度策略。這樣運行在Linux內核態(tài)的任務(包括系統(tǒng)調用和中斷處理)是不能被其它優(yōu)先級更高的任務所搶占的,由此引起優(yōu)先級逆轉問題。
          (2) 內核搶占機制
          Linux的系統(tǒng)進程運行分為用戶態(tài)和內核態(tài)兩種模式。當進程運行在用戶態(tài)時,具有高的優(yōu)先級的進程可以搶占進程,可以較好地完成任務;但是當進程運行在內核態(tài)時,即使其他高優(yōu)先級進程也不能搶占該進程。當進程通過系統(tǒng)調用進入內核態(tài)運行時,實時任務必須等待系統(tǒng)調用返回后才能獲得系統(tǒng)資源。這和實時系統(tǒng)所要求的高優(yōu)先級任務運行是相互矛盾的。
          當然,這種情況在Linux2.6版本的內核發(fā)布以來有了顯著改進,Linux2.6版本后的內核是搶占式的,這意味著進程無論在處于內核態(tài)還是用戶態(tài),都可能被搶占。Linux2.6以后的內核提供以下3種搶占模式供用戶選擇。
          PREEMPT_NONE——沒有強制性的搶占。整體的平均延時較低,但偶爾也會出現(xiàn)一些較長的延時。它適合那些以整體吞吐率為首要設計準則的應用。
          PREEMPT_VOLUNTARY——降低延時的階段。它會在內核代碼的一些關鍵位置上放置額外的顯示搶占點,以降低延時。但這是以犧牲整體吞吐率為代價的。
          PREEMPT/PREEMPT_DESKTOP——這種模式使內核在任何地方都是可搶占的,臨界區(qū)除外。這種模式適用于那些需要軟實時性能的應用程序,比如音頻和多媒體。這也是以犧牲整體吞吐率為代價的。
          (3) 中斷屏蔽
          Linux在進行中斷處理時都會關閉中斷,這樣可以更快、更安全地完成自己的任務,但是在此期間,即使有更高優(yōu)先級的實時進程發(fā)生中斷,系統(tǒng)也無法響應,必須等到當前中斷任務處理完畢。這種狀況下會導致中斷延時和調度延時增大,降低Linux系統(tǒng)的實時性。
          (4) 時鐘粒度粗糙
          時鐘系統(tǒng)是計算機的重要組成部分,相當于整個操作系統(tǒng)的脈搏。系統(tǒng)所能提供的小時間間隔稱為時鐘粒度,時鐘粒度與進程響應的延遲性是正比關系,即粒度越粗糙,延遲性越長。但時鐘粒度并不是越小越好,就同等硬件環(huán)境而言,較小的時間粒度會導致系統(tǒng)開銷增大,降低整體吞吐率。在Linux2.6內核中,時鐘中斷發(fā)生頻率范圍是50~1200Hz,周期不小于0.8ms,對于需要幾十微秒的響應精度的應用來說顯然不滿足要求。而在嵌入式Linux系統(tǒng)中,為了提高整體吞吐率,時鐘頻率一般設置為100HZ或250HZ。
          另外,系統(tǒng)時鐘負責軟定時,當軟定時器逐漸增多時會引起定時器沖突,增加系統(tǒng)負荷。
          (5) 虛擬內存管理
          Linux采用虛擬內存技術,進程可以運行在比實際空間大得多的虛擬空間中。在分時系統(tǒng)中,虛擬內存機制非常適用,然而對于實時系統(tǒng)這是難以忍受的,頻繁的頁面換進換出會使得系統(tǒng)進程運行無法在規(guī)定時間內完成。
          對于此問題,Linux系統(tǒng)提供內存鎖定功能,以避免在實時處理中存儲頁被換出。
          (6) 共享資源的互斥訪問差異
          多個任務互斥地訪問同一共享資源時,需要防止數(shù)據(jù)遭到破壞,系統(tǒng)通常采用信號量機制解決互斥問題。然而,在采取基于優(yōu)先級調度的實時系統(tǒng)中,信號量機制容易造成優(yōu)先級倒置,即低優(yōu)先級任務占用高優(yōu)先級任務資源,導致高優(yōu)先級任務無法運行。
          雖然從2.6.12版本之后,Linux內核已經(jīng)可以在較快的x86處理器上實現(xiàn)10毫秒以內的軟實時性能。但如果想實現(xiàn)可預測、可重復的微秒級的延時,使Linux系統(tǒng)更好地應用于嵌入式實時環(huán)境,則需要在保證Linux系統(tǒng)功能的基礎上對其進行改造。下一節(jié)將介紹通過實時補丁來提高Linux實時性的方法。
          常用的實時Linux改造方案
          根據(jù)實時性系統(tǒng)要求以及Linux的特點和性能分析,對標準Linux實時性的改造存在多種方法,較為合理的兩大類方法為:
          直接修改Linux內核源代碼。
          雙內核法。
          1 直接修改Linux內核源代碼
          對Linux內核代碼進行細微修改并不對內核作大規(guī)模的變動,在遵循GPL協(xié)議的情況下,直接修改內核源代碼將Linux改造成一個完全可搶占的實時系統(tǒng)。核心修改面向局部,不會從根本上改變Linux內核,并且一些改動還可以通過Linux的模塊加載來完成,即系統(tǒng)需要處理實時任務時加載該功能模塊,不需要時動態(tài)卸載該模塊。
          目前kernel.org發(fā)布的主線內核版本還不支持硬實時。為了開啟硬實時的功能,必須對代碼打補丁。實時內核補丁是多方努力的共同成果,目的是為了降低Linux內核的延時。這個補丁有多位代碼貢獻者,目前由Ingo Molnar維護
          在配置已經(jīng)打過實時補丁的內核代碼時,我們發(fā)現(xiàn)實時補丁添加了第4種搶占模式,稱為PREEMPT_RT(實時搶占)。實時補丁在Linux內核中添加了幾個重要特性,包括使用可搶占的互斥量來替代自旋鎖;除了使用preempt_disable()保護的區(qū)域以外,內核中的所有地方都開啟了非自愿式搶占(involuntary preemption)功能。這種模式能夠顯著降低抖動(延時的變化),并且使那些對延時要求很高的實時應用具有可預測的較低延時。
          這種方法存在的問題是:很難百分之百保證,在任何情況下,GPOS程序代碼絕不會阻礙RTOS的實時行為。也就是說,通過修改Linux內核,難以保證實時進程的執(zhí)行不會遭到非實時進程所進行的不可預測活動的干擾。
          2 雙內核法
          實際上,雙內核的設計緣由在于,人們不相信標準Linux內核可以在任何情況下兌現(xiàn)它的實時承諾,因為GPOS內核本身就很復雜,更多的程序代碼通常會導致更多的不確定性,這樣將無法符合可預測性的要求。更何況Linux內核極快的發(fā)展速度,使其會在很短的時間內帶來很大的變化,直接修改Linux內核源代碼的方法將難以保持同步。
          雙內核法是在同一硬件平臺上采用兩個相互配合,共同工作的系統(tǒng)核心,通過在Linux系統(tǒng)的層增加一層實時核心來實現(xiàn)。其中的一個核心提供精確的實時多任務處理,另一個核心提供復雜的非實時通用功能。
          雙內核方法的實質是把標準的Linux內核作為一個普通進程在另一個內核上運行。關鍵的改造部分是在Linux和中斷控制器之間加一個中斷控制的仿真層,成為其實時內核的一部分。該中斷仿真機制提供了一個標志用來記錄Linux的關開中斷情況。一般只在修改核心數(shù)據(jù)結構關鍵代碼時才關中斷,所以其中斷響應很小。其優(yōu)點是可以做到硬實時,并且能很方便地實現(xiàn)一種新的調度策略。

          為方便使用,實時內核通常由一套可動態(tài)載入的模塊提供,也可以像編譯任何一般的子系統(tǒng)那樣在Linux源碼樹中直接編譯。常用的雙內核法實時補丁有RTLinux/GPL、RTAI 和 Xenomai,其中RTLinux/GPL只允許以內核模塊的形式提供實時應用;而RTAI和Xenomai支持在具有MMU保護的用戶空間中執(zhí)行實時程序。下面,我們將對RTAI與Xenomai進行分析。

          圖1. RTAI(左)和Xenomai(右)實時內核在Linux中的分層結構
          圖1所示為RTAI和Xenomai兩個實時內核分別與標準Linux內核組成雙內核系統(tǒng)是的分層結構。可以看到兩者有稍微不同的組織形式,與Xenomai讓ADEOS掌控所有的中斷源不同的是,RTAI攔截它們,使用ADEOS將那些RTAI不感興趣的中斷通知送給Linux(也就是,中斷不影響實時時序)。這樣混合過程的目的是提高性能,因為在這種情況下,如果中斷是要喚醒一個實時任務,就避免了由ADEOS管理中斷的開銷。從這里可以看出,RTAI的實時性能應該是比Xenomai要好的。
          RTAI(Real-Time Linux Application interface)雖然實時性能較好,但對ARM支持不夠,更新速度極慢,造成項目開發(fā)周期長,研發(fā)成本高。
          與RTAI相比,Xenomai更加專注于用戶態(tài)下的實時性、提供多套與主流商業(yè)RTOS兼容的API以及對硬件的廣泛支持,在其之上構建的應用系統(tǒng)能保持較高實時性,而且穩(wěn)定性和兼容性更好;此外,Xenomai社區(qū)活躍,緊跟主流內核更新,支持多種架構,對ARM的支持很好。
          Xenomai是Linux內核的一個實時開發(fā)框架。它希望無縫地集成到Linux環(huán)境中來給用戶空間應用程序提供全面的、與接口無關的硬實時性能。Xenomai是基于一個抽象實時操作系統(tǒng)核心的,可以被用來在一個通用實時操作系統(tǒng)調用的核心上,構建任意多個不同的實時接口。Xenomai項目始于2001年8月。2003年它和RTAI項目合并推出了RTAI/fusion。2005年,因為開發(fā)理念不同,RTAI/fusion項目又從RTAI中獨立出來作為Xenomai項目。相比之下,RTAI項目致力于技術上可行的延遲;Xenomai除此之外還很著重擴展性、可移植性以及可維護性。Xenomai項目將對Ingo Molnar的PREEMPT_PT實時搶占補丁提供支持,這又是與RTAI項目的一個顯著的不同。RTAI和Xenomai都有開發(fā)者社區(qū)支持,都可以作為一個VxWorks的開源替代。
          Xenomai是基于Adeos(Adaptive Domain Environment for Operating System)實現(xiàn)的,Adeos的目標是為操作系統(tǒng)提供了一個靈活的、可擴展的自適應環(huán)境;在這個環(huán)境下,多個相同或不同的操作系統(tǒng)可以共存,共享硬件資源。基于Adeos的系統(tǒng)中,每個操作系統(tǒng)都在獨立的域內運行,每個域可以有獨立的地址空間和類似于進程、虛擬內存等的軟件抽象層,而且這些資源也可以由不同的域共享。與以往傳統(tǒng)的操作系統(tǒng)共存方法不同,Adeos是在已有的操作系統(tǒng)下插入一個軟件層,通過向上層多個操作系統(tǒng)提供某些原語和機制實現(xiàn)硬件共享。應用上主要是提供了一個用于“硬件-內核”接口的納內核(超微內核),使基于Linux環(huán)境的系統(tǒng)能滿足硬實時的要求。

          Xenomai正是充分利用了Adeos技術,它的首要目標是幫助人們盡量平緩地移植那些依賴傳統(tǒng)RTOS的應用程序到GNU/Linux環(huán)境,避免全部重寫應用程序。它提供一個模擬器模擬傳統(tǒng)實時操作系統(tǒng)的API,這樣就很容易移植應用程序到GNU/Linux環(huán)境中,同時又能保持很好的實時性。Xenomai的核心技術就是使用一個實時微內核來構建這些實時API,也稱作“Skin”。Xenomai通過這種接口變種技術實現(xiàn)了針對多種傳統(tǒng)RTOS的應用編程接口,方便傳統(tǒng)RTOS應用程序向GNU/Linux的移植。圖2描述了Xenomai的這種帶Skin的分層架構。

          圖2. 帶Skin接口的Xenomai分層結構
          從圖2可以看出,Xenomai系統(tǒng)包含多個抽象層:Adeos納內核直接工作在硬件之上;位于Adeos之上的是與處理器體系結構相關的硬件抽象層(Hardware Abstraction Layer, HAL);系統(tǒng)的中心部分是運行在硬件抽象層之上的抽象的實時內核,實時內核實現(xiàn)了一系列通用RTOS的基本服務。這些基本服務可以由Xenomai的本地API(Native)或由建立在實時內核上的針對其他傳統(tǒng)RTOS的客戶API提供,如RTAI、POSIX、VxWorks、uITRON、pSOS+等。客戶API旨在兼容其所支持的傳統(tǒng)RTOS的應用程序在Xenomai上的移植,使應用程序在向Xenomai/Linux體系移植的過程中不需要完全重新改寫,此特性保證了Xenomai系統(tǒng)的穩(wěn)健性。Xenomai/Linux系統(tǒng)為用戶程序提供了用戶空間和內核空間兩種模式,前者通過系統(tǒng)調用接口實現(xiàn),后者通過實時內核實現(xiàn)。用戶空間的執(zhí)行模式保證了系統(tǒng)的可靠性和良好的軟實時性,內核空間程序則能提供的硬實時性。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲jizzjⅰzz妇女 | 日韩精品a√在线 | 午夜福利精品导航凹凸 | 伊人久久大香线蕉在观看 | 午夜热门精品一区二区 | 亚洲天堂网性爱视频 |