本文原作者寫于5年前,期間可能有些技術(shù)的小變化,但作為對嵌入式Linux和QNX的入門了解還是不錯(cuò)的。
介紹
上個(gè)世紀(jì)90年代末期,Web設(shè)備被吹捧為下一個(gè)劃時(shí)代的“大事件”,一種新型設(shè)備會產(chǎn)生一個(gè)新興市場從而會產(chǎn)生下一代消費(fèi)IT巨頭。在拉斯維加斯的消費(fèi)電子展上和QNX 2000國際技術(shù)會議上,大大小小的生產(chǎn)商展示了許多對未來的構(gòu)想。
英特爾基于Linux構(gòu)建了Web設(shè)備,微軟的合作方基于一個(gè)閹割版的Windows CE開發(fā)Web設(shè)備。其他公司,比如3Com和Netpliance iOpener則是基于QNX。當(dāng)時(shí)Web設(shè)備看起來很大可能是消費(fèi)電子的未來。相比個(gè)人電腦,他們提供更少的功能。那個(gè)時(shí)候, Ken Kalinoski(Netpliance的發(fā)展副總裁)能想到的最好的方式是一個(gè)富客戶端連接到一個(gè)專門的服務(wù)器上。百思買和沃爾瑪貨架上后面Web設(shè)備的減少說明消費(fèi)者并不買賬。他們不想要一個(gè)設(shè)備只能瀏覽網(wǎng)頁和處理簡單的郵件,但是不能處理文本或存儲數(shù)據(jù)。并且,消費(fèi)者也不喜歡被指定的服務(wù)供應(yīng)商綁定。
Linux和QNX因?yàn)樽鳛閃eb設(shè)備上的操作系統(tǒng)和巨大的平臺開發(fā)能力聲名鵲起。Linux過去作為服務(wù)器操作系統(tǒng)使用最多,而QNX主要用于工業(yè)級的嵌入式實(shí)時(shí)操作系統(tǒng)。為了挖掘新的市場,許多開發(fā)者開始開發(fā)Linux和QNX在更小,更便攜式設(shè)備上的能力。
事后看來,Web設(shè)備是一個(gè)技術(shù)超前的想法。即使有軟件和工程天才們生產(chǎn)這些設(shè)備,但是硬件和基礎(chǔ)設(shè)施的局限性不能讓W(xué)eb設(shè)備滿足一個(gè)電子必需品的功能,比如多功能性和便攜性。移動電話和PDA技術(shù)的提高,數(shù)碼攝像機(jī)的進(jìn)步,更低電量的需求,內(nèi)存的增長,嵌入式或移動CPU速度的巨大提升,以及802.11b和802.11g WIFI無線網(wǎng)絡(luò)協(xié)議,這些所有的因素促使Web設(shè)備成為一個(gè)多功能設(shè)備。這個(gè)設(shè)備集合了電腦,辦公軟件,手機(jī),攝像機(jī)(包括電影),傳呼機(jī),音樂播放器,當(dāng)然也包括Web 瀏覽和郵件系統(tǒng)。這些所有的功能集成在一個(gè)可以放進(jìn)口袋的無線設(shè)備上。
四年之后,我們處在一個(gè)新的“下一個(gè)大事件”的邊緣。在已經(jīng)具有龐大的PDA和Internet功能的手機(jī)市場上,硬件以及就地?zé)o線和服務(wù)基礎(chǔ)設(shè)施的進(jìn)步,對能夠提供更多功能,更緊湊且電池壽命更長的設(shè)備產(chǎn)生了巨大的需求。這個(gè)重新激發(fā)了人們對嵌入式開發(fā)平臺的興趣,保證將來能在數(shù)十億美元的市場中競爭。
設(shè)計(jì)相似之處就在這里結(jié)束。Linus Torvalds 使用宏內(nèi)核架構(gòu)設(shè)計(jì)了Linux作為一個(gè)通用的操作系統(tǒng)運(yùn)行在個(gè)人電腦上。內(nèi)核幾乎包含了操作系統(tǒng)需要的所有功能。相反,QNX的設(shè)計(jì)則更加模塊化和可擴(kuò)展。QNX是一個(gè)基于微內(nèi)核的實(shí)時(shí)操作系統(tǒng),能足夠小的嵌入到芯片提供運(yùn)行工作站或大型網(wǎng)絡(luò)服務(wù)器的能力。
Linux的嵌入式發(fā)展
由于Linux自身的健壯性,相對緊湊,通用,低成本和開源的license模式這些優(yōu)點(diǎn),嵌入式系統(tǒng)的設(shè)計(jì)者很長時(shí)間都在使用Linux。Linux可以讓設(shè)計(jì)軟件充分利用大量的開發(fā)人員,永遠(yuǎn)豐富的代碼遺產(chǎn)和行業(yè)標(biāo)準(zhǔn)的便攜式操作系統(tǒng)接口(POSIX)API。
標(biāo)準(zhǔn)的Linux內(nèi)核沒有嵌入式系統(tǒng)要求的實(shí)時(shí)能力(可預(yù)測的應(yīng)答時(shí)間和毫秒級的延遲通常被認(rèn)為是確定的事件)例如電傳操縱,ABS制動系統(tǒng),連續(xù)介質(zhì)和醫(yī)療設(shè)備。但是,Linux可以直接用于不受確定性問題影響的消費(fèi)類設(shè)備中。為了滿足當(dāng)前正在開發(fā)的嵌入式設(shè)備的需求,出現(xiàn)了幾種Linux產(chǎn)品,可以滿足更加可預(yù)測的速度和定時(shí)行為。
嵌入式系統(tǒng)中使用Linux
盡管一開始Linux設(shè)計(jì)是為了個(gè)人電腦使用,但是Linux也可以成為一個(gè)可靠的嵌入式操作系統(tǒng)。一個(gè)具有所有功能的Linux內(nèi)核的縮小的Linux包,僅占用約1M的內(nèi)存。純的Linux內(nèi)核(虛擬內(nèi)存和所有核心操作系統(tǒng)功能)僅占用大約100K。加上網(wǎng)絡(luò)棧和基本的使用,一個(gè)完整的Linux運(yùn)行時(shí)大約占用500K內(nèi)存。所需要的總的內(nèi)存由運(yùn)行的應(yīng)用程序來運(yùn)行,但是Linux系統(tǒng)僅需要256K ROM和512K RAM就可以工作。這對嵌入式市場來說是一個(gè)輕量級的操作系統(tǒng)。
使用開源的Linux系統(tǒng)另一個(gè)好處是,相比較傳統(tǒng)的實(shí)時(shí)操作系統(tǒng),Linux開發(fā)社區(qū)會更快的支持新的協(xié)議以及比實(shí)時(shí)操作系統(tǒng)供應(yīng)商支持更多的設(shè)備驅(qū)動。
Linux操作系統(tǒng)的核心是一個(gè)相對簡單的微內(nèi)核架構(gòu)。網(wǎng)絡(luò)和文件系統(tǒng)以模塊化的方式位于宏內(nèi)核之上。驅(qū)動和其他功能可以編譯進(jìn)內(nèi)核,也可以在運(yùn)行時(shí)加載。這提供了一種高度模塊化的構(gòu)建塊方法來構(gòu)建定制的嵌入式系統(tǒng),該方法通常使用定制驅(qū)動程序和應(yīng)用程序的組合來提供附加功能。
為了避免重新發(fā)明輪子,嵌入式系統(tǒng)通常需要使用現(xiàn)成的程序和驅(qū)動程序構(gòu)建通用功能。許多程序和驅(qū)動程序用于外圍設(shè)備和應(yīng)用程序。Linux可運(yùn)行在大多數(shù)需要有大量外設(shè)的微處理器上,并且有大量的現(xiàn)場的應(yīng)用。
Linux能夠很好的適配嵌入式網(wǎng)絡(luò)設(shè)備,因?yàn)樗С侄?a target="_blank">處理器系統(tǒng),擁有擴(kuò)展性。這讓設(shè)計(jì)者多了一個(gè)選項(xiàng),可以在雙處理器系統(tǒng)上運(yùn)行一個(gè)實(shí)時(shí)的應(yīng)用程序,從而提高總的處理能力。所以你可以在一個(gè)處理器上運(yùn)行Linux,而同時(shí)在另一個(gè)處理器上運(yùn)行GUI。
在嵌入式系統(tǒng)上運(yùn)行Linux的一個(gè)缺陷是,Linux架構(gòu)不能以一個(gè)標(biāo)準(zhǔn)的形式提供實(shí)時(shí)能力。比如標(biāo)準(zhǔn)的Linux是根據(jù)公平算法來進(jìn)行任務(wù)調(diào)度,也就是給每個(gè)任務(wù)相同的處理器時(shí)間。解決方案是通過額外的實(shí)時(shí)變化修改Linux讓它以確定的方式運(yùn)行。
第一個(gè)解決方案是在內(nèi)核空間增加額外的軟件模塊。加在操作系統(tǒng)實(shí)現(xiàn)調(diào)度策略,硬件中斷和程序執(zhí)行的部分。由于這些實(shí)時(shí)的軟件模塊運(yùn)行在內(nèi)核空間,操作系統(tǒng)由于代碼錯(cuò)誤崩潰會影響整個(gè)操作系統(tǒng)的可靠性。
第二個(gè)解決方案,如圖1所示,以雙內(nèi)核的方式為實(shí)時(shí)任務(wù)提供實(shí)時(shí)環(huán)境。這種方式需要開發(fā)者開發(fā)新的驅(qū)動和系統(tǒng)服務(wù),盡管對等的服務(wù)已經(jīng)在標(biāo)準(zhǔn)的Linux內(nèi)核中存在了。這種實(shí)時(shí)操作系統(tǒng)方案會延長加載時(shí)間并且增加操作系統(tǒng)占用的空間。
第三種方案是其他Linux生廠商重寫部分代碼來實(shí)現(xiàn)實(shí)時(shí)功能,比如調(diào)度來保證行為確定。
圖1:擁有雙標(biāo)準(zhǔn)和實(shí)時(shí)操作系統(tǒng)內(nèi)核的Linux
嵌入式Linux的標(biāo)準(zhǔn)化
Linux有超過200多個(gè)的發(fā)行版本和很多嵌入式版本。由于嵌入式Linux要沒有存在的標(biāo)準(zhǔn),一個(gè)統(tǒng)一的平臺規(guī)范讓Linux的使用具有一個(gè)更經(jīng)濟(jì),專注的環(huán)境,Linux幾乎就是無用的。
為了保證嵌入式Linux版本的兼容性,嵌入式Linux聯(lián)盟(ELC)成立了。ELC是一個(gè)非盈利性行業(yè)協(xié)會,致力于在整個(gè)嵌入式計(jì)算市場中改進(jìn),促進(jìn)和標(biāo)準(zhǔn)化Linux。成員們?yōu)榱讼硎軜?biāo)準(zhǔn)化帶來的好處,要參與管理、促進(jìn),實(shí)現(xiàn)和平臺規(guī)范工作組。
ELC的使命是:“…..讓Linux成為嵌入式系統(tǒng)開發(fā)者的首選“。Inder Singh博士,ELC的主席和Lynuxworks的CEO評價(jià)說:“Linux已經(jīng)開算成長為消費(fèi)類電子產(chǎn)品的操作系統(tǒng)的主要選擇之一,越來越多的嵌入式軟件使用Linux”。
Karen Chupka,消費(fèi)電子協(xié)會活動和會議副總裁表明,“操作系統(tǒng)軟件是消費(fèi)類電子產(chǎn)品快速增長列表中一個(gè)關(guān)鍵的考慮點(diǎn),Linux有望在2004年增長……”
現(xiàn)在超過75家公司加入了由索尼和松下成立的消費(fèi)電子Linux論壇,來促進(jìn)基于Linux的數(shù)字消費(fèi)電子產(chǎn)品。2003年6月,一些其他的消費(fèi)電子產(chǎn)品公司也加入了該論壇。這些公司是EC, Hitachi, Royal Philips, Samsung, Sharp and Toshiba.
三個(gè)嵌入式Linux 版本
松下消費(fèi)電子版本3.0
松下為它的消費(fèi)電子設(shè)備引入了嵌入式Linux。松下“消費(fèi)電子版本3.0”(CEE)是嵌入式操作系統(tǒng)。它的目標(biāo)是手機(jī),數(shù)字電視,機(jī)頂盒和汽車遠(yuǎn)程信息處理的應(yīng)用程序。CEE設(shè)計(jì)用于高度受限的移動設(shè)備,這些設(shè)備的特點(diǎn)是低功耗,內(nèi)存大小受限以及啟動和恢復(fù)時(shí)間端。據(jù)稱它是第一個(gè)專門為消費(fèi)電子市場設(shè)計(jì)的商業(yè)嵌入式Linux發(fā)行版。
CEE支持動態(tài)電量管理功能,文件系統(tǒng)加強(qiáng)和測量性能,系統(tǒng)時(shí)間,內(nèi)存大小的工具,文件支持流媒體優(yōu)化。
CEE的功能包括:
免稅版的嵌入式Linux OS和開發(fā)環(huán)境
消費(fèi)級別的可靠性
搶占式內(nèi)核技術(shù)和實(shí)時(shí)調(diào)度
動態(tài)電源管理優(yōu)化了電量使用,延長了電池壽命
內(nèi)核快速啟動時(shí)間
文件系統(tǒng)加強(qiáng),包括對流媒體支持的優(yōu)化
eXecute In Place(XIP)提供快速啟動,待機(jī)和恢復(fù)功能
可擴(kuò)展的內(nèi)存占用空間可容納各種消費(fèi)類產(chǎn)品
“金標(biāo)準(zhǔn)”網(wǎng)絡(luò)可實(shí)現(xiàn)高性能的互聯(lián)應(yīng)用
圖形化的MontaVista系統(tǒng)測量工具可促進(jìn)消費(fèi)者級的性能調(diào)整
預(yù)集成Java*和圖形開發(fā)以及運(yùn)行時(shí)產(chǎn)品,可選
支持各種商業(yè)和開源應(yīng)用程序和中間件
LynxOS
嵌入式軟件公司LynuxWorks構(gòu)建了兩個(gè)嵌入式Linux版本。如圖2所示,LynxOS是一個(gè)硬實(shí)時(shí)嵌入式系統(tǒng)。LynxOS是一個(gè)Linux實(shí)時(shí)操作系統(tǒng),前融Linus ABI和POSIX。由于是微內(nèi)核設(shè)計(jì),內(nèi)核占用非常小,僅有28KB大小。
圖2
小型內(nèi)核提供包括調(diào)度,終端分配和同步等必要的服務(wù)。其他服務(wù)由內(nèi)核輕量級服務(wù)模塊提供。這些模塊被稱為內(nèi)核插件(Kernel Plug-Ins, KPIs)。新的KPIs可以被加到內(nèi)核中用來支持I/O, 文件系統(tǒng),TCP/IP,流和Socket。KPIs是多線程的,意味著每個(gè)KPI可以根據(jù)要求創(chuàng)建多個(gè)線程。
向KPI發(fā)送消息時(shí)沒有上下文切換。比如當(dāng)給文件系統(tǒng)KPI發(fā)送服務(wù)請求消息(RFS)時(shí),不需要上下文切換從而減少運(yùn)行時(shí)的開銷。KPI之間的通信只依靠很少的指令,因而開銷很低。
應(yīng)用程序通過系統(tǒng)調(diào)用向I/O系統(tǒng)發(fā)出I/O請求。內(nèi)核將I/O請求定向到設(shè)備驅(qū)動程序。每個(gè)設(shè)備驅(qū)動程序都有一個(gè)中斷處理程序和內(nèi)核線程。中斷處理程序執(zhí)行中斷處理的第一步。如果未完成處理,則會設(shè)置為內(nèi)核異步陷阱。稍后,當(dāng)內(nèi)核可以響應(yīng)軟件中斷時(shí),它會調(diào)度內(nèi)核線程的實(shí)例完成中斷處理。
藍(lán)貓
藍(lán)貓是LynuxWorks公司構(gòu)建的第一個(gè)Linux版本。藍(lán)貓不是一個(gè)實(shí)時(shí)操作系統(tǒng),但是與LynxOS二進(jìn)制兼容,因此嵌入式應(yīng)用程序可以輕松地移植到RTOS。藍(lán)貓主要是為了對實(shí)時(shí)性沒要求的嵌入式系統(tǒng)。
QNX
QNX是一個(gè)基于POSIX為嵌入式系統(tǒng)特別設(shè)計(jì)的實(shí)時(shí)操作系統(tǒng)。它不僅能夠讓Linux開發(fā)者保持他們的編程習(xí)慣,而且還保留了Linux開源模型的關(guān)鍵特性。帶來的好處是,這種方式能夠讓嵌入式開發(fā)者無論是在標(biāo)準(zhǔn)的Linux還是實(shí)時(shí)的擴(kuò)展Linux都可以享受OS的服務(wù)。圖3說明了QNX的架構(gòu)。
圖3:QNX架構(gòu)
QNX是QNX Software Systems Ltd. (www.qnx.com*), Kanata, Ont.公司的商用產(chǎn)品。和Linux一樣,QNX也是基于1970由貝爾實(shí)驗(yàn)室開發(fā)的UNIX。QNX和Linux都遵循LINUX POSIX標(biāo)準(zhǔn)。
QNX Neutrino微內(nèi)核為實(shí)時(shí)和非實(shí)時(shí)的應(yīng)用提供了一個(gè)統(tǒng)一的環(huán)境。QNX基于實(shí)時(shí),微內(nèi)核的架構(gòu)(見圖3)提供POSIX兼容的API。Neutrino微內(nèi)核只包含最基礎(chǔ)的操作系統(tǒng)服務(wù)。所有其他的服務(wù)都可以通過可選的,內(nèi)存保護(hù)的進(jìn)程來提供,可以動態(tài)的啟動和停止。為了實(shí)現(xiàn)模塊化,QNX Neutrino使用消息傳遞作為整個(gè)系統(tǒng)IPC最基本的方式。
和Linux不同,QNX沒有把POSIX作為附加層來實(shí)現(xiàn)。QNX微內(nèi)核從一開始設(shè)計(jì)時(shí)就支持POSIX實(shí)時(shí)性,包括線程。ELC規(guī)范是基于現(xiàn)存的POSIX 1003.1標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)QNX也支持。因此,QNX能夠天然支持嵌入式Linux應(yīng)用。
QNX,和Linux一樣,提供開源模式的好處。通過代碼,開發(fā)者能夠分析操作系統(tǒng)的架構(gòu)以便更好地集成他們的代碼,適配操作系統(tǒng)組件來滿足應(yīng)用特定的需求,并節(jié)省問題定位的思考時(shí)間。QNX通過兩種方式來提供上面的好處。
通過使用高度擴(kuò)展的微內(nèi)核架構(gòu)
給客戶提供驅(qū)動,庫和BSP(Board support package)的源碼,包括為各種標(biāo)準(zhǔn)設(shè)備提供驅(qū)動開發(fā)套件
作為微內(nèi)核操作系統(tǒng),QNX Neutrino從根本上對定制開發(fā)。這是因?yàn)榇蟛糠植僮飨到y(tǒng)層面的服務(wù)驅(qū)動,文件系統(tǒng)和協(xié)議棧存在于內(nèi)核外的用戶空間,只有少量的核心服務(wù)(比如調(diào)度,定時(shí)器,中斷處理)存在內(nèi)核中。因此,開發(fā)自定義驅(qū)動程序和應(yīng)用程序特定的OS擴(kuò)展不需要特殊的內(nèi)核調(diào)試器或內(nèi)核專家。事實(shí)上,作為用戶空間的程序,開發(fā)OS擴(kuò)展和開發(fā)標(biāo)準(zhǔn)的應(yīng)用程序一樣簡單,因?yàn)樗鼈兛梢杂么蠹沂熳R的標(biāo)準(zhǔn)的源碼級別的工具調(diào)試。
QNX Neutrino允許應(yīng)用程序通過稱之為同步消息傳遞這種統(tǒng)一的IPC方式來訪問所有的驅(qū)動程序和操作系統(tǒng)服務(wù)。這種方式有幾個(gè)好處。比如,由于QNX的消息傳遞是同步的,從而能夠自動協(xié)調(diào)通信程序的執(zhí)行,因此無需在每個(gè)進(jìn)程中手動編碼和調(diào)試復(fù)雜的同步服務(wù)(見圖3)。消息傳遞本質(zhì)上簡化了復(fù)雜操作系統(tǒng),將其劃分為明確定義的可以單獨(dú)開發(fā),測試和維護(hù)的基礎(chǔ)構(gòu)建模塊。通過任何提供服務(wù)的程序在路徑名空間注冊路徑名將其廣而告之給其他程序來實(shí)現(xiàn)。任何程序都能夠通過在路徑名上調(diào)用比如open(), read(), write(), 或者lseek()來訪問其他服務(wù)。
舉個(gè)例子。QNX串口驅(qū)動通常注冊路徑名/dev/ser1表示第一個(gè)串口。任何想訪問這個(gè)端口的應(yīng)用程序可以通過調(diào)用在/dev/se1上的open()函數(shù)來實(shí)現(xiàn)。對于應(yīng)用程序而言,open()函數(shù)和標(biāo)準(zhǔn)的POSIX接口一樣。
Neutrino C函數(shù)庫將這個(gè)調(diào)用轉(zhuǎn)成io_open消息并把這個(gè)消息轉(zhuǎn)發(fā)給串口驅(qū)動。如果應(yīng)用程序接下來要想串口寫一個(gè)字符,調(diào)用序列如下:客戶端調(diào)用write()函數(shù),C函數(shù)庫會構(gòu)建一個(gè)io_write消息。這個(gè)消息會被轉(zhuǎn)發(fā)給驅(qū)動。
這樣帶來的另一個(gè)好處是只要該服務(wù)支持某特定的功能,確切的消息就可以從任何客戶端發(fā)送給任何服務(wù)。比如,向一個(gè)串口或磁盤文件寫一個(gè)字符串,應(yīng)用程序在這兩種情況可以調(diào)用相同的write()函數(shù),唯一的區(qū)別是消息要發(fā)送的地方。這意味著應(yīng)用程序和它依賴的服務(wù)是解耦的。這種解耦可以使開發(fā)簡單化,因?yàn)閼?yīng)用程序和系統(tǒng)服務(wù)之間所有的交互可以用一個(gè)簡單的基于POSIX的編程模型來實(shí)現(xiàn)。
這樣簡化了代碼移植到其他平臺因?yàn)閼?yīng)用程序不包含任何硬件或協(xié)議特定的代碼。
通過給客戶提供比如庫,驅(qū)動和BSP的源碼,QNX Neutrino進(jìn)一步簡化了問題定位和OS的定制化開發(fā)。開發(fā)者可以免費(fèi)下載設(shè)備驅(qū)動包(Device Drive Kits, DDKs)。DDKs包含文檔和一個(gè)軟件框架。這個(gè)軟件框架實(shí)現(xiàn)了庫中更高級別的獨(dú)立設(shè)備的代碼。
在涵蓋大多數(shù)Linux源代碼的GPL中未提供QNX源代碼。然而,QNX軟件系統(tǒng)基于它們自己的License協(xié)議提供源碼。不像GPL,可以讓開發(fā)人員自由創(chuàng)作衍生作品,而不必放棄知識產(chǎn)權(quán)(IP)。
作為宏操作系統(tǒng),Linux將大部分的驅(qū)動,文件系統(tǒng)和協(xié)議中都綁進(jìn)了內(nèi)核中。因此這些模塊中任何一個(gè)單一的編程錯(cuò)誤就有可能導(dǎo)致致命的內(nèi)核錯(cuò)誤。在QNX Neutrino中,這些模塊都運(yùn)行在獨(dú)立的、內(nèi)存保護(hù)的地址空間中,內(nèi)核崩潰很難發(fā)生。因此QNX Neutrino為實(shí)時(shí)應(yīng)用程序提供了一個(gè)比Linux更健壯的環(huán)境。并且也肯定比雙內(nèi)核方法中使用的不受保護(hù)的實(shí)時(shí)內(nèi)核強(qiáng)得多。
QNX附加值:
QNX Neutrino提供了QNX微網(wǎng)絡(luò)服務(wù),允許消息在處理器邊界之間透明地流動。這意味著任何進(jìn)程都可以訪問任何資源任何網(wǎng)絡(luò)節(jié)點(diǎn)就好像它們在本地一樣。如果驅(qū)動的路徑名在本地,QNX微內(nèi)核可以直接路由這個(gè)消息。如果這個(gè)驅(qū)動在遠(yuǎn)程節(jié)點(diǎn)上,QNX微網(wǎng)絡(luò)會透明的將這個(gè)消息轉(zhuǎn)發(fā)給對應(yīng)節(jié)點(diǎn)。
網(wǎng)絡(luò)流量可以在所有可用鏈路上實(shí)現(xiàn)負(fù)載均衡,從而提高吞吐量。該服務(wù)是內(nèi)置的,應(yīng)用程序不需要任何特殊的網(wǎng)絡(luò)代碼。
QNX微內(nèi)核體系結(jié)構(gòu)的細(xì)粒度可擴(kuò)展性使得運(yùn)行時(shí)環(huán)境比Linux小得多。
Photon microGUI也使用微內(nèi)核的架構(gòu)。因此,設(shè)計(jì)人員可以輕松地“拔出”內(nèi)存受限設(shè)備不需要的GUI服務(wù)。
QNX支持TCP/IP, NFS和Linux文件系統(tǒng)。因此使用QNX和Linux混合工作站的開發(fā)商店可以在這兩種環(huán)境中分享資源。簡而言之,Linux和QNX Neutrino不僅可以共存,還可以做更多的事情。相反,跟其他實(shí)時(shí)或通用的操作系統(tǒng)相比,它們?yōu)殚_發(fā)人員提供了更廣泛的在應(yīng)用程序中使用相同的API,源代碼和技能點(diǎn)的機(jī)會。
QNX 支持 MIPS, PowerPC, SH4, StrongArm, xScale, and x86硬件架構(gòu)。它可以從受約束的嵌入式平臺擴(kuò)展到多處理器平臺。該體系結(jié)構(gòu)提供多任務(wù)處理,優(yōu)先級驅(qū)動的搶先式調(diào)度,同步和TCP/IP協(xié)議。同時(shí)還提供了包括PPP,DHCP,NFS,RPC和SNMP的實(shí)用程序。
QNX具有稱為Qnet的基于消息的本機(jī)網(wǎng)絡(luò)。
Photon microGUI桌面系統(tǒng)是一個(gè)內(nèi)存占用很小的GUI。
對于GUI應(yīng)用程序,QNX有一個(gè)叫Photon Application Builder(PhAB)的集成開發(fā)環(huán)境。不像Visual Basic,它沒有拖拽控制。
自我托管功能簡化了開發(fā)
QNX使用GNU GCC編譯器
QNX RTP支持GCC-2.95 C和C++。而且QCC作為一個(gè)GCC前端的抽象層屏蔽了不同編譯器(GNU GCC, Watcom和Metrowerks)之間的差異。還有一個(gè)CC端用來屏蔽可用編譯器之間的差異。該前端還可以基于文件擴(kuò)展名調(diào)用對應(yīng)的編譯器(C或C ++)。目前它調(diào)用GCC/G++。對于項(xiàng)目代碼管理,QNX的發(fā)行版本中包含了make, CVS和RCS這些工具。
支持GCC編譯器的交叉編譯版本,允許開發(fā)者在Windows平臺上開發(fā)Neutrino應(yīng)用程序。
結(jié)論
在QNX中,實(shí)時(shí)和非實(shí)時(shí)環(huán)境是一樣的。實(shí)時(shí)應(yīng)用程序可以充分使用POSIX API和訪問系統(tǒng)服務(wù)。POSIX/Linux應(yīng)用程序可以立刻獲得確定的行為。由于實(shí)時(shí)和非實(shí)時(shí)應(yīng)用程序運(yùn)行在相同的基于消息的環(huán)境中,進(jìn)程之間的通信就非常簡單了。減少重復(fù)工作。像之前討論的,雙內(nèi)核方式會逼迫開發(fā)者使用不熟悉的API開發(fā)定制驅(qū)動。在大部分的操作系統(tǒng)環(huán)境中,開發(fā)這些驅(qū)動要求內(nèi)核調(diào)試工具(非常難用),內(nèi)核重新編譯(非常耗時(shí))和內(nèi)核編程(成本高)。QNX Neutrino通過幾種方式解決了這個(gè)問題。首先,像任何已具有大量用戶群的OS一樣,QNX支持各種用于標(biāo)準(zhǔn)硬件的現(xiàn)成驅(qū)動程序。并且,就像我們看到的,QNX在用戶空間運(yùn)行驅(qū)動,因此可以使用標(biāo)準(zhǔn)的代碼級別的工具和技術(shù)。QNX DDKs讓開發(fā)變得更簡單了。DDK提供文檔,庫文件,頭文件和可定制的各種驅(qū)動程序源。除了微內(nèi)核的功能,由于微內(nèi)核實(shí)時(shí)操作系統(tǒng)的設(shè)計(jì)是為了滿足嵌入式系統(tǒng)的要求,QNX Neutrino還為Linux開發(fā)人員提供標(biāo)準(zhǔn)Linux或?qū)崟r(shí)Linux擴(kuò)展均不具備的功能。
與QNX相比,Linux有更大的開發(fā)人員社區(qū),軟件社區(qū)和真正的開源代碼,以及更大的平臺社區(qū)。ELC和CELF正在使嵌入式Linux標(biāo)準(zhǔn)化。嵌入式Linux的最新版本要求具有完全POSIX兼容性的硬RTOS。
審核編輯:湯梓紅
-
嵌入式
+關(guān)注
關(guān)注
5142文章
19561瀏覽量
315402 -
Web
+關(guān)注
關(guān)注
2文章
1284瀏覽量
70891 -
Linux
+關(guān)注
關(guān)注
87文章
11469瀏覽量
212901 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7103瀏覽量
125036 -
qnx
+關(guān)注
關(guān)注
0文章
89瀏覽量
26560
原文標(biāo)題:QNX和Linux嵌入式發(fā)展史
文章出處:【微信號:談思實(shí)驗(yàn)室,微信公眾號:談思實(shí)驗(yàn)室】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
恒壓變壓器的發(fā)展史
基于Beaglebone的QNX嵌入式實(shí)時(shí)系統(tǒng)
嵌入式Linux
MCU發(fā)展史
嵌入式系統(tǒng)的發(fā)展歷史
詳解嵌入式實(shí)時(shí)Linux
5G的發(fā)展史
基于QNX的嵌入式液位監(jiān)控系統(tǒng)設(shè)計(jì)
嵌入式Linux
基于 QNX 的嵌入式液位監(jiān)控系統(tǒng)設(shè)計(jì)

嵌入式系統(tǒng)學(xué)習(xí)筆記之QNX

嵌入式系統(tǒng)筆記

評論