四虎成人免费视频,国产一级a作爱视频免费观9看,色五月丁香亚洲,亚洲欧美性爱在线视频,1000部黄片免费观看一区,国产亚洲性生活视频播放,三级黄色在线视频网站

現(xiàn)在位置:范文先生網>理工論文>電子通信論文>QNX操作系統(tǒng)及網絡設備驅動模塊

QNX操作系統(tǒng)及網絡設備驅動模塊

時間:2023-02-21 00:04:05 電子通信論文 我要投稿
  • 相關推薦

QNX操作系統(tǒng)及網絡設備驅動模塊

摘要:介紹嵌入式操作系統(tǒng)QNX的微內核結構、基于io-net的網絡子系統(tǒng)、網絡設備驅動程序的組成;給出以以太網網設備驅動程序為例的詳細說明,包括初始化、從網絡設備接收數(shù)據,向網絡設備發(fā)送數(shù)據和網絡設備信息的統(tǒng)計。

    關鍵詞:QNX 網絡 驅動程序

QNX是業(yè)界公認的X86平臺上最好的嵌入式實時操作系統(tǒng)之一。它具有獨一無二的微內核實時平臺,建立在微內核和完全地址空間保護基礎之上,實時、穩(wěn)定、可靠,已經完成到PowerPC、MIPS、ARM等內核的移植,成為在國內廣泛應用的嵌入式實時操作系統(tǒng)。本文簡單介紹QNX內核和網絡結構的特點,針對目前熱門的網絡應用環(huán)境,討論QNX網絡設備驅動程序的結構和編寫。

1 QNX內核簡介

QNX的微內核結構是它區(qū)別于其它操作系統(tǒng)的顯著特點。目前嵌入式系統(tǒng)中,操作系統(tǒng)和應用程序之間的關系大概可以歸納為圖1~圖3所示的三種情況。

平板式內存結構,如圖1所示,所有的程序都使用同一個地址空間,不加保護;應用程序可以自由訪問所有空間,效率較高,但是任何應用程序指針錯誤都可能會導致內核崩潰。

大內核內存結構,如圖2所示,操作系統(tǒng)內核和各種驅動程序、網絡協(xié)議在同一個地址空間,應用程序在單獨空間;內核模塊同處于一個保護空間,運行效率高,(范文先生網m.htc668.com收集整理)應用程序無法直接訪問保護空間,系統(tǒng)穩(wěn)定性大大提高。缺點是,由于內核模塊(例如網絡驅動)處于保護空間,因此調試困難,任何驅動程序的修改都要重新編譯內核,無法做到驅動的動態(tài)加載和卸載。

QNX的微內核結構,如圖3所示,內核獨立自處于一個被保護的地址空間;驅動程序、網絡協(xié)議和應用程序處地程序空間中。

微內核結構的優(yōu)點:①驅動程序、網絡協(xié)議、文件系統(tǒng)等操作系統(tǒng)模塊和內核相互獨立,任何模塊的故障都不會導致內核的崩潰;②驅動程序、網絡協(xié)議、文件系統(tǒng)和應用程序都處于程序空間,都調用相同的內核API,開發(fā)與調試和應用程序沒有區(qū)別;③操作系統(tǒng)功能模塊可以根據需要動態(tài)地加載或卸載,不需要編譯內核。在高可靠性要求的情況下,可以編寫監(jiān)視模塊,對可靠性要求高的模塊進行監(jiān)視,必要的時候重新啟動或重新加載而無須重啟系統(tǒng)。高可靠性的內核結構使QNX具備了高可靠性嵌入式操作系統(tǒng)的本質特征。

在具有高可靠性內核的基礎上,QNX的創(chuàng)新設計使它同樣具有很高的效率。QNX最為引人注目的地方是,它是UNIX的同胞異構體,保持了和UNIX的高度相似性,絕大多數(shù)UNIX或LINUX應用程序可以在QNX下直接編譯生成。這意味著為數(shù)眾多的穩(wěn)定成熟的UNIX、LINUX應用可以直接移植到QNX這個更加穩(wěn)定高效的實時嵌入式平臺上來。

2 QNX網絡結構

