• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于VxWorks的網(wǎng)卡驅(qū)動(dòng)設(shè)計(jì)

      2010-04-03 00:59:20王景剛鄧如玉楊小平
      關(guān)鍵詞:網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序網(wǎng)卡

      王景剛 鄧如玉 楊小平

      (1、哈爾濱工程大學(xué)自動(dòng)化學(xué)院,黑龍江 哈爾濱150001 2、哈爾濱工程大學(xué)自動(dòng)化學(xué)院,黑龍江 哈爾濱150001 3、武昌造船廠,湖北 武漢430060)

      引言

      VxWorks是一個(gè)具有微內(nèi)核、可裁剪的高性能強(qiáng)實(shí)時(shí)操作系統(tǒng),它以其良好的可靠性和卓越的實(shí)時(shí)性被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實(shí)時(shí)性要求極高的領(lǐng)域中。我校研制的綜合導(dǎo)航顯控臺(tái)采用VxWorks操作系統(tǒng),它作為船舶導(dǎo)航系統(tǒng)的核心設(shè)備實(shí)時(shí)為指揮系統(tǒng)、駕控系統(tǒng)等提供各種信息。當(dāng)需要更改海圖模塊硬盤中一些及時(shí)需要修改的數(shù)據(jù)、程序等信息時(shí),為避免拆卸設(shè)備,可以通過網(wǎng)絡(luò)傳輸來解決上述問題。本文以Intel82557網(wǎng)卡為例,提出了基于VxWorks的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序的開發(fā)方法和實(shí)現(xiàn)流程。

      1 VxWorks的網(wǎng)絡(luò)結(jié)構(gòu)

      VxWorks提供了與其他TCP/IP網(wǎng)絡(luò)系統(tǒng)間"透明"的存取方式、BSD Socket兼用的編程接口,遠(yuǎn)程過程調(diào)用(RPC),遠(yuǎn)程文件存取等。網(wǎng)絡(luò)驅(qū)動(dòng)程序和上層網(wǎng)絡(luò)協(xié)議??梢杂袃煞N實(shí)現(xiàn)形式:BSD方式和MUX方式。在VxWorks中,MUX與END(增強(qiáng)的網(wǎng)絡(luò)驅(qū)動(dòng)程序)合稱SENS驅(qū)動(dòng)(可裁剪增強(qiáng)型網(wǎng)絡(luò)驅(qū)動(dòng))。網(wǎng)卡驅(qū)動(dòng)程序的層次結(jié)構(gòu)使網(wǎng)卡驅(qū)動(dòng)程序的實(shí)現(xiàn)和移植更加方便。而且VxWorks為編寫網(wǎng)卡增強(qiáng)型驅(qū)動(dòng)程序(SENS)提供了很好的接口和規(guī)范。圖1是VxWorks的網(wǎng)絡(luò)系統(tǒng)。

      2 END驅(qū)動(dòng)概述

      2.1 MUX與END

      VxWorks網(wǎng)絡(luò)協(xié)議??梢苑譃橐韵聨讓樱簯?yīng)用層、傳輸層、IP層、MUX層、數(shù)據(jù)鏈路層和物理層。如圖2所示。

      從圖2看出,與其他TCP/IP協(xié)議相比Vx-Works網(wǎng)絡(luò)協(xié)議棧增加一層MUX層。MUX層是VxWorks為方便在網(wǎng)絡(luò)接口硬件上實(shí)現(xiàn)多種協(xié)議而增加的一層。它主要用于管理底層的多種硬件的設(shè)備驅(qū)動(dòng),向上層不同協(xié)議提供統(tǒng)一的接口,降低了上層協(xié)議與底層物理硬件的藕合,使得網(wǎng)絡(luò)驅(qū)動(dòng)和上層協(xié)議彼此保持獨(dú)立,既方便在現(xiàn)有硬件基礎(chǔ)上實(shí)現(xiàn)新的上層協(xié)議,也利于用新的硬件支持原有的上層協(xié)議。

      MUX與END的交互是通過提供一套可供底層調(diào)用接口服務(wù)來實(shí)現(xiàn)的,實(shí)現(xiàn)END驅(qū)動(dòng)必須遵循這套接口關(guān)系。如圖3所示。

      圖3中右邊框中列出的函數(shù)是驅(qū)動(dòng)需要實(shí)現(xiàn)的函數(shù),供MUX層調(diào)用在必要的時(shí)間調(diào)用,如當(dāng)上層使用該網(wǎng)卡發(fā)送數(shù)據(jù)時(shí),MUX會(huì)調(diào)用該網(wǎng)卡END驅(qū)動(dòng)提供的Send函數(shù),將數(shù)據(jù)提交給網(wǎng)卡芯片硬件。

      2.2 緩沖池?cái)?shù)據(jù)結(jié)構(gòu)

      網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)與上層協(xié)議進(jìn)行數(shù)據(jù)交換需要相應(yīng)的內(nèi)存緩沖,并且管理這些緩沖也需要相應(yīng)的函數(shù)。VxWorks提供了netBufLib函數(shù)庫(kù)用于創(chuàng)建和管理網(wǎng)絡(luò)設(shè)備用到的內(nèi)存緩沖池,網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)可以直接使用也可以在此基礎(chǔ)上設(shè)計(jì)自己特定的內(nèi)存緩沖池。數(shù)據(jù)以簇的形式保存,數(shù)據(jù)結(jié)構(gòu)mBlks(內(nèi)存塊)和clBlks(簇塊)形成的數(shù)據(jù)鏈結(jié)構(gòu)則用于指定各個(gè)簇。

      在clBlk之上是mBlk結(jié)構(gòu)。該結(jié)構(gòu)存儲(chǔ)一個(gè)到clBlk的連接,也可以存儲(chǔ)一個(gè)到另一個(gè)mBlk的連接。通過mBlk的連接,可以引用任意數(shù)量的數(shù)據(jù),如圖4所示。

      3 END驅(qū)動(dòng)實(shí)現(xiàn)

      3.1 END設(shè)備驅(qū)動(dòng)程序裝載過程

      END設(shè)備驅(qū)動(dòng)程序裝載過程實(shí)際上是分三個(gè)步驟完成的。即指定END設(shè)備、裝載END設(shè)備和啟動(dòng)END設(shè)備。

      3.1.1 指定END設(shè)備

      網(wǎng)絡(luò)設(shè)備的驅(qū)動(dòng)程序安裝時(shí)通過修改相應(yīng)的BSP實(shí)現(xiàn)。在修改BSP之前,首先看一下BSP中的END設(shè)備驅(qū)動(dòng)程序入口表END_TBL_ENTRY的結(jié)構(gòu)。在BSP的configNet.h文件中定義著END_TBL_ENTRY結(jié)構(gòu)的數(shù)組endDevTbl[],其數(shù)據(jù)結(jié)構(gòu)如下所示。

      該數(shù)組描述了系統(tǒng)中的所有網(wǎng)絡(luò)設(shè)備的裝載函數(shù)入口點(diǎn)及其相關(guān)參數(shù)。將網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序的裝載函數(shù)rt8185lEndLoad()入口點(diǎn)及相關(guān)參數(shù)添加到網(wǎng)絡(luò)設(shè)備表endDevTbl[]中,而后在config.h中加入"#define INCLUDE_FEI_EN D"以使系統(tǒng)準(zhǔn)備初始化MUX并通過MUX裝載網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序。

      在VxWorks網(wǎng)絡(luò)驅(qū)動(dòng)程序的編程規(guī)范中,為了系統(tǒng)的高移植性、兼容性和可裁剪型等,通常在configNet.h文件中對(duì)系統(tǒng)支持的INTEL82557網(wǎng)絡(luò)設(shè)備定義一些宏,其編寫宏程序如下所示。

      3.1.2 裝載及啟動(dòng)END設(shè)備

      裝載及啟動(dòng)END設(shè)備的系統(tǒng)函數(shù)主要用到以下幾個(gè):

      (1).muxDevLoad()

      該函數(shù)裝載指定設(shè)備的驅(qū)動(dòng)程序裝載函數(shù)。如果要裝載END設(shè)備,系統(tǒng)必須調(diào)用muxDevLoad()函數(shù)。

      (2).muxDevStart()啟動(dòng)設(shè)備函數(shù)

      (3).muxBind()

      muxBind()可以將協(xié)議綁定到指定的END設(shè)備上。其調(diào)用過程是系統(tǒng)調(diào)用ipAttach()函數(shù),而該函數(shù)調(diào)用muxBind()函數(shù),綁定協(xié)議堆棧到MUX上的一個(gè)指定的網(wǎng)絡(luò)接口。當(dāng)一個(gè)網(wǎng)絡(luò)接口被關(guān)閉時(shí),ipAttach()函數(shù)將釋放網(wǎng)絡(luò)接口所關(guān)聯(lián)的TCP/IP堆棧模塊。

      裝載及啟動(dòng)END設(shè)備驅(qū)動(dòng)程序的流程如下:

      使用指定的END設(shè)備驅(qū)動(dòng)程序的BSP引導(dǎo)VxWorks系統(tǒng)時(shí),在引導(dǎo)過程中,系統(tǒng)將執(zhí)行任務(wù)tUsrRoot來完成如下各項(xiàng):(1)初始化網(wǎng)絡(luò)任務(wù)的工作隊(duì)列;(2)創(chuàng)建tNetTask任務(wù)來處理網(wǎng)絡(luò)任務(wù)工作隊(duì)列的條目;(3)調(diào)用muxDevLoad()裝載指定的網(wǎng)絡(luò)驅(qū)動(dòng)程序;(4)調(diào)用muxDevStart()啟動(dòng)指定的網(wǎng)絡(luò)驅(qū)動(dòng)程序。

      tUsrRoot任務(wù)調(diào)用MUX設(shè)備裝載函數(shù)muxDevLoad()和設(shè)備啟動(dòng)函數(shù)muxDevStart(),通過這兩個(gè)函數(shù)來裝載和啟動(dòng)設(shè)備驅(qū)動(dòng)程序。

      muxDevLoad()函數(shù)會(huì)根據(jù)網(wǎng)絡(luò)設(shè)備表end-DevTbl[]中的定義逐一調(diào)用各網(wǎng)絡(luò)設(shè)備的裝載函數(shù),其中這個(gè)函數(shù)是muxDevLoad()的一個(gè)輸入?yún)?shù)。muxDevStart()函數(shù)也會(huì)根據(jù)endDevTbl[]逐一調(diào)用網(wǎng)絡(luò)設(shè)備所定義的設(shè)備開始函數(shù)。至此MUX的初始化以及END驅(qū)動(dòng)程序的初始化工作已經(jīng)完成。但是網(wǎng)絡(luò)設(shè)備還是不可以使用,因?yàn)檫€需要將協(xié)議綁定到指定的END指定的設(shè)備上,這一步需要用muxBind()函數(shù)實(shí)現(xiàn)。

      在VxWorks中,系統(tǒng)通過usrRoot()函數(shù)調(diào)用usrNetInit()函數(shù)完成MUX的初始化、裝載網(wǎng)絡(luò)設(shè)備表endDevTbl[]中描述的所有設(shè)備并將IP協(xié)議綁定到網(wǎng)絡(luò)引導(dǎo)設(shè)備上等工作。

      網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序的安裝過程即圖5所示的網(wǎng)絡(luò)初始化順序。

      3.2 發(fā)送數(shù)據(jù)

      在VxWorks網(wǎng)絡(luò)系統(tǒng)中,發(fā)送數(shù)據(jù)的流程如圖6。

      通過對(duì)圖6分析,主要包含以下幾個(gè)處理。

      (1)用戶調(diào)用write()函數(shù),通過套接字訪問網(wǎng)絡(luò)。(2)網(wǎng)絡(luò)協(xié)議拷貝需要發(fā)送的數(shù)據(jù)到網(wǎng)絡(luò)緩區(qū)中,并調(diào)用協(xié)議驅(qū)動(dòng)程序的發(fā)送程序。(3)協(xié)議驅(qū)動(dòng)程序調(diào)用muxSend()啟動(dòng)發(fā)送循環(huán)。(4)muxSend()通過調(diào)用send()回調(diào)函數(shù),把緩沖區(qū)傳遞給END。(5)數(shù)據(jù)發(fā)送程序把數(shù)據(jù)拷貝到設(shè)備緩沖區(qū)中,并把它放置到設(shè)備的發(fā)送隊(duì)列中。(6)當(dāng)產(chǎn)生發(fā)送中斷時(shí),驅(qū)動(dòng)程序的中斷服務(wù)程序調(diào)度程序丟棄已發(fā)送的數(shù)據(jù)包,徹底清理發(fā)送隊(duì)列。

      3.3 接收數(shù)據(jù)

      在VxWorks網(wǎng)絡(luò)系統(tǒng)中,接收數(shù)據(jù)的流程如圖7。

      通過對(duì)圖7進(jìn)行分析,它主要包含以下幾個(gè)處理。(1)設(shè)備接收到數(shù)據(jù)包后直接把數(shù)據(jù)存放到預(yù)先分配的簇中。(2)當(dāng)接收到中斷時(shí),驅(qū)動(dòng)程序的中斷服務(wù)程序調(diào)度任務(wù)級(jí)接收程序進(jìn)行如下操作。①clBlk結(jié)構(gòu)和簇連接;mBlk和clBlk連接;最后構(gòu)成緩沖區(qū)。②通過調(diào)用receiveRtn()函數(shù),把緩沖區(qū)傳遞給更高級(jí)別的協(xié)議。(3)muxReceive()調(diào)用協(xié)議的stackRcvRtn()函數(shù),把成列的緩沖區(qū)傳遞給應(yīng)用。用戶使用read()函數(shù),通過套接字訪問網(wǎng)絡(luò)中的成列緩沖區(qū)

      3.4 驅(qū)動(dòng)程序的中斷處理

      中斷處理函數(shù)RT8185L INT()處理設(shè)備中斷。根據(jù)中斷狀態(tài)調(diào)用相應(yīng)的中斷處理程序,如接收終端程序、發(fā)送中斷程序等。當(dāng)網(wǎng)絡(luò)接口產(chǎn)生中斷時(shí),系統(tǒng)調(diào)用中斷服務(wù)程序。為了將終端阻塞減到最小,中斷驅(qū)動(dòng)程序只處理那些需要最小時(shí)間的工作,把其他耗時(shí)的任務(wù)排列到網(wǎng)絡(luò)任務(wù)的工作隊(duì)列中。為了排列任務(wù)級(jí)的包接收處理工作,網(wǎng)絡(luò)驅(qū)動(dòng)程序中斷服務(wù)程序必須調(diào)用netJobAdd()函數(shù)。在調(diào)用netJobAdd()函數(shù)時(shí),應(yīng)當(dāng)指定任務(wù)級(jí)處理數(shù)據(jù)包的驅(qū)動(dòng)程序入口。然后由netJobAdd()把函數(shù)指派到網(wǎng)絡(luò)系統(tǒng)任務(wù)--tNetTask的工作隊(duì)列中。VxWorks通過tNetTask處理任務(wù)級(jí)的網(wǎng)絡(luò)處理。

      tNetTask調(diào)用隊(duì)列中處理程序如下:(1)包接收程序:把接收到的數(shù)據(jù)包上傳到網(wǎng)絡(luò)緩沖區(qū)的堆棧中,通過一個(gè)調(diào)用上傳給MUX。(2)釋放所有發(fā)送幀程序:程序調(diào)用netClFree()函數(shù)釋放發(fā)送緩沖區(qū)中所有已經(jīng)發(fā)送的數(shù)據(jù)幀。

      4 結(jié)束語

      本文分析了RT8185L網(wǎng)卡驅(qū)動(dòng)程序在VxWorks操作系統(tǒng)下的實(shí)現(xiàn)。在網(wǎng)卡驅(qū)動(dòng)的設(shè)計(jì)開發(fā)過程中,著重說明網(wǎng)卡驅(qū)動(dòng)在結(jié)構(gòu)、在整個(gè)系統(tǒng)中的位置,中斷處理,收發(fā)包存儲(chǔ)空間分配等。RT8185L網(wǎng)卡驅(qū)動(dòng)程序應(yīng)用于我校綜合導(dǎo)航顯控臺(tái),有重要的現(xiàn)實(shí)意義。由于主控器內(nèi)部的差異,其他網(wǎng)卡在初始化、接收數(shù)據(jù)和發(fā)送數(shù)據(jù)方面會(huì)不同,但是在其他方面,可以參考上述驅(qū)動(dòng)程序。

      [1]周啟平、張揚(yáng),VxWorks下設(shè)備驅(qū)動(dòng)程序及BSP開發(fā)指南.[M]中國(guó)電力出版社.2004.

      [2]孔祥營(yíng)、張保山、俞烈彬,VxWorks驅(qū)動(dòng)及分布式編程.

      [M]中國(guó)電力出版社.2007.

      [3]Wind River Systems,Inc.VxWorks Network Protocol

      Toolkit Users Guide[K].California:Wind River,1999.

      [4]王守林、蘇建華,VxWorks下PCI網(wǎng)卡驅(qū)動(dòng)程序結(jié)構(gòu)與實(shí)現(xiàn).[J]工業(yè)控制計(jì)算機(jī).2005

      [5]景琦,基于VxWorks的設(shè)備驅(qū)動(dòng)和網(wǎng)絡(luò)通信.[D]西安科技大學(xué).2006.

      猜你喜歡
      網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序網(wǎng)卡
      在DDS 中間件上實(shí)現(xiàn)雙冗余網(wǎng)卡切換的方法
      一種基于C# 的網(wǎng)絡(luò)設(shè)備自動(dòng)化登錄工具的研制
      Server 2016網(wǎng)卡組合模式
      數(shù)據(jù)中心唯“快”不破
      挑戰(zhàn)Killer網(wǎng)卡Realtek網(wǎng)游專用Dragon網(wǎng)卡
      基于列車監(jiān)測(cè)網(wǎng)絡(luò)設(shè)備的射頻功放模塊設(shè)計(jì)
      基于三層交換技術(shù)架構(gòu)數(shù)字化校園網(wǎng)絡(luò)設(shè)備的配置與管理
      驅(qū)動(dòng)程序更新與推薦
      驅(qū)動(dòng)程序更新與推薦
      驅(qū)動(dòng)程序更新與推薦
      斗六市| 黑水县| 无极县| 福安市| 阳新县| 买车| 福鼎市| 乌拉特中旗| 延长县| 广丰县| 丽江市| 固安县| 陕西省| 承德市| 宁远县| 卢氏县| 舞钢市| 黑山县| 水城县| 四川省| 福州市| 阿荣旗| 哈尔滨市| 拜城县| 安顺市| 小金县| 三穗县| 通城县| 白城市| 潞西市| 富阳市| 塘沽区| 大新县| 镇平县| 德化县| 平山县| 美姑县| 北京市| 陇川县| 苏尼特左旗| 曲阜市|