對嵌入式Linux進行即時性改進是嵌入式作業系統領域的一個研究熱點。本文在分析了現有嵌入式作業系統即時性不足的基礎上,提出了一種新型的改進方案(將RTAI和uClinux相結合),並給出具體的工控應用執行個體,進一步對這種系統的功能進行有效驗證。 圖1 雙核心即時系統嵌入式即時Linux架構嵌入式Linux以代碼開放、價格低廉、功能強大又易於移植的特性正在被廣泛應用,為嵌入式作業系統提供了一個極具吸引力的選擇。但許多實際應用,譬如多媒體通訊、生產過程式控制制、線上交易處理等等都要求對外來事件在限定的時間內做出反應。因而嵌入式系統即時性問題越來越受到關注,對嵌入式Linux進行即時性改進也成為嵌入式作業系統領域的一個研究熱點。 本文提出了一種基於uClinux的嵌入式即時作業系統方案。將RTAI和uClinux相結合,既滿足了嵌入式應用的需求,同時又保證了系統的硬即時性。此外,還有強大的網路功能、易升級性、易移植性等優點。最後結合基於這一作業系統開發的重大裝備遠程監控系統的應用案例,進一步從功能和效能上對其進行驗證。 現有嵌入式作業系統應用中存在的問題 一個優秀的嵌入式作業系統是嵌入式系統成功的關鍵。它除了具備一般作業系統最基本的功能,如任務調度、同步機制、中斷處理、檔案功能等,還需要具有以下特點: 1. 更好的硬體適應性,也就是良好的移植性; 2. 佔有更少的硬體資源; 3. 高可靠性; 4. 提供強大的網路功能,支援TCP/IP協議及其他協議; 5. 有些應用要求具有即時效能。 現有的嵌入式作業系統大致可分為商用型和免費型兩類:商用型作業系統由於功能穩定、可靠,有完善的支援人員和售後服務,在嵌入式市場佔有一定的份額。但它同時也存在價格昂貴、需要著作權、原始碼不公開等一系列問題;免費型作業系統(如Linux)源碼公開,有價格方面的優勢,但在嚴格滿足嵌入式即時應用需求方面還有欠缺。 圖2 即時核心實現機理RTAI對Linux的即時性改進 現有幾種針對Linux的即時系統解決方案,實現方法主要包括兩種: 1)直接修改Linux核心、增加即時性,如:Montavista; 2)在普通Linux核心之上增加即時模組、雙核心結構,如:RTLinux或RTAI。 Montavista可以滿足使用者的軟即時要求,RTLinux或RTAI著重增強Linux的硬即時特性。軟即時系統的時限是柔性靈活的,它可以容忍偶然的逾時錯誤。失敗造成的後果並不嚴重,僅僅是輕微地降低了系統的輸送量。硬即時系統有一個剛性的、不可改變的時間限制,它不允許任何超出時限的錯誤。逾時錯誤會帶來損害甚至導致系統失敗、或者導致系統不能實現它的預期目標。 RTAI採用雙核心方法,不直接使用Linux的任何功能,而是把需要高度時間精度的工作寫成一個驅動程式的形式,然後直接用PC時序晶片所產生的中斷調用這個驅動程式。RTAI與NMT RT-Linux的最大不同之處在於,它在Linux上定義了一組即時硬體抽象層(RTHAL)。RTHAL將RTAI需要在Linux中修改的部分定義成一組程式介面,RTAI只使用這組介面和Linux溝通。這樣做的好處在於,使用者可以將直接修改的Linux核心程式碼減至最小,這有可能使得將RTHAL移植到新版Linux的工作量減至最低。 但是,RTAI雖然滿足了硬即時性要求,卻沒有被裁減為足夠小且適用於嵌入式系統。 RTAI+uClinux的即時方案 uClinux是為嵌入式應用設計的,它本身並沒有更多地關注即時問題。uClinux經過小型化改造,形成了一個高度最佳化、代碼緊湊的嵌入式Linux,並保留了Linux大多數的優點。它專門針對無MMU的CPU,去除了普通Linux核心中的虛擬記憶體管理部分。更重要的是,uClinux提供了完整的TCP/IP協議棧,並支援大量其他的網路通訊協定,為嵌入式系統提供了強大的網路支援。 而從前面的分析可以看出,RTAI是基於普通Linux核心,相對於嵌入式應用其核心過於龐大;而uClinux本身並沒有更多地關注即時問題。因此,可以將RTAI和uClinux相結合,採用雙核心的設計方案,既滿足了嵌入式應用的需求,又保證了系統的硬即時性。 1.硬體抽象層 圖3 系統中斷處理流程圖系統的實現基礎是硬體抽象層,通過硬體抽象層進行硬體管理,把基本核心和即時核心結合在一起,其中一個核心的改變,不會影響另一個核心的執行。 硬體抽象層定義了本系統同硬體之間的抽象介面,主要用來截取硬體中斷,並且依據即時核心調度器的需求,重新導向為基本核心任務或是即時任務。RTHAL包含一個關鍵的組件:中斷描述符表(IDT,Interrupt Descriptor Table),它定義了一套指標用來處理中斷常式。RTHAL本身定義了一個結構,使得基本核心中斷處理函數能夠很容易地被即時處理函數所替代。這樣,當即時核心通過RTHAL啟用後,新的IDT表為合法。在以上控制下,基本核心作為即時系統的任務提供服務。 2.雙核心結構 雙核心即時系統的總體結構模型1所示,主要包含了基本核心、即時核心、硬體抽象層、硬體部分。 其中基本核心(uClinux)和即時核心(RTAI)分別處理非即時和即時任務的調度和執行,而即時任務和非即時任務之間資訊的交換要通過管道(FIFO)或共用記憶體(MBUFF)來實現。當即時任務運行時,基本核心被硬體抽象層屏蔽。即即時核心將基本核心作為優先順序最低的一個任務來運行,只有在沒有即時任務啟動並執行時候才予以調度。 3.即時核心動態載入 嵌入式即時Linux的即時核心是動態載入的。即時任務被啟用前,即時核心並沒有啟動,基本核心通過RTHAL透明訪問硬體,就像RTHAL不存在一樣。當即時任務被啟用時,RTHAL結構發生變化,基本核心被即時核心接管,圖2表明了即時核心啟動前後,系統發生的變化。 4.調度處理 當中斷到來時,即時核心判斷它是基本核心中斷還是屬於即時中斷,分別進行處理。若是基本核心中斷,如果當前有即時任務正在運行,則只是設定一下中斷標誌位,懸掛此中斷,如果沒有即時任務運行,則調用基本核心的中斷處理常式;如果此中斷是即時中斷,就直接調用相對應的即時中斷處理常式。注意,即時中斷可以搶先基本核心任務的執行。系統的中斷處理流程3所示。 應用案例 工業控制是嵌入式即時作業系統的傳統應用領域,需要嚴格的即時處理功能、高可靠性和良好的開放性,對開發環境、可操作性、成本等也有特別的要求。因此本項研究以重大裝備的遠程監控系統作為其應用之一。 1.嵌入式遠程監控系統結構 應用針對工業生產中使用的大型裝置在連續運轉狀態下的遠程監控問題,研究用於重大裝備遠程監控的嵌入式裝置。系統主要包括輸入/輸出模組(NetIO)和輸入/輸出上位模組(NetWeb),前者用於實現現場資料的採集(輸入),或用於現場裝置的控制(輸出),後者整合了Web功能,使得使用者可以通過互連網對輸入/輸出模組進行訪問。兩類別模組通過網路相串連,在本系統中為通過串列485匯流排。嵌入式遠程監控系統結構4所示。 2.NetWeb對嵌入式Linux的功能驗證 圖4 嵌入式遠程監控體繫結構NetWeb的開發基於前面介紹的嵌入式即時Linux作業系統。特殊的雙核心作業系統結構決定了應用開發的特殊性。 1)任務管理功能 系統中的任務可以分為即時性任務和非即時性任務,即時任務包括即時資料採集、處理等方面,這部分的功能要在即時核心RTAI之上進行實現;另外,非即時任務主要包括資料存放區、遠程通訊的實現,這部分功能要在基本核心uClinux之上實現。 嵌入式即時Linux將即時任務與非即時任務分開管理,實施不同的調度策略和任務間通訊方式,至於即時任務與非即時任務之間的通訊可以通過即時的FIFO或共用記憶體實現。這樣的功能使應用的編寫簡潔清晰、功能明確、調度靈活,方便了使用者。 2)網路功能 嵌入式即時Linux實現了嵌入式互連網技術,將Web伺服器引入到現場測試和控制裝置中,在相應的硬體平台和軟體系統的支援下,使傳統的測試和控制裝置轉變為具備了以TCP/IP為底層通訊協定,Web技術為核心的基於互連網的網路測試和控制裝置。 嵌入式Web與傳統Web應用相比,簡化了系統結構,將資訊採集和資訊發布都整合到現場的測控裝置中。由於有了標準的介面形式和通訊協定,內嵌於裝置的Web伺服器可以向任何接入它所在網路的合法使用者提供統一的基於瀏覽器方式的操作和控制介面,瀏覽器成了裝置的前端控制板。 3)即時性 嵌入式即時Linux是硬即時的嵌入式作業系統。當中斷到來時,若是基本核心中斷,如果當前有即時任務正在運行,則只是設定一下中斷標誌位,懸掛此中斷;如果此中斷是即時中斷,就直接調用相對應的即時中斷處理常式。這樣的調度機制可以保證遠程監控系統中即時任務在確定的時間限度內完成,為系統故障的即時預報、診斷、控制提供了強有力的支援。 此外,系統還從時間管理、記憶體管理、中斷管理、同步、互斥管理以及裝置管理等方面對這一作業系統的功能進行評估驗證。 本文小結 儘管將Linux進行嵌入式即時性改進的方案很多,但是採用RTAI+uClinux的還未見到成型的產品。這一方案既符合嵌入式系統的需求,又達到硬即時性標準,同時還有強大的網路功能、易升級性、易移植性等優點。 同時,在其上進行應用編程時即時任務(基於RTAI)和非即時任務(基於uClinux)是分開編寫的,清晰簡潔,但由於使用者需要直接在核心空間編程,從系統的安全性角度存在很大隱患。希望可以通過進一步討論研究使其更加完善。 |