一直想介紹下QNX,因為其框架對其他微內核有很多可借鑒的地方,但是其是一個商業系統,不開源,只能看到部分的軟件接口,在其上進行開發。
我們的老一套:代碼下載、編譯、運行是搞不了了,真是讓人頭大啊! 一些重要的東西先放這里:
1)QNX的開源代碼:https://github.com/vocho/openqnx
2)QNX的框架文檔: http://myqnx.com/developers/docs/6.3.0SP3/momentics/bookset.html
1.簡介
1.1 歷史
1980年,加拿大滑鐵盧大學的學生戈登貝爾(Gordon Bell)和丹道奇(Dan Dodge)都上了實時操作系統設計的課程,課程要求學生構建一個基本的實時微內核,并成立了 Quantum Software Systems 公司。
1982年,戈登貝爾(GordonBell)和丹道奇(Dan Dodge)根據大學時代的一些設想寫出了一個能在 IBM PC 上運行的名叫 QUNIX(Quick UNIX)的系統,直到 AT&T 發律師函過來才把名字改成 QNX。
2004年,來自美國的音響設備制造商哈曼(Harman)國際工業集團以 1.38 億美元的現金收購了 QNX。
2010年,黑莓手機(BlackBerry)制造商 RIM(Research In Motion Ltd.)為獲取其車載無線連接技術,收購哈曼集團旗下的 QNX 軟件公司,QNX 因此重返加拿大。
QNX 主要開發汽車,通訊設備所使用的操作系統,哈曼國際的主業則是汽車音像和娛樂設備。BlackBerry 的并購交易使得 RIM、QNX 和哈曼工業在智能手機和車載音頻娛樂系統之間找到合作空間。
1.2 應用場景
QNX 具有安全、可靠、可信的特點,因此通常應用于對安全性要求極高的領域,例如汽車、航空、核電站、工業自動化等領域。
carOS:QNX 一直是汽車領域最大的操作系統
robotOS:工業和醫療領域,例如手術機器人達芬奇
weaponOS:例如洛克希德·馬丁的武器
criticalTaskOS:核電站、宇航領域
QNX Neutrino實時操作系統,QNX Momentics工具套件和QNX Aviage中間件系列基于組件的架構共同構成業界可靠性和延展性最強的架構,幫助建立高性能的嵌入式系統。包括思科、戴姆勒、通用電氣、洛克希德·馬丁和西門子在內的眾多全球知名技術領先企業,都將QNX技術應用在網絡路由器、車載遠程信息處理和信息娛樂系統、工業控制系統、醫療設備、安全防衛系統和其他任務關鍵性和生命關鍵型應用中。
上面提到工具套件,就知道界面化的東西,核心代碼是看不到的,我們學習到的源碼內容和知識也有限了。
2. 特點
QNX是一個分布式、可擴展、遵從POSIX規范的類Unix硬實時微內核操作系統。
QNX為微內核的架構,微內核只提供進程調度、進程間通信、底層網絡通信和中斷處理四種服務。驅動程序、協議棧、文件系統、應用程序等都在微內核之外內存受保護的安全的用戶空間內運行,組件之間能避免相互影響,在遇到故障時也能重啟。
QNX是商業類Unix實時操作系統,主要針對嵌入式系統市場。它提供用戶可控制的、優先級驅動的、急者優先搶占的調度方式。QNX 內核自身開銷小、上下文切換快,在同樣的硬件條件下給實時應用留下更大的余地,因而它在實時控制、通信、多媒體信息處理等對時間敏感的應用領域大有用武之地。
QNX 同時也是一個可嵌入的操作系統。它由微內核和一組共操作的進程構成,具有高度可伸縮性,可靈活的剪裁。最小配置只占用幾十 KB 內存。因此,它可以廣泛地嵌入到智能機器、智能儀器儀表、通信設備等應用中去。
2.1 POSIX
QNX是一種商用的遵從POSIX(可移植操作系統接口, Portable Operating SystemInterface,縮寫為POSIX, 是IEEE為要在各種UNIX操作系統上運行軟件,而定義API的一系列互相關聯的標準的總稱)規范的類Unix實時操作系統,目標市場主要是面向嵌入式系統。
2.2 微內核
QNX采用微內核架構,操作系統中的多數功能是以許多小型的task來執行,它們被稱為server。這樣的架構使得用戶和開發者可以關閉不需要的功能,而不需要改變操作系統本身。
QNX是一個微內核實時操作系統,其核心僅提供4種服務:進程調度、進程間通信、底層網絡通信和中斷處理,其進程在獨立的地址空間運行。所有其它OS服務,都實現為協作的用戶進程,因此QNX核心非常小巧而且運行速度極快。
QNX的微內核獨立自處于一個被保護的地址空間,驅動程序、網絡協議和應用程序處于程序空間中。
微內核架構的優點:
(1). 驅動程序、網絡協議、文件系統等操作系統模塊和內核相互獨立,任何模塊的故障都不會導致內核的崩潰;
(2). 驅動程序、網絡協議、文件系統和應用程序都處于程序空間,都調用相同的內核API,開發與調試和應用程序沒有區別;
(3). 操作系統功能模塊可以根據需要動態地加載或卸載,不需要編譯內核。在高可靠性要求的情況下,可以編寫監視模塊,對可靠性要求高的模塊進行監視,必要的時候重新啟動或重新加載而無須重啟系統。高可靠性的內核結構使QNX具備了高可靠性嵌入式操作系統的本質特征。
QNX Neutrino操作系統的微內核,管理一組協作的進程,如下圖所示,這種結構不是一種層級的組織,更像是一個團隊,因為不同的進程可以通過內核來協調交互。QNX Neutrino充當一個“軟件總線”的角色,可以在需要的時候動態的插入和移除系統模塊。
2.3 IPC
進程間通信 (IPC) 是將應用程序設計為一組協作進程的關鍵。
QNX 是同類中第一個使用消息傳遞作為IPC 基本手段的商業操作系統。操作系統的強大功能、簡單性和優雅性在很大程度上歸功于在整個系統中完全集成了消息傳遞方法。
在 QNX Neutrino 中,消息是從一個進程傳遞到另一個進程的字節包。操作系統對消息的內容沒有任何特殊意義——消息中的數據對消息的發送者和接收者都有意義,但對其他人沒有意義。
消息傳遞不僅允許進程相互傳遞數據,而且還提供了一種同步多個進程執行的方法。當它們發送、接收和回復消息時,進程會經歷各種“狀態變化”,這些變化會影響它們運行的時間和時間。
了解它們的狀態和優先級后,微內核可以盡可能高效地調度所有進程,以充分利用可用的 CPU 資源。這種單一的、一致的方法——消息傳遞——因此在整個系統中不斷地運行。
實時應用程序和其他關鍵任務應用程序通常需要可靠的IPC 形式,因為構成此類應用程序的過程是如此緊密相關。QNX Neutrino 的消息傳遞設計強加的紀律有助于為應用程序帶來秩序和更高的可靠性。
2.4 內存保護
QNX Neutrino利用MMU,在受保護的環境中實現了POSIX的線程模型。
針對內存保護,有以下幾種情況:
不提供內存保護:所有程序位于同一個地址空間,應用程序可以訪問所有空間,效率較高,但是程序指針錯誤可能造成內核崩潰
單內核OS提供部分內存保護:用戶層和系統層進行了隔離,內核和各種驅動、協議棧在同一個地址空間,應用程序在單獨空間。內核模塊處于一個保護空間,效率較高,應用程序無法訪問,系統的穩定性也得到提高。由于內核模塊處于保護空間,調試會比較困難。比如Linux系統。
微內核OS提供完整的內存保護:內核處于一個被保護的地址空間,驅動程序、網絡協議及應用程序等處于程序空間中。
QNX就是微內核,使用的上面c方案,如上圖。內存保護其實就是微內核中的系統服務之間:地址空間隔離。
2.5 分布式網絡
網絡中任何機器上的任何線程都可以直接使用任何其他機器上的任何資源。從應用程序的角度來看,本地資源和遠程資源之間沒有區別——不需要在應用程序中構建特殊設施來允許它們使用遠程資源。
用戶可以訪問網絡上任何地方的文件,利用任何外圍設備,并在網絡上的任何機器上運行應用程序(只要他們有適當的權限)。進程可以在整個網絡的任何地方以相同的方式進行通信。同樣,操作系統無所不在的消息傳遞 IPC 解釋了這種流暢、透明的網絡。
4.QNXNeutrino RTOS
QNX Neutrino實時操作系統(RTOS):內存受保護的微內核架構。
QNX Neutrino實時操作系統架構如下圖所示:
QNX Neutrino RTOS是功能齊全性能可靠的簡化版操作系統,可滿足最小規格的實時嵌入系統的有限資源要求。其真正的微內核操作系統和模塊化架構可使客戶以較低的運行總成本創建高度優化的可靠系統。
(1). 該系統建立在真正的微內核架構上。在這種系統中,所有驅動程序、應用程序、協議棧和文件系統都在內核外部內存受保護的安全的用戶空間內運行。幾乎所有組件在出現故障時都能自動重啟而不會影響其他組件或內核。
(2). 該系統采用模塊化結構,可允許用戶動態升級模塊、引入新功能或實施問題修復,而無高增加停機時間和系統中斷的成本。
(3). 該系統采用多核技術和內置透明分布處理技術。
(4). 該系統根據POSIX標準設計,只需通過簡單地重新編譯,就可移植既存代碼、開源UNIX、Linux和因特網代碼。通過標準應用程序接口,用戶能重新使用應用程序代碼。
(5). 該系統利用自適應分區技術確保系統資源滿足應用要求。
(6). 該系統支持x86、PowerPC和ARM平臺。
QNX Momentics工具套件(ToolSuite):基于Eclipse的靈活集成開發環境。
(1). 該工具套件包含用戶所需的所有工具,便于迅速創建和優化用于QNX Neutrino實時操作系統的應用程序。從板卡啟動到遠程診斷,QNXMomentics工具套件為用戶提供在整個開發周期內節省時間的工具,而且全部在單獨、使用簡便的環境中進行。
(2). 用戶可選擇自己喜歡的編程語言、主機和目標機。利用QNX Momentics工具套件,用戶可使用C、C++、嵌入式C++編程;可以在Windows或Linux主機中開發程序;并以ARM、PowerPC和x86處理器為開發目標,所有工具都取自相同的集成開發環境(IDE)。該工具套件還提供極大的靈活性,允許用戶同時混用多種編程語言和處理器架構。
(3). 該工具套件提供了大量的優質高效的分析工具,以加快產品交付所有階段的進展。該工具套件包括許多非侵入式圖形分析工具,以幫助用戶輕松隔離并呈現資源的使用情況、定位瓶頸并對系統性能進行精確調整,包括應用程序剖析、系統剖析和內存分析。
(4). 該工具套件支持所有QNXNeutrino實時操作系統技術,包括多核技術、擴展網絡、閃存文件系統、高級圖形和透明分布處理技術等。
(5). 該工具套件中含有經過優化的GCC編譯器、GDB調試程序。
5.開源代碼及開源商業模式
代碼路徑:https://github.com/vocho/openqnx
README中,有編譯的方法,但是讓我安裝一個軟件,這個就是工具鏈。而這個不開源的工具鏈需要license。我搞了一通沒成功,放棄了。這不能編譯,只開放了內核核心代碼但是不全啊!還不能編譯,誰有可以編譯的方法可以告訴我,一起學習。
審核編輯:劉清
-
嵌入式系統
+關注
關注
41文章
3620瀏覽量
129653 -
UNIX
+關注
關注
0文章
296瀏覽量
41540 -
IPC
+關注
關注
3文章
352瀏覽量
52005 -
qnx
+關注
關注
0文章
75瀏覽量
26211
原文標題:QNX入門-簡介、開源代碼、框架文檔
文章出處:【微信號:OS與AUTOSAR研究,微信公眾號:OS與AUTOSAR研究】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論