色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于VxWorks的網卡驅動設計案例

冬至子 ? 來源:北南南北 ? 作者:gaitpu ? 2023-06-15 11:24 ? 次閱讀

摘 要:隨著嵌入式技術在軍工、信息家電中的應用,如何在嵌入式實時系統下對網卡進行驅動程序的設計以及實現網絡通信和管理,成為非常重要的技術。本文首先從整體上VxWorks網絡系統得基本原理和與結構,然后以Intel82557網卡驅動為例,著重介紹網絡設備驅動程序設計與實現過程。本文對所有基于MUX機制下的VxWorks網絡設備驅動程序開發者具有參考價值。

引言

VxWorks 是一個具有微內核、可裁剪的高性能強實時操作系統,它以其良好的可靠性和卓越的實時性被廣泛地應用在通信、軍事、航空、航天等高精尖技術及實時性要求極高的領域中。我校研制的綜合導航顯控臺采用VxWorks操作系統,它作為艦船導航系統的核心設備實時為導航、通信、駕控系統提供各種信息。當需要更改海圖模塊硬盤中一些及時需要修改的數據、程序和電子海圖等信息時,為避免拆卸設備,可以通過網絡傳輸來解決上述問題??梢员疚囊訧ntel82557網卡為例 ,給出了基于VxWorks的網絡設備驅動程序的開發方法和實現流程。

1 VXWORKS的網絡結構

VxWorks提供了與其他TCP/IP網絡系統間“透明”的存取方式、BSD Socket兼用的編程接口,遠程過程調用(RPC),遠程文件存取等。網絡驅動程序和上層網絡協議??梢杂袃煞N實現形式:BSD方式和MUX方式。在VxWorks中, MUX與END合稱 SENS驅動(可裁剪增強型網絡驅動)。網卡驅動程序的層次結構使網卡驅動程序的實現和移植更加方便。而且VxWorks為編寫網卡增強型驅動程序(SENS)提供了很好的接口和規范。下圖是VxWorks的網絡系統。

圖片

圖1 VxWorks的網絡系統

2 END驅動概述

2.1 MUX與END

VxWorks網絡協議??梢苑譃橐韵聨讓樱簯脤?、傳輸層、IP層、MUX層、數據鏈路層和物理層。如圖2所示。

圖片

圖2 VxWorks網絡協議棧分層結構示意圖

從上圖看出,與其他TCP/IP 協議相比VxWorks網絡協議棧增加一層MUX層。MUX層是VxWorks為方便在網絡接口硬件上實現多種協議而增加的一層 。它主要用于管理底層的多種硬件的設備驅動,向上層不同協議提供統一的接口,降低了上層協議與底層物理硬件的藕合,使得網絡驅動和上層協議彼此保持獨立,既方便在現有硬件基礎上實現新的上層協議,也利于用新的硬件支持原有的上層協議。

MUX與END的交互是通過提供一套可供底層調用接口服務來實現的,實現END驅動必須遵循這套接口關系。如圖3所示

圖片

圖3 MUX與END的接口關系

上圖中右邊框中列出的函數是驅動需要實現的函數,供MUX層調用在必要的時間調用,如當上層使用該網卡發送數據時,MUX會調用該網卡END驅動提供的Send函數,將數據提交給網卡芯片硬件。

2.2 緩沖池數據結構

網絡設備驅動與上層協議進行數據交換需要相應的內存緩沖,并且管理這些緩沖也需要相應的函數。VxWorks提供了netBufLib函數庫用于創建和管理網絡設備用到的內存緩沖池,網絡設備驅動可以直接使用也可以在此基礎上設計自己特定的內存緩沖池。數據以簇的形式保存,數據結構mBlks(內存塊)和clBlks(簇塊)形成的數據鏈結構則用于指定各個簇。

在clBlk之上是mBlk結構。該結構存儲一個到clBlk的連接,也可以存儲一個到另一個mBlk的連接。通過mBlk的連接,可以引用任意數量的數據,如圖4所示

圖片

圖4 mBlks和clBlks的數據結構

3 END驅動實現

3.1 END設備驅動程序裝載過程

END設備驅動程序裝載過程實際上是分三個步驟完成的。即指定END設備、裝載END設備和啟動END設備。

