近年來,實時操作系統在多媒體通信、在線事務處理、生產過程控制、交通控制等各個領域得到廣泛的應用,因而越來越引起人們的重視。
1.引言
從上世紀八十年代開始,開始出現各種各樣的商用嵌入式操作系統,這些操作系統大部分都是為專用或通用系統而開發,如VxWorks、Windows CE、pSOS、Palm OS、OS-9、LynxOS、QNX、LYNX 等,它們的優點是為用戶提供良好的開發環境,提高了應用系統的開發效率,運行效率高、實時性好,缺點是價格昂貴且源代碼封閉。這就不僅影響了開發者的積極性,而且使得整個產品的成本急劇上升。
結合國內實情,嵌入式系統需要的是一套高度簡練、界面友好、質量可靠、應用廣泛、易開發、多任務、價格低廉的實時操作系統。
在嵌入式產品的開發中,有必要尋找一種廉價的嵌入式實時操作系統,以降低產品的開發成本和系統復雜度。由于Linux的具備的諸多優點,對Linux進行適當的改造后作為廉價的嵌入式實時操作系統是一個值得探討的、具有實際意義的問題。
2.Linux的特點
Linux是個與生俱來的網絡操作系統,成熟而且穩定。Linux是源代碼開放軟件,不存在黑箱技術,任何人都可以修改它,或者用它開發自己的產品。 Linux系統是可以定制的,系統內核目前已經可以做得很小。一個帶有中文系統及圖形化界面的核心程序也可以做到不足1MB,而且同樣穩定。Linux作為一種可裁減的軟件平臺系統,是發展嵌入式產品的絕佳資源,遍布全球的眾多Linux愛好者又能給予Linux開發者強大的技術支持。因此,Linux作為廉價的嵌入式實時操作系統的選擇,是非常有發展前途的。
(1)與硬件芯片的緊密結合
嵌入式Linux的一大特點是:與硬件芯片(如SOC等)的緊密結合。它不是一個純軟件的Linux系統,而比一般操作系統更加接近于硬件。嵌入式Linux的進一步發展,逐步地具備了嵌入式RTOS的一切特征:實時性及與嵌入式處理器的緊密結合。
(2)開放的源代碼
嵌入式Linux的另一大特點是:代碼的開放性。代碼的開放性是與后PC時代的智能設備的多樣性相適應的。代碼的開放性主要體現在源代碼可獲得上,Linux代碼開發就像是“集市式”開發,任意選擇并按自己的意愿整合出新的產品。
對于嵌入式Linux,事實上是把BIOS層的功能實現在Linux的driver層。目前,在Linux領域,已經出現了專門為Linux操作系統定制的自由軟件的BIOS代碼,并在多款主板上實現此類的BIOS層功能。
3.RT-Linux的實現機理
在Linux內核和硬件中斷的地方,加上了一個RT-Linux內核的控制。Linux的控制信號都要先交給RT-Linux內核先進行處理。在RT-Linux內核中實現了一個虛擬中斷機制,Linux本身永遠不能屏蔽中斷,它發出的中斷屏蔽信號和打開中斷信號都修改成向RT- Linux發送一個信號。如在Linux里面使用“sti”和“cli”宏指令來屏蔽和使能中斷,是通過向x86處理器發送一個指令,而RT-Linux 修改了這些宏指令,使得只是讓RT-Linux里面的某些標記做了修改而已。對所有的中斷,分成Linux中斷和實時中斷兩類,如果RT-Linux內核收到的中斷信號是普通Linux中斷,那就設置一個標志位;如果是實時中斷,就繼續向硬件發出中斷。在RT Linux中執行sTI將中斷打開之后,那些設置了標志位表示的Linux中斷就繼續執行。因此,cli并不能禁止RT Linux內核的運行,卻可以用來中斷Linux。Linux不能中斷自己,而RT-Linux可以。
RT-Linux的設計原則:在實時內核模塊中的工作盡量少,如果能在Linux中完成而不影響實時性能的話,就盡量在Linux中完成。因此,RTLinux內核盡量做的簡單,在 RT-Linux內核中,不應該等待資源,也不需要使用共享旋轉鎖(SpinLock),實時任務和Linux進程間的通信也是非阻塞的,從來不用等待進隊列和出隊列的數據。
RT-Linux將系統和設備的初始化交給了Linux完成,對動態資源的申請和分配也交給了Linux。RT-Linux使用靜態分配的內存來完成硬實時任務,因為在沒有內存資源的時候,被阻塞的線程不可能具有硬實時能力。
4.改變Linux內核的體系結構
Linux的內核體系采用的是Monolithic,在這種體系結構中,內核的所有部分都集中在一起,而且所有的部件在一起編譯連接。這樣雖然能使系統的各部分直接溝通,有效地縮短任務之間的切換時間,提高了系統的響應速度,實時性好并提高了CPU的利用率,但在系統比較大的時候體積也比較大,與嵌入式系統容量小、資源有限的特點不符合。而另外一種內核體系結構 MicroKernel, 在內核中只包括了一些基本的內核功能如創建和刪除任務、任務調度、內存管理和中斷處理等部分,而文件系統、網絡協議棧等部分都是在用戶內存空間運行。這種結構雖然執行效率不如Monolithic內核,但大大減小了內核的體積,同時也極大地方便了整個系統的升級、維護和移植,因此更能滿足嵌入式系統的特點需要。為此,為使嵌入式Linux的應用更加廣泛,可以考慮將Linux目前的Monolithic內核結構中的部分結構改造成MicroKernel體系結構。通過這種折中辦法,可以使得到的Linux既具有很好的實時性,又能滿足嵌入式系統體積小的要求。
5.RT-Linux的編程接口(API)及編程方法示例
(1)RTLinux的編程和控制接口(API)。
通過使用RTLinux的編程和控制接口(API),可以提供對實時任務的創建和刪除、任務的調度和控制等功能。API函數主要有如下幾類:
1)中斷控制API函數;2)時鐘控制和獲取;3)線程的創建和刪除;4)POSIX方式的驅動接口;5)FIFO設備驅動程序;6)串口驅動程序的API函數;7)mbuff驅動API函數;8)浮點運算API函數。
(2) RTLinux的編程方法示例
該程序的原理是測出在RT-Linux中進行實時任務調度過程中調度需要花費時間的多少。算法如下:
/實時任務端/
對于每500個周期
等待上一個周期的任務完成
獲得當前時間和上次周期任務完成時間的差,就是調度的時間
循環
向FIFO輸出500個周期中完成的最大值和最小值。
/應用程序端/
讀取FIFO設備,獲取最大值和最小值
在屏幕上打印出來
6.開發嵌入式RT-Linux的幾個問題
(1)Linux的移植。如果Linux不支持選用的平臺,就需要把Linux內核中與硬件平臺相關的部分改寫,使之支持所選用的平臺。
(2)內核的裁剪。嵌入式產品的可用資源比較少,所以它的內核相對嵌入式系統來說就顯得有點大,需要進行剪裁到可利用的大小。
(3)桌面系統。現代的操作系統如果沒有一個友好的界面是沒有說服力的。現在的臺式機Linux系統使用了傳統的X-Window系統的模式— Client/Server結構。和硬件有關的部分即是Server端,實現一個標準的顯示接口;應用程序通過對Server的服務請求,實現程序的顯示。在此之上,實現窗口的管理功能。但X Window對于嵌入式系統來說顯得很龐大。現在國內有MiniGUI,國外有MicroWindow,都在致力于嵌入式Linux GUI的開發。適用于嵌入式Linux上的X-Window的工作也在進行。
(4)驅動程序的開發。Linux內核更新的很快,許多最新的硬件驅動很快就被支持。但嵌入式系統應用領域是多種多樣的,所選用的硬件設備也不同,并且不可能都有Linux的驅動程序,因此,設備驅動程序的開發也是重要的工作。
7.結束語
嵌入式系統的開發是剪裁與移植相結合的過程,開發者自己編寫的代碼并不多。筆者在智能交通監控系統的設計中,通過對Linux適當的剪裁,選擇了RT- linux作為系統的開發平臺,對于提高系統的開發效率和降低開發成本取得較好的實效。當然,嵌入式系統的發展對嵌入式操作系統提出了更高的要求,因此,對嵌入式操作系統的結構、設計、用戶界面等諸多方面進行深入研究,將有助于嵌入式系統的應用和發展。
linux基礎
http://www.makeru.com.cn/course/details/2058?s=156461
Linux網絡經典案例
http://www.makeru.com.cn/live/3485_1630.html?s=156461
Linux網絡高并發技術之epoll
http://www.makeru.com.cn/live/5413_1937.html?s=156461
linux之C語言內存管理
http://www.makeru.com.cn/live/1392_382.html?s=156461
Linux網絡聊天室設計
http://www.makeru.com.cn/live/1392_1099.html?s=156461
Linux開發調試技巧
http://www.makeru.com.cn/live/1392_1184.html?s=156461