小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

VxWorks網(wǎng)絡(luò)協(xié)議棧的MUX接口

 WUCANADA 2012-10-07

VxWorks網(wǎng)絡(luò)協(xié)議棧的MUX接口

分類: VxWorks 501人閱讀 評論(0) 收藏 舉報

VxWorks網(wǎng)絡(luò)協(xié)議棧的MUX接口

中國礦業(yè)大學(xué) 張曉華 李智濤徐釗

 

摘要 嵌入式系統(tǒng)網(wǎng)絡(luò)協(xié)議棧的靈活性在應(yīng)用上是一個重要的指標(biāo)。介紹嵌入式操作系統(tǒng)VxWorks網(wǎng)絡(luò)協(xié)議棧的MUX(Multiplexer)接口及其使用方法。

關(guān)鍵詞 VxWorks 網(wǎng)絡(luò)協(xié)議棧 MUX

 

VxWorks是美國Wind River System公司(風(fēng)河公司)推出的一個運行在目標(biāo)機上的高性能、可裁減的嵌入式實時操作系統(tǒng)。它以其良好的可靠性和卓越的實時性被廣泛地應(yīng)用在通信、軍 事、航空、航天等高精尖技術(shù)及實時性要求極高的領(lǐng)域中,如衛(wèi)星通信、軍事演習(xí)、彈道制導(dǎo)、飛機導(dǎo)航等。VxWorks操作系統(tǒng)包括進程管理、存儲管理、設(shè) 備管理、文件系統(tǒng)管理、網(wǎng)絡(luò)協(xié)議及系統(tǒng)應(yīng)用等幾個部分。VxWorks只占用很小的存儲空間,并可高度裁減,保證了系統(tǒng)能以較高的效率運行。它可以根據(jù)用 戶需求進行組合,其開放式結(jié)構(gòu)對工業(yè)標(biāo)準(zhǔn)的支持使開發(fā)者只須做最少的工作即可設(shè)計有效的適合于不同用戶的要求。

1 VxWorks的網(wǎng)絡(luò)協(xié)議棧和MUX接口

VxWorks中的網(wǎng)絡(luò)協(xié)議棧叫作SENS(Scalable EnhancedNetwork Stack),即可裁減增強網(wǎng)絡(luò)協(xié)議棧。SENS是基于4.4 BSD TCP/IP協(xié)議棧發(fā)展而來的,包含了許多4.4 BSD TCP/IP協(xié)議棧沒的協(xié)議;而且SENS在實現(xiàn)一些協(xié)議功能時增加了許多新特性,如在IP協(xié)議實現(xiàn)時增加了多播功能。SENS協(xié)議棧層次如圖1所示。

SENS的基本特征和傳統(tǒng)的TCP/IP網(wǎng)絡(luò)協(xié)議棧相似,但從圖1中可以看出SENS最大的特點是在數(shù)據(jù)鏈路層和網(wǎng)絡(luò)協(xié)議層之間多了MUX層。在 SENS中,網(wǎng)絡(luò)接口的驅(qū)動程序是叫作END(Enhanced NetworkDriver),即增強型網(wǎng)絡(luò)驅(qū)動程序,它處于數(shù)據(jù)鏈路層。IP層和TCP/UDP層合稱為網(wǎng)絡(luò)協(xié)議層。在數(shù)據(jù)鏈路層和網(wǎng)絡(luò)協(xié)議層之間有應(yīng)用程序接口 (API),這個接口在SENS中叫作MUX(Multiplexer)接口。MUX接口如圖2所示。

在網(wǎng)絡(luò)協(xié)議層,VxWorks典型地使用TCP/IP協(xié)議(也支持其它協(xié)議);在數(shù)據(jù)鏈路層典型地使用Ethernet,也支持其它數(shù)據(jù)傳輸?shù)奈锢? 媒體,例如遠(yuǎn)距離連接使用的串行線路接入方式,如PPP等。但是,無論使用什么物理媒體,網(wǎng)絡(luò)接口驅(qū)動都要用到MUX去與網(wǎng)絡(luò)協(xié)議層通信(數(shù)據(jù)鏈路層是一 個抽象概念,網(wǎng)絡(luò)接口驅(qū)動程序則是這種抽象概念所描述的功能實現(xiàn)的代碼)。