3.1.1 指定END設備

網絡設備的驅動程序安裝時通過修改相應的BSP實現。在修改BSP之前,首先看一下BSP中的END設備驅動程序入口表END_TBL_ENTRY的結構。在BSP的configNet.h文件中定義著 END_TBL_ENTRY結構的數組endDevTbl[],其結構原型如下所示:

END_TBL_ENTRY endDevTbl[]=
{
-----
#ifdef  INCLUDE_FEI_END
{0,FEI82557_LOAD_FUNC,FEI82557_LOAD_
STRING,FEI82557_BUFF_LOAN,NULL,FALSE},
#endif    /*INCLUDE_FEI_END*/
#ifdef   INCLUDE_ELT_3C509_END
{0,END_3C509_LOAD_FUNC,END_3C509_LOAD_STRING,END_3C509_BUFF_LOAN,NULL,FALSE}
#endif  /*INCLUDE_ELT_3C509_END*/
-----
};

該數組描述了系統中的所有網絡設備的裝載函數入口點及其相關參數。將網絡設備驅動程序的裝載函數fei82557EndLoad()入口點及相關參數添加到網絡設備表endDevTbl[] 中,而后在config.h中加入“#define INCLUDE_END”以使系統準備初始化MUX并通過MUX裝載網絡設備驅動程序。

在VxWorks網絡驅動程序的編程規范中,為了系統的高移植性、兼容性和可裁剪型等,通常在configNet.h文件中對系統支持的INTEL82557網絡設備定義一些宏,其編寫規范如下所示:

#ifdef  INCLUDE_FEI_END
#define FEI82557_LOAD_FUNC  fei82557EndLoad /*設備驅動程序裝載函數*/
#define FEI82557_BUFF_LOAN 1/*允許緩沖借出*/
/*
*fei82557End初始化字符串格式:
*::::
*/
#define FEI82557_LOAD_STRING“-1:0x00:0x20:0x20:0x00”
IMPORT END_OBJ*FEI82557_LOAD_FUNC(char*,
void*);
#endif  /*INCLUDE_FEI_END*/

3.1.2 裝載及啟動END設備

裝載及啟動END設備的系統函數主要用到以下幾個:

(1) muxDevLoad() 該函數裝載指定設備的驅動程序裝載函數。如果要裝載END 設備,系統必須調用muxDevLoad()函數。

(2) muxDevStart()啟動設備函數

(3) muxBind() muxBind()可以將協議綁定到指定的END 設備上。其調用過程是系統調用ipAttach()函數,而該函數調用muxBind()函數,綁定協議堆棧到MUX上的一個指定的網絡接口。當一個網絡接口被關閉時,ipAttach()函數將釋放網絡接口所關聯的TCP/IP堆棧模塊。

裝載及啟動END設備驅動程序的流程如下:使用指定的END設備驅動程序的BSP引導VxWorks系統時,在引導過程中,系統將執行任務tUsrRoot來完成如下各項:

1、初始化網絡任務的工作隊列;

2、創建tNetTask任務來處理網絡任務工作隊列的條目;

3、調用muxDevLoad()裝載指定的網絡驅動程序;

4、調用muxDevStart()啟動指定的網絡驅動程序;

tUsrRoot任務調用MUX設備裝載函數muxDevLoad()和設備啟動函數muxDevStart(),通過這兩個函數來裝載和啟動設備驅動程序。muxDevLoad()函數會根據網絡設備表endDevTbl[]中的定義逐一調用各網絡設備的裝載函數,其中這個函數是muxDevLoad()的一個輸入參數。muxDevStart()函數也會根據endDevTbl[]逐一調用網絡設備所定義的設備開始函數。至此MUX的歘石化以及END 驅動程序的初始化工作已經完成。但是網絡設備還是不可以使用,因為還需要將協議綁定到指定的END 指定的設備上,這一步需要用muxBind()函數實現。

在VxWorks中,系統通過usrRoot()函數調用usrNetInit()函數完成MUX的初始化、裝載網絡設備表endDevTbl[]中描述的所有設備并將IP協議綁定到網絡引導設備上等工作。

網絡設備驅動程序的安裝過程即下圖所示的網絡初始化順序。

圖片

圖5 網絡初始化順序

