完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>
標簽 > qnx
Gordon Bell和Dan Dodge在1980年成立了Quantum Software Systems公司,他們根據大學時代的一些設想寫出了一個能在IBM PC上運行的名叫QUNIX(Quick UNIX)的系統,直到AT&T發律師函過來才把名字改成QNX。
Gordon Bell和Dan Dodge在1980年成立了Quantum Software Systems公司,他們根據大學時代的一些設想寫出了一個能在IBM PC上運行的名叫QUNIX(Quick UNIX)的系統,直到AT&T發律師函過來才把名字改成QNX。
QNX是一種商用的遵從POSIX規范的類Unix實時操作系統,目標市場主要是面向嵌入式系統。它可能是最成功的微內核操作系統之一。
QNX是一種商用的類Unix實時操作系統,遵從POSⅨ規范,目標市場主要是嵌入式系統[1]。QNX成立于1980年,是加拿大一家知名的嵌入式系統開發商。
Gordon Bell和Dan Dodge在1980年成立了Quantum Software Systems公司,他們根據大學時代的一些設想寫出了一個能在IBM PC上運行的名叫QUNIX(Quick UNIX)的系統,直到AT&T發律師函過來才把名字改成QNX。
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結構
QNX是業界公認的X86平臺上最好的嵌入式實時操作系統之一。它具有獨一無二的微內核實時平臺,建立在微內核和完全地址空間保護基礎之上,實時、穩定、可靠,已經完成到PowerPC、MIPS、ARM等內核的移植,成為在國內廣泛應用的嵌入式實時操作系統。雖然QNX本身并不屬于UNIX,但由于其提供了POSIX的支持,使得多數傳統UNIX程序在微量修改(甚至不需修改)后即可在QNX上面編譯與運行。
QNX內核簡介
QNX的微內核結構是它區別于其它操作系統的顯著特點。
平板式內存結構,如圖1所示,所有的程序都使用同一個地址空間,不加保護;應用程序可以自由訪問所有空間,效率較高,但是任何應用程序指針錯誤都可能會導致內核崩潰。
大內核內存結構,如圖2所示,操作系統內核和各種驅動程序、網絡協議在同一個地址空間,應用程序在單獨空間;內核模塊同處于一個保護空間,運行效率高,應用程序無法直接訪問保護空間,系統穩定性大大提高。缺點是,由于內核模塊(例如網絡驅動)處于保護空間,因此調試困難,任何驅動程序的修改都要重新編譯內核,無法做到驅動的動態加載和卸載。
QNX的微內核結構,內核獨立自處于一個被保護的地址空間;驅動程序、網絡協議和應用程序處于程序空間中。
微內核結構的優點:①驅動程序、網絡協議、文件系統等操作系統模塊和內核相互獨立,任何模塊的故障都不會導致內核的崩潰;②驅動程序、網絡協議、文件系統和應用程序都處于程序空間,都調用相同的內核API,開發與調試和應用程序沒有區別;③操作系統功能模塊可以根據需要動態地加載或卸載,不需要編譯內核。在高可靠性要求的情況下,可以編寫監視模塊,對可靠性要求高的模塊進行監視,必要的時候重新啟動或重新加載而無須重啟系統。高可靠性的內核結構使QNX具備了高可靠性嵌入式操作系統的本質特征。
在具有高可靠性內核的基礎上,QNX的創新設計使它同樣具有很高的效率。QNX最為引人注目的地方是,它是UNⅨ的同胞異構體,保持了和UNⅨ的高度相似性,絕大多數UNⅨ或LINUX應用程序可以在QNX下直接編譯生成。這意味著為數眾多的穩定成熟的UNⅨ、LINUX應用可以直接移植到QNX這個更加穩定高效的實時嵌入式平臺上來。
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網絡設備驅動
QNX網絡設備驅動模塊處于網絡硬件和io-net模塊之間。驅動模塊負責配置硬件使其正常工作,向io-net報告數據收發情況,接收和傳遞數據,接受io-net的調度和管理。QNX網絡設備驅動程序依照以上功能,分為初始化、接收發送數據、網絡設備信息統計幾個功能塊。要使網絡設備工作正常,驅動程序就要對它進行一定的寄存器配置,同時,還要向QNX網絡子系統注冊自己,表明網絡設備的存在和網絡通信能力,才能為系統和應用程序所用。在初始化工作完成以后,網絡設備就進入了工作狀態,收發數據。設備信息的統計也是由設備驅動程序來完成的。
?、懦跏蓟?/p>
初始化包括兩個方面,一方面是初始化網絡設備,使其正常工作;另一個方面,是向io-net正確注冊驅動模塊,表明自己的屬性,方便上層正確操作。網絡設備的初始化工作和硬件緊密相關,這里就不一一描述。
驅動模塊向io-net加載自己的時候,系統遵循如下工作流程:
①io-net搜索全局的符合io_net_dll_entry。它定義了驅動的初始化函數,io-net會直接調用這個函數。
②初始化函數向io-net注冊驅動和相應的函數。
③初始化函數告訴io-net和它的模塊自己的通信能力。
經過以上流程以后,io-net中就建立起有關此驅動程序的數據和函數調用列表。驅動程序必須正確編寫初始化函數,并將該函數正確鏈接至io_net_dll_entry。
?、茝木W絡設備接收數據
當有包到達網絡設備的時候,網絡設備就會用某種方式通知驅動程序(例如中斷),此時,驅動程序就要采取某種策略來處理到來的幀或數據。通常驅動程序這時候需要做以下工作:
?、偻ㄟ^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()函數需要的額外數據。
?、窍蚓W絡設備發送數據
當上層模塊需要硬件傳送包的時候,會調用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矢量
Framelen 所有數據的長度,以字節為單位
驅動模塊在接收到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_tsize,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操作系統及網絡設備驅動程序的介紹,可以幫助讀者對相關內容作初步了解。
有硬實時、微內核、模塊化、弱耦合、分布式的特點,從1980年誕生之初就是基于SOA架構設計,基于Client-Server的模型,
QNX是商業類Unix實時操作系統,主要針對嵌入式系統市場。它提供用戶可控制的、優先級驅動的、急者優先搶占的調度方式。
ZYNQ開發實例:在ZedBoard中的QNX操作系統運行過程
打開QNX Momentics IDE開發環境,File->QNX Source Package and BSP->Next...
安全啟動想必大家肯定很熟悉,它是通過對啟動過程的每個階段進行加密驗證,確保運行系統完整性的一種安全機制。如圖1所示,QNX的安全啟動可以保證由BootR...
上個世紀90年代末期,Web設備被吹捧為下一個劃時代的“大事件”,一種新型設備會產生一個新興市場從而會產生下一代消費IT巨頭。在拉斯維加斯的消費電子展上...
對于QNX系統和Linux系統的內核差異,我們拋開宏內核、微內核之類的爭議不談。單純從開發應用的角度而言,QNX和Linux系統的差異到底有多大,在開發...
調度算法,是基于優先級的。QNX的線程優先級,是一個0-255的數字,數字越大優先級越高。所以,優先級0是內核中的idle線程。同時,優先級64是一個分界嶺。
高效從軟件開始:QNX Hypervisor化繁為簡,打造穩固嵌入式系統
2015年3月2日,中國北京——黑莓有限公司子公司QNX軟件系統有限公司今日宣布推出QNX? Hypervisor 1.0,類型1(裸機)虛擬機平臺,適...
2014年11月10日,中國北京——黑莓有限公司子公司及全球互聯嵌入式系統軟件平臺領導廠商QNX軟件系統有限公司宣布,QNX?汽車安全操作系統1.0現已...
德賽西威一次性成功通過Automotive SPICE CL2過程和能力評估
7月30日,德賽西威儀表與信息娛樂系統第二事業單元開發的域控制器項目,一次性成功通過Automotive SPICE CL2過程和能力評估。 標志著德賽...
作為德州儀器 (TI) 汽車信息娛樂系統處理器業務部的業務開發與產品營銷經理,我經常有機會游走世界各地,與汽車信息娛樂系統領域的最優秀人士探討技術問題。...
QNX軟件系統有限公司日前宣布QNX Neutrino 實時操作系統(RTOS) Certified Plus產品即將問世,這是首款能夠同時提供產品安全...
QNX CAR平臺全新版本包含Android應用和Qt用戶界面 拓展設計選擇
8月26日,全球車載電子軟件平臺領導廠商QNX軟件系統有限公司近日推出用于信息娛樂系統的QNX CAR? 平臺的全新版本,可幫助信息娛樂系統開發人員利用...
華陽通用選用QNX CAR應用平臺 為中國汽車制造商引入先進的信息娛樂解決方案
8月26日,全球車載電子軟件平臺領導廠商QNX軟件系統有限公司今日宣布,全球汽車市場車載導航及信息娛樂系統主要供應商——華陽通用電子有限公司已選用QNX...
黑莓有限公司子公司QNX軟件系統有限公司今日在于拉斯維加斯舉行的CES 2016上(展位號:拉斯維加斯會展中心北廳325號)展示了其備受信賴的軟件基石如...
黑莓有限公司子公司及全球互聯嵌入式系統軟件平臺領導廠商QNX軟件系統有限公司宣布,由QNX? Neutrino?操作系統及QNX中間件技術支持的信息娛樂...
全球車載信息娛樂和車聯網軟件平臺領導廠商QNX軟件系統有限公司近日宣布加入車聯網聯盟(CCC),該組織推動以手機為中心的車聯網解決方案的創新。車聯網...
2012-04-20 標簽:車聯網QNXMirrorLink 1787 0
編輯推薦廠商產品技術軟件/工具OS/語言教程專題
電機控制 | DSP | 氮化鎵 | 功率放大器 | ChatGPT | 自動駕駛 | TI | 瑞薩電子 |
BLDC | PLC | 碳化硅 | 二極管 | OpenAI | 元宇宙 | 安森美 | ADI |
無刷電機 | FOC | IGBT | 逆變器 | 文心一言 | 5G | 英飛凌 | 羅姆 |
直流電機 | PID | MOSFET | 傳感器 | 人工智能 | 物聯網 | NXP | 賽靈思 |
步進電機 | SPWM | 充電樁 | IPM | 機器視覺 | 無人機 | 三菱電機 | ST |
伺服電機 | SVPWM | 光伏發電 | UPS | AR | 智能電網 | 國民技術 | Microchip |
開關電源 | 步進電機 | 無線充電 | LabVIEW | EMC | PLC | OLED | 單片機 |
5G | m2m | DSP | MCU | ASIC | CPU | ROM | DRAM |
NB-IoT | LoRa | Zigbee | NFC | 藍牙 | RFID | Wi-Fi | SIGFOX |
Type-C | USB | 以太網 | 仿真器 | RISC | RAM | 寄存器 | GPU |
語音識別 | 萬用表 | CPLD | 耦合 | 電路仿真 | 電容濾波 | 保護電路 | 看門狗 |
CAN | CSI | DSI | DVI | Ethernet | HDMI | I2C | RS-485 |
SDI | nas | DMA | HomeKit | 閾值電壓 | UART | 機器學習 | TensorFlow |
Arduino | BeagleBone | 樹莓派 | STM32 | MSP430 | EFM32 | ARM mbed | EDA |
示波器 | LPC | imx8 | PSoC | Altium Designer | Allegro | Mentor | Pads |
OrCAD | Cadence | AutoCAD | 華秋DFM | Keil | MATLAB | MPLAB | Quartus |
C++ | Java | Python | JavaScript | node.js | RISC-V | verilog | Tensorflow |
Android | iOS | linux | RTOS | FreeRTOS | LiteOS | RT-THread | uCOS |
DuerOS | Brillo | Windows11 | HarmonyOS |