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