3.3 發送數據

在VxWorks網絡系統中,發送數據的流程如下圖

圖片

通過對上圖分析,主要包含以下幾個處理。

(1) 用戶調用write()函數,通過套接字訪問網絡。

(2) 網絡協議拷貝需要發送的數據到網絡緩 區中,并調用協議驅動程序的發送程序。

(3) 協議驅動程序調用muxSend()啟動發送循環。

(4) muxSend()通過調用send()回調函數,把緩沖區傳遞給END。

(5) 數據發送程序把數據拷貝到設備緩沖區中,并 把它放置到設備的發送隊列中。

(6) 當產生發送中斷時,驅動程序的中斷服務程序調度程序丟棄已發送的數據包,徹底清理發送隊列。

3.4 接收數據

在VxWorks網絡系統中,接收數據的流程如下圖

圖片

通過對上圖進行分析,它主要包含以下幾個處理。

(1) 設備接收到數據包后直接把數據存放到預先分配的簇中。

(2) 當接收到中斷時,驅動程序的中斷服務程序調度任務級接收程序進行如下操作。

  • clBlk結構和簇連接;mBlk和clBlk連接;最后構成緩沖區。
  • 通過調用receiveRtn()函數,把緩沖區傳遞給更高級別的協議。

(3) muxReceive()調用協議的stackRcvRtn()函數,把成列的緩沖區傳遞給應用。用戶使用read()函數,通過套接字訪問網絡中的成列緩沖區

3.5 驅動程序的中斷處理

中斷處理函數fei82557INT處理設備中斷。當網絡接口產生中斷時,系統調用用戶驅動程序注冊的中斷服務程序。中斷程序主要完成將數據包從本地網絡設備送出的操作。為了排列任務級的包接收處理工作,網絡驅動程序中斷服務程序必須調用netJobAdd()函數。在調用netJobAdd()函數時,應當指定任務級處理數據包的驅動程序入口。然后由netJobAdd()把函數指派到網絡系統任務——tNetTask的工作隊列中。VxWorks通過tNetTask處理任務級的網絡處理。

tNetTask調用隊列中處理程序如下:

(1)包接收程序:把接收到的數據包上傳到網絡緩沖區的堆棧中,通過一個調用上傳給MUX。

(2)釋放所有發送幀程序:程序調用netClFree()函數釋放發送緩沖區中所有已經發送的數據幀。

4 結束語

本文分析了VxWorks下網卡驅動程序的原理,并以Intel82557網卡為例具體說明了網卡驅動的設計開發過程。主要就VxWorks下網卡驅動程序的共性做了闡述, 比如VxWorks下網卡驅動的在結構、在整個系統中的位置,中斷處理,收發包存儲空間分配等。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • VxWorks
    +關注

    關注

    3

    文章

    351

    瀏覽量

    97099
  • RPC
    RPC
    +關注

    關注

    0

    文章

    111

    瀏覽量

    11540
  • 網卡驅動
    +關注

    關注

    0

    文章

    35

    瀏覽量

    17705
  • BSD
    BSD
    +關注

    關注

    0

    文章

    31

    瀏覽量

    10424
  • 嵌入式實時系統

    關注

    0

    文章

    3

    瀏覽量

    1558
