實時操作系統(tǒng)到Linux系統(tǒng)的移植
Linux作為一個unix兼容的操作系統(tǒng)代表著一個更加強大的應用和系統(tǒng)編程模型。應用程序執(zhí)行在他們受保護的地址空間,因為它們之間的地址相互是不可見的,并且它們通過硬件的MMU來預防覆蓋掉他們自己的代碼,MMU出現(xiàn)在多數(shù)現(xiàn)代化的32位64位的處理器中。
當他們共享Linux內(nèi)核的虛擬地址空間時,他們不能夠覆蓋內(nèi)核代碼或數(shù)據(jù)。既然進程不能夠相互看到,他們就不能夠相互破壞數(shù)據(jù)或代碼
API和實時庫
在開源標準以前,RTOS的制作者定義了他們自己的系統(tǒng)調(diào)用或API,這對于每個RTOS的制作者來說都是獨一無二的。接口函數(shù)是為流行的編程語言而提供的,諸如c、c++,這使得API函數(shù)對于使用高級語言的程序員是合適的。
在過去的十年中,盡管只有POSIX規(guī)范的一部分和嵌入式應用程序相關(guān),大多數(shù)的RTOS制作者還是給標準的POSIX提供了兼容庫。很多客戶使用他們自己的API集使本地RTOS接口分層以獲得獨立性和便捷性,而不是想被鎖定成為一個私有的特殊版權(quán)的接口。
開發(fā)人員使用標準的API建立應用程序來獲得兩個另外的目的:允許代碼被移植成像Linux那樣的標準操作系統(tǒng)以及允許以后同樣的代碼在這樣的一個環(huán)境下比使用私有的API更加容易移植。
很多包括標準調(diào)用的商業(yè)RTOS以POSIX或者BSD來設(shè)定,但是那些API經(jīng)常只存在于windows下。特別是一個內(nèi)核私有的API是最常被使用的,就是這些API鎖定了項目到一個特殊的平臺或者解決方案。
如果開發(fā)人員正在移植標準的代碼或者考慮哪個API運用到新的代碼中,那么理解在Linux和其他操作系統(tǒng)中使用的最普遍的標準是非常重要的。
POSIX
POSIX流行在基于UNIX的開源系統(tǒng)中、政府和軍事舞臺。然而POSIX對于傳統(tǒng)的嵌入式實時系統(tǒng)幾乎沒有影響。POSIX標準家族起源于美國國家標準與技術(shù)研究所,現(xiàn)在有被歸入IEEE、IEEE1003和其他標準的預兆。在過去的十年中,POSIX經(jīng)歷了多次的修訂,最近的一次是在2000年。
兼容性和一致性是兩個關(guān)于POSIX的重要觀點。兼容性意味著一個特定的操作系統(tǒng)平臺貫徹標準的一些子集,這種貫徹是備有文件證明的。甚至那些執(zhí)行微小子集的平臺能夠兼容于POSIX標準。POSIX的一致性,相反的,代表了更加嚴格的標準,意味著一個操作系統(tǒng)服從于過去的已證明測試。
SVR4,BSD和其他UNIX的API
事實上SVR4和UNIX的BSD版本是流行的系統(tǒng)標準,這些標準對于Linux的影響是巨大的。Linux貫徹了那些UNIX API的大的子集(舉個例子,對于共享內(nèi)存、隊列、信號量、BSD套接口和TCP/IP堆的Linux的ipc系統(tǒng)調(diào)用)。
熟悉SVR4、BSD,或者像AIX,HP-UX等其他通用的UNIX的開發(fā)人員對于Linux他們也能夠很快的掌握。
c語言庫
在嵌入式設(shè)計、RTOS或其他方面,很多API僅僅是標準c庫,這些庫或者是直接執(zhí)行函數(shù)或者是作為系統(tǒng)調(diào)用的包裝。Linux有熟悉的libc/glibc,盡管尺寸很大,但易于理解。
glibc的運行時間是對嵌入式應用程序內(nèi)存尺寸的挑戰(zhàn)。很多Linux的供應商為對于尺寸敏感的應用程序提供了經(jīng)過裁減了的庫。
RTOS接口層
RTOS的核心是對于進程間通訊調(diào)用的使用,這種調(diào)用提供了在任務(wù)中同步和通訊的機制。
表1提供了在典型的RTOS進程間通訊調(diào)用和同等的Linux調(diào)用之間的映射總結(jié)。
盡管在RTOS的調(diào)用和同等的Linux調(diào)用之間的映射是直接的,但是移植的工作量會被增加,如果使用仿真庫,這種仿真庫為其他RTOS移植過來的Linux應用程序提供了同樣的調(diào)用接口。
對于Xenomai開源項目,這樣的一個仿真技術(shù)是適用的。而這里,不同的仿真層提供給POSIX、VxWorks、VRTX和Itron這些被廣泛使用的RTOS。注意,像很多開源項目,Xenomai和它的外殼是正在進行的工作,他們可能還沒有完成或者還要進行修改。不過,它代表了一個在移植過程中潛在的高價值的出發(fā)點。
舉個例子,POSIX模塊主要是用來提供PSE51兼容的API.為了幫助移植其他PSE51兼容
API的應用程序,它包含了一些對于POSIX規(guī)范的擴展。
POSIX外殼已經(jīng)包含了以下這些基本的特色:
線程
互斥量
信號量
條件變量
實時信號的支持
放棄和放棄處理
特殊線程數(shù)據(jù)
消息隊列
定時器支持
共享內(nèi)存
POSIX外殼創(chuàng)建實時線程,他們或是運行在Linux內(nèi)核模塊或者在用戶空間的周期應用程序中。
實時內(nèi)核的API允許內(nèi)核和用戶空間的編程。開發(fā)人員通常更喜歡在用戶空間編程,因為他們之間的延遲小,特別是在硬件上,MMU的切換開銷很小。目前為止在用戶空間編程比直接從內(nèi)核空間運行應用程序更為容易。在用戶空間編程帶來了內(nèi)存保護和在這個環(huán)境中調(diào)試實時應用程序的GNU調(diào)試器的支持。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)電磁爐相關(guān)文章:電磁爐原理
評論