在4.3 BSD中,VxWorks的網(wǎng)絡(luò)接口驅(qū)動和協(xié)議是緊密結(jié)合在一起的,它們通過傳遞特定的數(shù)據(jù)結(jié)構(gòu)互通信;而在MUX基礎(chǔ)上,它們只是通過 MUX間接地相互作用。例如,在收到一個包后,網(wǎng)絡(luò)接口驅(qū)動并沒直接與協(xié)議層連接。同樣地,當(dāng)網(wǎng)絡(luò)接口驅(qū)動準(zhǔn)備好向協(xié)議層發(fā)送數(shù)據(jù)時,驅(qū)動程序會調(diào)用一個 MUX提供的功能(函數(shù))。這個功能(函數(shù))具體負(fù)責(zé)將數(shù)據(jù)傳給協(xié)議層的動作細(xì)節(jié)。應(yīng)用MUX的主要目的是把網(wǎng)絡(luò)接口驅(qū)動和協(xié)議層分開,這樣就使得網(wǎng)絡(luò)接口驅(qū)動和協(xié)議層彼此基本上保持獨立。這種獨立性使得加載一個新的協(xié)議或網(wǎng)絡(luò)接口驅(qū)動,所有現(xiàn)有的基于MUX的協(xié)議就都可以用這個新的網(wǎng)絡(luò)接口驅(qū)動程序;同樣,如果要加一個新的基于MUX的協(xié)議,現(xiàn)有的網(wǎng)絡(luò)接口驅(qū)動也能夠用MUX來與新協(xié)議通信。

2 MUX接口工作流程分析

MUX層作為獨立的一個網(wǎng)絡(luò)層有其自己的功能函數(shù),但這些功能函數(shù)只是其上下兩層通信的接口。網(wǎng)絡(luò)協(xié)議層和網(wǎng)絡(luò)驅(qū)動與MUX接口的調(diào)用關(guān)系如圖3所示。

網(wǎng)絡(luò)協(xié)議棧的協(xié)議提供下面的接口功能函數(shù):

(1)stackShutdownRtn()

(2)stackError()

(3)stackRcvRtn()

(4)stackTxRestartRtn()

當(dāng)MUX接口層需要與協(xié)議層相互通信時,就調(diào)用以上的功能函數(shù)。想要使網(wǎng)絡(luò)協(xié)議層能夠使用MUX,必須至少實現(xiàn)以上四個功能函數(shù)。

MUX則實現(xiàn)muxBind()、muxUnBind()、muxDevload()等等。網(wǎng)絡(luò)協(xié)議層和網(wǎng)絡(luò)驅(qū)動接口都要根據(jù)各自的需要使用MUX接入點。由于MUX是由系統(tǒng)提供的,不需要在應(yīng)用時再進行額外的編碼工作;只要在使用時,填入正確的參數(shù)即可。

例如在VxWorks中,muxDevLoad是這樣定義的:

/* loada driver into the MUX */

void* muxDevLoad

    (

    int        unit,                    /* unit number ofdevice */

    END_OBJ*   (*endLoad) (char*, void*),  /* load function ofthe driver  */

    char*      pInitString,             /* initstring for this driver  */

    BOOL       loaning,                 /* weloan buffers  */

    void*      pBSP                     /* for BSP group  */

    );

網(wǎng)絡(luò)協(xié)議棧MUX中的其它功能函數(shù)在muxLib.h(c)文件中有詳細(xì)定義。

網(wǎng)絡(luò)接口的驅(qū)動程序要完成endLoad()、endUnload()、endSend()等功能函數(shù)。MUX使用這些功能函數(shù)來與網(wǎng)絡(luò)驅(qū)動程序通信。當(dāng)編寫或加載一個使用MUX的網(wǎng)絡(luò)驅(qū)動程序時,必須實現(xiàn)圖3中END的所有功能。這些功能函數(shù)都是針對具體的網(wǎng)絡(luò)接口,即每一個網(wǎng)絡(luò)驅(qū)動程序中都要有這些功能函數(shù)。

3 MUX的應(yīng)用

3.1 系統(tǒng)如何通過MUX啟動和使用網(wǎng)絡(luò)接口驅(qū)動程序——END

系統(tǒng)啟動時要通過任務(wù)(與進程概念相近,是嵌入式操作系統(tǒng)中的執(zhí)行單元)來執(zhí)行以下功能:

(1)從存儲器中裝載并啟動END;

(2)注冊用來處理END的中斷;

(3)通過END來實現(xiàn)處理包的功能。

在系統(tǒng)啟動時,VxWorks產(chǎn)生一tUsrRoot任務(wù)來執(zhí)行以下的功能:首先初始化網(wǎng)絡(luò)任務(wù)的工作隊列,然后netLibInit()中產(chǎn)生一個tNetTask來處理網(wǎng)絡(luò)任務(wù)工作隊列中的任務(wù)。