收藏 人收藏

    評論

    相關推薦

    vxworks下面rtl8180/intel 8257x千兆網卡驅動

    本人決定開放多年前的vxworks下rtl8180/intel 8257x千兆網卡驅動。有需要的請聯系我(qq 195467679)
    發表于 10-17 12:15

    基于VxWorks環境的雙冗余以太網卡技術在底層驅動中的實現

    所示。 目前版本的MUX支持2種網絡驅動程序接口模式:增強型網絡驅動程序接口( END)和網絡協議工具包(NPT)驅動程序接口?,F以END型網卡驅動
    發表于 05-05 09:29

    SL811HS VxWorks Host驅動

    SL811HS VxWorks Host驅動
    發表于 03-25 16:55 ?23次下載

    pci網卡驅動下載

    pci網卡驅動免費下載
    發表于 03-16 08:58 ?20次下載

    usb ethernet網卡驅動

    usb ethernet網卡驅動免費下載。。
    發表于 03-16 08:59 ?286次下載

    VxWorks設備驅動介紹 (詳細說明)

    VxWorks設備驅動介紹 (詳細說明)
    發表于 03-28 09:53 ?27次下載

    基于VxWorks的顯卡實時驅動程序的設計

    基于VxWorks的顯卡實時驅動程序的設計
    發表于 03-29 12:29 ?12次下載

    VxWorks網卡驅動程序的開發Development o

    本文首先從整體上分析VxWorks 網卡驅動程序的原理和結構,然后深入地分析Rtl8139C 網卡驅動程序的結構以及實現,本文對于
    發表于 06-06 13:47 ?20次下載

    基于Vxworks的PXI板卡驅動程序開發

    對嵌人式實時系統VxworkS中的設備驅動程序開發進行了簡要的介紹,討論了Vxworks操作系統下的/10系統和設備驅動程序、應用程序之問的關系,說明了
    發表于 07-16 14:23 ?20次下載

    VxWorks下雙網卡冗余熱切換技術的研究

    詳述了嵌入式實時操作系統VxWorks 下雙網卡冗余熱切換技術的實現方法。文中在分析了PCI 總線型網絡適配器驅動裝載機制及冗余切換原理的基礎上,給出了相應的BSP 配置和冗余切
    發表于 08-31 10:23 ?32次下載

    VxWorks網卡驅動程序的開發

    本文首先從整體上分析VxWorks網卡驅動程序的原理和結構。然后深入地分析Rd8139C網卡驅動程序的結構以及實現,本文對于
    發表于 11-28 16:40 ?22次下載

    Realtek 百兆網卡驅動

    Realtek 百兆網卡驅動.zip
    發表于 01-29 17:03 ?13次下載

    Vxworks系統usb驅動原理

    摘要)Vxworks是一種由風河公司開發的先進的實時操作系統,廣泛地應用于各種嵌入式實時應用領域。論文 是作者實踐的結果。首先在簡單介紹了)Vxworks系統 這種先進的實時操作系統后,具體地分析了)*Vxworks系統下的US
    發表于 02-22 16:00 ?51次下載
    <b class='flag-5'>Vxworks</b>系統usb<b class='flag-5'>驅動</b>原理

    VxWorks設備驅動之字符設備驅動詳解

    VxWorks設備驅動之字符設備驅動詳解
    發表于 10-26 10:28 ?7次下載
    <b class='flag-5'>VxWorks</b>設備<b class='flag-5'>驅動</b>之字符設備<b class='flag-5'>驅動</b>詳解

    linux安裝網卡驅動教程

    在Linux系統中安裝網卡驅動是一個比較基礎的操作,下面我將為你詳細講解如何安裝網卡驅動。 第一步,檢查網卡型號和
    的頭像 發表于 11-17 11:11 ?4065次閱讀
    主站蜘蛛池模板: 欧美成人国产| 亚洲视频中文| 99视频在线看观免费| 4480YY旧里番在线播放| 空姐内射出白浆10p| qovd伦理| 小草视频免费观看在线| 久久久久久久网站| 亚洲精品伊人久久久久| 国产电影无码午夜在线播放| 亚洲国产精品一区二区三区在线观看 | 強姧伦久久久久久久久| 91精品国产色综合久久不| 欧美做真爱欧免费看| ASIAN大陆明星裸休合成PICS| 玩弄人妻少妇500系列网址| 久久精品观看| 粉色视频午夜网站入口| 手机看片国产免费| 国产午夜亚洲精品理论片八戒| 最近2019中文字幕免费| 色欲AV亚洲午夜精品无码| 国产爱豆果冻传媒在线观看视频| 亚洲区欧美日韩综合| 久久热最新网站获取3| 在线少女漫画| 内射白嫩少妇超碰| 国产精品亚洲专一区二区三区| 亚洲AV国产福利精品在现观看| 免费完整版观看| 国内精品久久久久久久999下| 亚洲综合国产精品| 久久亚洲视频| 国产精品97久久AV麻豆 | 99视频久九热精品| 亚洲色欲国产免费视频| 色婷婷激婷婷深爱五月小蛇| 恋夜影视列表免费安卓手机版 | 国产一及毛片| 伊人在线视频| 午夜免费福利小电影|