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