tNetTask任務(wù)調(diào)用muxDevLoad()來裝載網(wǎng)絡(luò)接口驅(qū)動,在tNetTask中已經(jīng)定義了網(wǎng)絡(luò)驅(qū)動設(shè)備的endLoad()接入點, muxDevLoad()則也要執(zhí)行endLoad()。EndLoad()執(zhí)行設(shè)備初始化并且返回一個名為END_OBJ的結(jié)構(gòu)。MUX通過在 END_OBJ上加一個指針,指向能完成將數(shù)據(jù)向MUX上層發(fā)送的功能(函數(shù))。然后MUX把返回的END_OBJ加到END_OBJ結(jié)構(gòu)鏈表中。這個鏈 表包括目前系統(tǒng)中所有可用的網(wǎng)絡(luò)設(shè)備。當(dāng)從muxDevLoad()返回后,網(wǎng)絡(luò)設(shè)備就準(zhǔn)備好可以使用了。

我們必須調(diào)用sysIntConnect()來注冊網(wǎng)絡(luò)接口設(shè)備的中斷處理。最典型的調(diào)用 sysIntConnect()是在網(wǎng)絡(luò)接口設(shè)備的endStart()中。當(dāng)通過muxDevLoad()來裝載網(wǎng)絡(luò)接口設(shè)備時,就會調(diào)用 muxDevStart()來啟動該設(shè)備, muxDevStart()就會調(diào)用endStart(),從而進行中斷處理的注冊。

系統(tǒng)啟動后,就要依靠中斷來使用該設(shè)備。當(dāng)從網(wǎng)絡(luò)設(shè)備的中斷來到時,VxWorks激活該設(shè)備驅(qū) 動程序所注冊的中斷服務(wù)。中斷服務(wù)的工作量應(yīng)該是最小的,只需完成從本地硬件上取到包即可。為了使中斷的鎖定時間最少,中斷服務(wù)應(yīng)該僅處理那些要求最少執(zhí) 行時間的任務(wù),例如出錯和狀態(tài)改變。中斷服務(wù)為了讓所有耗時的工作在任務(wù)級別處理,應(yīng)該將其排隊。例如:要使在任務(wù)級別處理包接受的工作排隊,中斷服務(wù)必須調(diào)用netJobAdd()。在輸入的時候,這個例行程序(Routine)收到一個功能函數(shù)的指針并且直到收到五個額外的參數(shù)(指針?biāo)腹δ芎瘮?shù)的參數(shù))。

STATUS netJobAdd

    (

    FUNCPTR routine,

    int param1,

    int param2,

    int param3,

    int param4,

    int param5

    );

如果調(diào)用netJobAdd(),就必須定義網(wǎng)絡(luò)驅(qū)動在任務(wù)級別處理包的接入點。netJobAdd例行程序?qū)⒐δ芎瘮?shù)調(diào)用(包括其參數(shù))放入tNetTask的任務(wù)隊列中。VxWorks使用tNetTask處理任務(wù)級別的網(wǎng)絡(luò)處理功能。

這里只是舉例說明了接收包的情況,其它情況下netJobAdd()也一樣能執(zhí)行對應(yīng)的入列功能。

3.2 基于MUX網(wǎng)絡(luò)協(xié)議棧的網(wǎng)絡(luò)協(xié)議層和網(wǎng)絡(luò)接口驅(qū)動程序

基于MUX的特點:提供一個接口,使與其相連各層程序的編寫只需在基礎(chǔ)上編寫即可??梢哉f不論是網(wǎng)絡(luò)協(xié)議層還是網(wǎng)絡(luò)接口驅(qū)動程序都可以把MUX看作 應(yīng)用程序接口(API)。在VxWorks目標(biāo)系統(tǒng)中加載一個網(wǎng)絡(luò)接口設(shè)備的驅(qū)動程序就和編寫一個應(yīng)用程序一樣的簡單。具體步驟如下:

(1)編譯驅(qū)動程序的源代碼并在VxWorks鏡像中加載;

(2)編輯target/src/config/BSP/configNet。h;

(3)編輯BSP的cfonfig。h文件。

注意,如果不重新編譯新的boot ROMs(啟動ROM),那么就不能使用新的END。這就是說,只能啟動一個沒有END的目標(biāo)系統(tǒng),所以必須編輯配置文件,才能使用新的END。

由圖3可知,基于MUX的網(wǎng)絡(luò)協(xié)議與MUX向上綁定,而網(wǎng)絡(luò)接口驅(qū)動是與MUX向下綁定的。協(xié)議層的主要功能是對傳輸層和應(yīng)用程序提供接口。協(xié)議層的代碼編寫也是通過MUX接口提供的接口進行編程,這和通用計算機有很大的相似之處,這里就不再述。

VxWorks的網(wǎng)絡(luò)協(xié)議棧SENS中的MUX接口對于開發(fā)應(yīng)用是十分方便的。利用這一特點可以在不同網(wǎng)絡(luò)環(huán)境中使用嵌入式操作系統(tǒng)。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多