QNZ網絡子系統(tǒng)由三個部分組成:網絡管理模塊(io-net)、網絡協(xié)議模塊(npm-qnet.so、npm-tcpip.so)、網絡設備驅動模塊(devn-ne2000.so)。

模塊之間的層次關系如圖4所示。

圖4中的每個模塊各自具有不同的功能,但是它們具有一些相同的屬性。如:網絡設備驅動、TCP/IP協(xié)議棧分別對上層io-net模塊和應用程序產生數(shù)據,兩者都可以被看作數(shù)據源;同時它們也接受上層發(fā)來的數(shù)據,又可以同時被看作數(shù)據的消費者。過濾模塊對向上的數(shù)據進行篩選,分協(xié)議進行處理;對向下的數(shù)據則進行相應的轉換,如進行網絡地址轉換NAT。轉換模塊負責不同協(xié)議幀結構的轉換,在以太網的工作環(huán)境下,它就負責對IP數(shù)據報進行以太網幀的封裝和解包。

和QNX其它服務進程一樣,QNX的網絡子系統(tǒng)也在內核外部空間運行。應用程序面對的是一個統(tǒng)一的網絡接口,硬件相關的內容被完全包裝在網絡子系統(tǒng)內。

QNX網絡子系統(tǒng)的三個子模塊按層次分開,io-net模塊處于中心,是QNX網絡的核心和重點,其它模塊都掛接在它上面。數(shù)據和信息的流動都必須經由io-net調度與轉發(fā),所有其它模塊所面對的就是一個單一主體。這樣的中心交換結構,屏蔽了各個模塊間相互協(xié)調的復雜細節(jié),在很大程序上方便了模塊的編寫工作;同時,io-net還是QNX的網絡管理中心。任何網絡協(xié)議和網絡設備驅動程序都必須向io-net注冊,由它來加載,并接受io-net的配置和管理,用戶對網絡狀態(tài)的查詢和管理也是通過io-net來實現(xiàn)的。

3 QNX網絡設備驅動

QNX網絡設備驅動模塊處于網絡硬件和io-net模塊之間。驅動模塊負責配置硬件使其正常工作,向io-net報告數(shù)據收發(fā)情況,接收和傳遞數(shù)據,接受io-net的調度和管理。QNX網絡設備驅動程序依照以上功能,分為初始化、接收發(fā)送數(shù)據、網絡設備信息統(tǒng)計幾個功能塊。要使網絡設備工作正常,驅動程序就要對它進行一定的寄存器配置,同時,還要向QNX網絡子系統(tǒng)注冊自己,表明網絡設備的存在和網絡通信能力,才能為系統(tǒng)和應用程序所用。在初始化工作完成以后,網絡設備就進入了工作狀態(tài),收發(fā)數(shù)據。設備信息的統(tǒng)計也是由設備驅動程序來完成的。

(1)初始化

初始化包括兩個方面,一方面是初始化網絡設備,使其正常工作;另一個方面,是向io-net正確注冊驅動模塊,表明自己的屬性,方便上層正確操作。網絡設備的初始化工作和硬件緊密相關,這里就不一一描述。

驅動模塊向io-net加載自己的時候,系統(tǒng)遵循如下工作流程:

①io-net搜索全局的符合io_net_dll_entry。它定義了驅動的初始化函數(shù),io-net會直接調用這個函數(shù)。

②初始化函數(shù)向io-net注冊驅動和相應的函數(shù)。

③初始化函數(shù)告訴io-net和它的模塊自己的通信能力。

經過以上流程以后,io-net中就建立起有關此驅動程序的數(shù)據和函數(shù)調用列表。驅動程序必須正確編寫初始化函數(shù),并將該函數(shù)正確鏈接至io_net_dll_entry。

(2)從網絡設備接收數(shù)據

當有包到達網絡設備的時候,網絡設備就會用某種方式通知驅動程序(例如中斷),此時,驅動程序就要采取某種策略來處理到來的幀或數(shù)據。通常驅動程序這時候需要做以下工作:

①通過DMA將包取回來;

②做相應的必要處理,如通知網絡設備釋放當前幀的緩存,配置寄存器讓網絡設備等待下一幀到來等;

③通過調用io-net的tx_up_start()函數(shù)把包傳遞給上層模塊。

當上層所有的模塊都完成對這個包的處理以后,io-net調用我們驅動中的tx_done()函數(shù),它來做最后的處理工作。

