系統簡介 QNX 是一種商用的遵從POSIX規範的類Unix實時作業系統,目標市場主要是面向嵌入式系統。它可能是最成功的微核心作業系統之一。
QNX是一種商用的類Unix
實時作業系統 ,遵從POSⅨ規範,目標市場主要是
嵌入式系統 [1]。QNX成立於1980年,是加拿大一家知名的嵌入式系統開發商。
QNX的套用範圍極廣,包含了:控制保時捷跑車的音樂和媒體功能、核電站和美國陸軍無人駕駛Crusher坦克的控制系統[2],還有RIM公司的BlackBerry PlayBook平板電腦。
2004年10月27日,QNX 軟體系統宣布它已經接受來自音響設備製造商 Harman 國際工業公司(紐約證券交易所: HAR)的購買提議. 作為Harman 的最新子公司高級商標的國際家庭,包括 Harman Kardon,JBL 和Becker,QNX 現在將會加速它的生長,向為先進的嵌入式運用,變成優先的作業系統。哈曼集團以1.38億美元的現金收購了QNX,但也因此承擔了1.38億美元的債務。
2010年04月14日,黑莓手機(BlackBerry)製造商RIM(Research In Motion Ltd.,RIM)將收購哈曼國際工業集團(Harman International Industries Inc.,HAR)旗下的QNX軟體公司,以獲取其車載無線連線技術。QNX這個原本的
渥太華 公司,在被美國哈曼國際 Harman 在買走6年後,又重返加拿大。QNX主要開發汽車,通訊設備所使用的作業系統,哈曼國際的主業則是汽車音像和娛樂設備。此次交易將使得RIM,QNX和哈曼工業在智慧型手機和車載音頻娛樂系統之間找到合作空間。
QNX被RIM併購的訊息傳出,才讓這個在中國的認知度並不高的“默默無聞”的作業系統廠商被大家所熟知。但在汽車領域,QNX早已是最大的作業系統供應商。據不完全資料顯示,QNX在車用市場占有率達到75%,目前全球有超過230種車型使用QNX系統,包括哈曼貝克、德爾福、大陸、通用電裝、愛信等知名汽車電子平台都是在QNX系統上搭建的。幾乎全球所有的主要汽車品牌包括謳歌、阿爾法-羅密歐、奧迪、寶馬、別克、凱迪拉克、雪弗蘭、克萊斯勒、戴姆勒、道奇、菲亞特、福特、通用汽車、本田、悍馬、現代、英菲尼迪、捷豹、吉普、藍旗亞、馬自達、馬賽地、迷你寶馬、三菱、尼桑、歐寶、龐迪克、保時捷、薩博、土星、雙龍、豐田和大眾汽車等目前都採用了基於QNX技術的系統。
除汽車領域之外,QNX的最大客戶訂單來源於思科系統,其中高端路由設備幾乎全部採用QNX作業系統,因此,
網路通信 也成為了QNX第二大套用領域。此外,QNX與通用電氣、阿爾斯通、西門子、洛克希德·馬丁和NASA等公司都有著緊密合作,在軌道交通、醫療器械、智慧型電網及航空航天中,都發揮著積極作用。
基本特徵 * QNX是一個分散式、嵌入式、可規模擴展的硬
實時作業系統 。它遵循POSⅨ.1 (
程式接口 )和POSⅨ.2 (Shell和工具)、部分遵循POSⅨ.1b(實時擴展)。它誕生於1980年,距今已38年的歷史。
體系結構 調度策略 * 可選調度策略:FIFO、輪轉策略、適應性策略。
結構 QNX是業界公認的X86平台上最好的
嵌入式實時作業系統 之一。它具有獨一無二的
微核心 實時平台,建立在微核心和完全
地址空間 保護基礎之上,實時、穩定、可靠,已經完成到PowerPC、MIPS、ARM等核心的移植,成為在國內廣泛套用的嵌入式實時作業系統。雖然QNX本身並不屬於
UNIX ,但由於其提供了
POSIX 的支持,使得多數傳統UNIX程式在微量修改(甚至不需修改)後即可在QNX上面編譯與運行。
核心簡介
QNX的
微核心 結構是它區別於其它作業系統的顯著特點。
平板式記憶體結構,如圖1所示,所有的程式都使用同一個
地址空間 ,不加保護;應用程式可以自由訪問所有空間,效率較高,但是任何應用程式指針錯誤都可能會導致核心崩潰。
大
核心 記憶體結構,如圖2所示,
作業系統核心 和各種
驅動程式 、網路協定在同一個地址空間,應用程式在單獨空間;核心模組同處於一個保護空間,運行效率高,應用程式無法直接訪問保護空間,系統穩定性大大提高。缺點是,由於核心模組(例如網路驅動)處於保護空間,因此調試困難,任何驅動程式的修改都要重新編譯核心,無法做到驅動的動態載入和
卸載 。
QNX的
微核心 結構,核心獨立自處於一個被保護的
地址空間 ;驅動程式、網路協定和應用程式處於程式空間中。
微核心結構的優點:①驅動程式、網路協定、檔案系統等作業系統模組和核心相互獨立,任何模組的故障都不會導致核心的崩潰;②驅動程式、
網路協定 、檔案系統和應用程式都處於程式空間,都調用相同的核心API,開發與調試和應用程式沒有區別;③作業系統功能模組可以根據需要動態地載入或
卸載 ,不需要編譯核心。在高可靠性要求的情況下,可以編寫監視模組,對可靠性要求高的模組進行監視,必要的時候重新啟動或重新載入而無須重啟系統。高可靠性的
核心 結構使QNX具備了高可靠性
嵌入式作業系統 的本質特徵。
在具有高可靠性核心的基礎上,QNX的創新設計使它同樣具有很高的效率。QNX最為引人注目的地方是,它是UNⅨ的同胞異構體,保持了和UNⅨ的高度相似性,絕大多數UNⅨ或LINUX應用程式可以在QNX下直接編譯生成。這意味著為數眾多的穩定成熟的UNⅨ、LINUX套用可以直接移植到QNX這個更加穩定高效的實時嵌入式平台上來。
網路結構
QNX網路子系統由三個部分組成:網路管理模組(io-net)、網路協定模組、網路設備
驅動模組 。
每個模組各自具有不同的功能,但是它們具有一些相同的屬性。如:網路設備驅動、
TCP/IP協定 棧分別對上層io-net模組和應用程式產生數據,兩者都可以被看作數據源;同時它們也接受上層發來的數據,又可以同時被看作數據的消費者。過濾模組對向上的數據進行篩選,分協定進行處理;對向下的數據則進行相應的轉換,如進行
網路地址轉換 NAT。轉換模組負責不同協定幀結構的轉換,在
乙太網 的工作環境下,它就負責對IP數據報進行乙太網幀的封裝和
解包 。
和QNX其它服務進程一樣,QNX的網路子系統也在
核心 外部空間運行。應用程式面對的是一個統一的網路接口,硬體相關的內容被完全包裝在網路子系統內。
QNX網路子系統的三個子模組按層次分開,io-net模組處於中心,是QNX網路的核心和重點,其它模組都掛接在它上面。數據和信息的流動都必須經由io-net調度與轉發,所有其它模組所面對的就是一個單一主體。這樣的中心交換結構,禁止了各個模組間相互協調的複雜細節,在很大程式上方便了模組的編寫工作;同時,io-net還是QNX的網路管理中心。任何網路協定和網路
設備驅動程式 都必須向io-net註冊,由它來載入,並接受io-net的配置和管理,用戶對網路狀態的查詢和管理也是通過io-net來實現的。
網路設備驅動
QNX網路
設備驅動 模組處於網路硬體和io-net模組之間。
驅動模組 負責配置硬體使其正常工作,向io-net報告數據收發情況,接收和傳遞數據,接受io-net的調度和管理。QNX網路
設備驅動程式 依照以上功能,分為初始化、接收傳送數據、網路設備信息統計幾個功能塊。要使
網路設備 工作正常,
驅動程式 就要對它進行一定的暫存器配置,同時,還要向QNX網路子系統註冊自己,表明網路設備的存在和網路通信能力,才能為系統和應用程式所用。在初始化工作完成以後,網路設備就進入了工作狀態,收發數據。設備信息的統計也是由設備驅動程式來完成的。
⑴初始化
初始化包括兩個方面,一方面是初始化網路設備,使其正常工作;另一個方面,是向io-net正確註冊
驅動模組 ,表明自己的屬性,方便上層正確操作。網路設備的初始化工作和硬體緊密相關,這裡就不一一描述。
驅動模組向io-net載入自己的時候,系統遵循如下工作流程:
①io-net搜尋全局的符合io_net_dll_entry。它定義了驅動的初始化函式,io-net會直接調用這個函式。
②初始化函式向io-net註冊驅動和相應的函式。
③初始化函式告訴io-net和它的模組自己的通信能力。
經過以上流程以後,io-net中就建立起有關此驅動程式的數據和
函式調用 列表。驅動程式必須正確編寫初始化函式,並將該函式正確連結至io_net_dll_entry。
當有包到達網路設備的時候,網路設備就會用某種方式通知
驅動程式 (例如中斷),此時,驅動程式就要採取某種策略來處理到來的幀或數據。通常驅動程式這時候需要做以下工作:
①通過DMA將包取回來;
②做相應的必要處理,如通知網路設備釋放當前幀的快取,配置暫存器讓網路設備等待下一幀到來等;
③通過調用io-net的tx_up_start()函式把包傳遞給上層模組。
當上層所有的模組都完成對這個包的處理以後,io-net調用我們驅動中的tx_done()函式,它來做最後的處理工作。
tx_up_start()函式是
設備驅動 中比較關鍵的函式,下面簡要部分一下這個函式的入口參數。
npkt_t*(*tx_up_start)(int registrant_hdl,
nptk_t *npkt,
int off,
int framelen_sub,
uint16_t cell,
uint 16_t endpoint,
uint16_t iface,
void *done_hdl)
其中:int registrant_hdl--本驅動在io-net中的句柄,註冊時由io-net生成;
nptk_t *npkt --需要處理的包的指針;
int off--底層協定包頭長度,如乙太網幀頭部長度;
int framelen_sub--尾部填充的長度,對於
乙太網 這個值為零;
uint16_t cell、uint16_t endpoint--endpoint和cell是io-net在註冊的時候分配的用來區別不同的驅動;
uint16_t iface--接口號,可以讓同一個驅動負現多個相同硬體;
void *done_hdl--該
指針 指向tx_done()函式需要的額外數據。
當上層模組需要硬體傳送包的時候,會調用io-net管理器的rx_down()函式。
int(*rx_down)(npkt_t*npkt,
void *func_hdl)
rx_down函式入口參數中,npkt是指向需要傳送的數據的結構指針,func_hdl是相應
驅動模組 在io-net中的句柄。其中npt結構包含許多成員,其中的重要成員如:
cell、endpoint、iface 需要處理該包的硬體標識
buffers 指向包的指針
tot_iov 包含數據包的所有I/O矢量
驅動模組在接收到io-net的調用後,就要配置網路設備,讓它完成數據的傳送工作。網路設備傳送數據所需要的信息都會在相應的數據結構中,如net_buf_t結構中保存了等待傳送的
數據包 的連結列表,配置DMA所需的物理地址在net_iov_t中等。
驅動模組 要等待硬體完成這些包的傳送,並調用io-net的tx)done()函式通知上層模組
驅動程式 已經完成了數據的傳送。
網路設備信息的統計
應用程式或者用戶可以通過網路信息接口nicinfo工具來了解
網路工作 狀態。信息的查詢都是通過io-net來進行的。
驅動程式 必須維護相應的狀態數據,方便io-net的查詢。網路設備有一些共同的狀態屬性,如收到和發出的包的個數、傳送錯誤的包的個數等,不同的網路設備還會具有不同的屬性和狀態,這些都可以在驅動程式中用數據結構詳細列明。
需要維護的數據結構中,主要的是Nic_t,它包括四個子結構;
CustNicStats--網路信息入口;
EthernesStats_t--乙太網狀態;
GenStats_t--常用統計信息;
NetStats_t--網路信息(包含常用統計信息)。
以上是
驅動程式 需要維護的數據。當用戶或應用程式要查詢這些信息的時候,它們就通過Nicinfo工具對/dev/io-net/en0調用devctl()函式來取得網路信息。信息的取得是必須通過io-net來完成的,io-net對信息的查詢則是通過調用io_net_register_funs_t結構中所指向的函式來取得信息的。例:
#include<sys/nic.h>
int generic_eth_devctl(void *hdl,int dcmd,void *data,
size_t size,int *ret)
{
Nic_t *nic=(Nic_t *)hdl;
int status;
status=EOK;
switch(dcmd){
case DCMD_IO_NET_NICINFO;
memcpy(data,nic,min(size,sizeof(Nic_t)));
break;
default:
status=ENOTSUP;
break;
}
return(status);
}
結束語
網路設備的驅動是網路系統的最低層和最基礎的模組,是如今
嵌入式開發 中首先要解決的問題之一。由於QNX具有
微核心 的特點,其網路
設備驅動程式 的開發不需要核心調試,更適合初學者掌握。本文對QNX作業系統及網路設備驅動程式的介紹,可以幫助讀者對相關內容作初步了解。
系統服務 QNX的系統服務:* 多種
資源管理器 ,包括各種檔案系統和設備管理,支持多個檔案系統同時運行,包括提供完全POSⅨ.1及UNⅨ語法的POSⅨ檔案系統,支持多種快閃記憶體設備的嵌入式檔案系統,支持對多種
檔案伺服器 (如Windows NT/95、LAN Manager等)的透明訪問的SMB檔案系統、DOS檔案系統、CD-ROM檔案系統等。
QNX * 設備管理。在進程和
終端設備 間提供大吞吐量、低開銷接口服務。
* 圖形/視窗支持。包括QNX Windows、X Window System for QNX、對MS Windows NT/95和X Window系統的遠程圖形連線。
* TCP/IP for QNX。
* 高性能、容錯型QNX網路——FLEET,使得所有連入網路的計算機變成一個邏輯上的超級計算機。
* 透明的
分散式處理 。FLEET網路處理與訊息傳遞和
進程管理 原語的集成,將本地和網路IPC統一起來,使得網路對IPC而言是透明的。
開放性 QNX的開放性:
* QNX的POSⅨ兼容性和其提供的UNⅨ特色的
編譯器 、
調試器 、X Window和TCP/IP都是UNⅨ程式設計師所熟悉的。
* 支持多種CPU:AMD ElanSC300/310/400/410、Am386 DE/SE、Cyrix MediaGX、x86處理器(386以上)、Pentium系列、STMicroelectronics 的STPC。
* 多種匯流排:CompactPCI、EISA、ISA 、MPE (RadiSys)、STD、STD 32、PC/104、PC/104-Plus、PCI、PCMCIA、VESA、VME。
* 各種外設:多種SCSI設備、IDE/EIDE驅動器、10M/100M乙太網卡、Token Ring網卡、FDDI接口卡、多種PCMCIA設備、快閃記憶體、音效卡等等。
用戶評價 華麗的圖形界面和快捷的運行速度
QNX有一個非常華麗的圖形界面,並且號稱運行速度比Windows或Linux更快。不用不知道,一用你會忘不掉:P
壟斷的微軟Windows作業系統和自由的Linux作業系統都是很多朋友熟知的計算機主要的作業系統。但是您聽說過QNX
計算機作業系統 嗎?如果我告訴您QNX作業系統運行的速度比Windows或Linux還快,而且用戶界面也十分華麗,您相信嗎?
別以為QNX是剛剛誕生的計算機作業系統,它早就在20年前就誕生了,但是QNX作為一種專業的作業系統,至今它還未能進入普通用戶的計算機為我們服務。其中的原因無疑是很複雜的。
有趣的發音
QNX的發音也十分有趣,大家知道Linux用漢語發音就是“里訥克斯”,而QNX的發音就是“cue-nix”:)。如果您使用的是Pentium處理器系列的計算機,那么在這台計算機的硬碟上安裝QNX作業系統是很容易的事情,QNX可以在Windows下安裝,它和Linux一樣,是一種類UNⅨ的作業系統。另人驚異的是QNX也是免費的作業系統,可以直接到QNX的網站上下載這個原版作業系統。當然,購買一張QNX的
CD-ROM 也是很方便的。一張QNX的安裝盤CD-ROM售價為30美元。在QNX的主頁上有很詳細的介紹和資料,還有關於QNX的新聞及套用軟體可供用戶閱讀下載。
可以和Windows切換
有了QNX,您計算機里的作業系統不只是Windows獨霸了,QNX完全可以取代霸道的Windows平台。很多初學計算機的朋友因為接觸最多的是Windows平台,以至於他們誤認為Windows98就是“OS”的唯一選擇。現在不同了,使用QNX同樣也能很好的管理計算機了。
簡單的說,作業系統就是給計算機一個靈活的大腦,一個強健的心臟和突出的個性。沒有作業系統,計算機什麼也做不了,只能是一堆廢物。
軟體公司 QNX是由一家位於加拿大的QNX軟體系統公司(簡稱QSSL)推出的。該公司位於
渥太華 (加拿大城市)的市郊。最近從該公司傳來好訊息說,該公司已經面向普通用戶推出了可以免費使用、非商業用的個人用戶版本的QNX實時平台或稱作QNX RTP,最小的在Windows下安裝檔案只有24MB。當這個版本正式向公眾推出的時候,大約有400000人次從網上下載了這個QNX RTP版本。這大大出乎了意料,沒有想到竟然有這么多人對這個作業系統感興趣。因為很多人在以前根本就沒有聽說過世界上還有這么一個免費的QNX作業系統。
該公司已被
RIM (Research In Motion)收購。
配置要求 現在要在這么一台電腦上試裝這個QNX作業系統。電腦的硬體配置為233 MHZ AMD K6 處理器,96MB記憶體,ATI All-in-Wonder Pro顯示卡,Sound Blaster AWE 32 音效卡,兩個
硬碟驅動器 和兩個
CD-ROM驅動器 ,一個SCSI硬碟和一塊標準的網卡。
安裝 在安裝的過程中除了遇到一個小故障之外,一切還算順利。那塊SCSI卡沒有能被QNX自動配置。查閱QSSL公司的資料,該公司說他們正在努力的修正這個SCSI的問題。
操作 如果您是一位有經驗的Linux用戶,那么QNX會使您很快就能上手。雖然它和Linux有很大的區別。QNX RTP使用的命令和操作是和Linux的許多“shell”命令是兼容的。更令人滿意的是QNX的檔案分級目錄(組織,檔案名稱和目錄)和Linux幾乎是一樣的。可以說QNX RTP和舊的Linux是十分相象的。這對許多喜歡Linux,對Linux有一定實際操作經驗的用戶來說無疑是一個福音。QNX在他們手裡很快就能玩轉。
但QNX和Linux最大的不同就是QNX的圖形
用戶界面設計 的十分漂亮。儘管Linux使用的是經久世故的X Window系統,但是和QNX的稱為“Photon”的
圖形用戶界面 相比還是顯得Linux略勝一籌。
系統優點 QNX RTP的
圖形用戶界面 -Photon MicroGUI非常酷
QNX的Photon MicroGUI視窗系統是最“酷”的GUI(圖形用戶界面)。安裝QNX後,你就會發現QNX的默認桌面背景“炫”得讓你暈倒,得讓人給你叫個醫生來。
另外要提到的是,QNX RTP 的運行速度是那樣的快,是否所有的用戶都能夠接受?沒有錯,在同樣的電腦硬體配置情況下,QNX確實運行速度要比其他的Windows系統要快得多。在使用滑鼠和視窗的操作界面下,QNX的運行速度確實是讓人滿意的。給人以一種“豪爽”的感覺。
以上關於QNX的優點介紹得讓你立刻想鼓掌,狠不得馬上下載一個QNX試一試,但是有些問題是要說清楚的。QNX儘管是非常好的一個作業系統。但是你平時主要工作如果需要處理
電子表格 ,管理金融等等,那么QNX可能不太適合你。因為能在QNX下運行的套用軟體並不多。這也是制約QNX發展的一個重要原因了。
但是也不必太擔心軟體不夠用的問題,起碼QNX能讓你進行很多基本的操作。你可以用QNX來計算數據,播放CD音樂,使用電子郵件程式,進行文字處理工作,簡單的圖象瀏覽,還有一些Linux上已經除去的
螢幕保護程式 ,桌面背景轉換,軟體的安裝管理功能等等。甚至你還可以在QNX上添加專用版本的Real Player軟體,喜歡玩遊戲的朋友還可以安裝Quake這個著名的遊戲。所有在QNX上玩過Quake的朋友都說Quake在QNX上的運行速度比任何作業系統都要快。這確實是一個對遊戲迷來說是非常好的訊息。
所有優點
好了,現在我們來總結一下QNX的所有優點:
速度極快:QNX的運行速度非常快,其他的作業系統沒有辦法和它相比。
系統非常安全:QNX上沒有計算機病毒,這是和Linux一樣的,所以QNX RTP不存在被病毒破壞資料的危險,只有在微軟Windows系統中才會有被病毒感染的噩夢。另外,QNX的用戶管理相當出色,它絕對不會讓一個沒有輸入正確密碼的人闖入計算機系統中。
QNX有一個最好的
網頁瀏覽器 :QNX里的網頁瀏覽器叫做“Voyager”,瀏覽網頁的速度快得象火箭。和Voyager相比,微軟的IE和
網景 公司的NC瀏覽器簡直就是一輛破舊的老爺車。但是這個Voyager瀏覽器目前還有些BUG,QSSL公司的
軟體工程師 正在改進它。
QNX的最大不同:QNX完全不像Windows,那是一件好事情。它是免費的作業系統,可以在網上下載安裝使用。它的使用和操作也十分的容易。