tx_up_start()函數(shù)是設備驅動中比較關鍵的函數(shù),下面簡要部分一下這個函數(shù)的入口參數(shù)。

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--底層協(xié)議包頭長度,如以太網幀頭部長度;

int framelen_sub--尾部填充的長度,對于以太網這個值為零;

uint16_t cell、uint16_t endpoint--endpoint和cell是io-net在注冊的時候分配的用來區(qū)別不同的驅動;

uint16_t iface--接口號,可以讓同一個驅動負現(xiàn)多個相同硬件;

void *done_hdl--該指針指向tx_done()函數(shù)需要的額外數(shù)據。

(3)向網絡設備發(fā)送數(shù)據

當上層模塊需要硬件傳送包的時候,會調用io-net管理器的rx_down()函數(shù)。

int(*rx_down)(npkt_t*npkt,

void *func_hdl)

rx_down函數(shù)入口參數(shù)中,npkt是指向需要傳送的數(shù)據的結構指針,func_hdl是相應驅動模塊在io-net中的句柄。其中npt結構包含許多成員,其中的重要成員如表1所列。

表1 

cell、endpoint、iface 需要處理該包的硬件標識 buffers 指向包的指針 tot_iov 包含數(shù)據包的所有I/O矢量 Framelen 所有數(shù)據的長度,以字節(jié)為單位

驅動模塊在接收到io-net的調用后,就要配置網絡設備,讓它完成數(shù)據的發(fā)送工作。網絡設備發(fā)送數(shù)據所需要的信息都會在相應的數(shù)據結構中,如net_buf_t結構中保存了等待傳送的數(shù)據包的鏈接列表,配置DMA所需的物理地址在net_iov_t中等。驅動模塊要等待硬件完成這些包的傳送,并調用io-net的tx)done()函數(shù)通知上層模塊驅動程序已經完成了數(shù)據的發(fā)送。

4 網絡設備信息的統(tǒng)計

應用程序或者用戶可以通過網絡信息接口nicinfo工具來了解網絡工作狀態(tài)。信息的查詢都是通過io-net來進行的。驅動程序必須維護相應的狀態(tài)數(shù)據,方便io-net的查詢。網絡設備有一些共同的狀態(tài)屬性,如收到和發(fā)出的包的個數(shù)、發(fā)送錯誤的包的個數(shù)等,不同的網絡設備還會具有不同的屬性和狀態(tài),這些都可以在驅動程序中用數(shù)據結構詳細列明。

需要維護的數(shù)據結構中,主要的是Nic_t,它包括四個子結構;

CustNicStats--網絡信息入口;

EthernesStats_t--以太網狀態(tài);

GenStats_t--常用統(tǒng)計信息;

NetStats_t--網絡信息(包含常用統(tǒng)計信息)。

以上是驅動程序需要維護的數(shù)據。當用戶或應用程序要查詢這些信息的時候,它們就通過Nicinfo工具對/dev/io-net/en0調用devctl()函數(shù)來取得網絡信息。信息的取得是必須通過io-net來完成的,io-net對信息的查詢則是通過調用io_net_register_funs_t結構中所指向的函數(shù)來取得信息的。例:

#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);

}

結語

網絡設備的驅動是網絡系統(tǒng)的最低層和最基礎的模塊,是如今嵌入式開發(fā)中首先要解決的問題之一。由于QNX具有微內核的特點,其網絡設備驅動程序的開發(fā)不需要內核調試,更適合初學者掌握。本文對QNX操作系統(tǒng)及網絡設備驅動程序的介紹,可以幫助讀者對相關內容作初步了解。


【QNX操作系統(tǒng)及網絡設備驅動模塊】相關文章:

QNX 4.25設備驅動程序的編寫08-06

Vxworks嵌入式操作系統(tǒng)下網絡設備驅動程序設計08-06

PDP數(shù)據驅動模塊STV7610A及其應用08-06

新型IGBT/MOSFET驅動模塊SKHI22A/B08-06

無驅動USB認證模塊在電子商務中的應用08-06

QNX環(huán)境下多線程編程08-06

調研報告模塊08-17

模塊七總結與反饋08-09

“任務驅動”教學反思04-21