首頁 > 軟體

SylixOS網絡卡驅動框架

2020-06-16 17:21:59
  1. 開發環境

  • 作業系統:SylixOS作業系統

  • 程式設計環境:RealEvo-IDE3.1

  • 開發板:imx6q實驗箱

  1. 技術實現

    SylixOS 核心版本1.4.1的網絡卡驅動框架與之前的版本相比有了很大變化,最主要的就是由之前的netif結構體變成了現在了netdev結構體。這個版本的網絡卡驅動框架主要由以下幾個部分組成。

     

  2. 網絡卡驅動框架:網絡卡驅動入口

    在官方提供的imx6Q的BSP工程目錄中,SylixOS資料夾主要由三個子資料夾組成,分別是:bsp, driver, user。如圖 21所示

     21 工程資原始檔

    bsp資料夾裡是跟整個bsp相關的C檔案及相關組態檔等,在startup.s之後執行的第一個C檔案為:bspInit.c,如圖 22所示

     22 bspInit.c

    驅動程式一般都存放在driver資料夾中。如圖 23所示。

     23 驅動資料夾

    網絡卡驅動程式碼在driver下的netif子檔案內,開啟imx6q_netif.h , 整個網絡卡驅動對外只提供了一個函數:enetInit ,如圖 24所示。

     24 網絡卡入口函數

    enetInit是整個網絡卡驅動的入口函數,前面說的bspInit.c裡halNetifAttch函數裡會呼叫這個函數,進行網路的初始化。如圖 25所示。

     25 呼叫enetInit

  3. 網絡卡驅動框架:網絡卡驅動實現

    在當前版本的SylixOS 裡,網絡卡驅動主要是實現netdev這樣一個結構體,結構體裡的成員如圖 26所示。

     26 netdev

    這個結構體裡的內容主要可以分為以下兩類:

  4. 設定資訊相關

    除了netdev_funcs結構體指標變數drv之外,其他的成員都可以分到這一類中,在驅動程式裡,只需根據具體情況,對這一類的成員進行對應的賦值即可。如圖 27所示。

     27 設定資訊相關

  5. 驅動程式相關

    這一類的就一個成員,即netdev_funcs結構體指標。它裡面定義了所有驅動程式需要實現的內容,這個結構體的定義如圖 28所示。

     28 netdev_funcs

    一般,實現了init,transmit,receive這三個成員後,網絡卡基本就可以正常工作。這三個函數的功能如下:

    .init : 進行整個網絡卡的初始化內容,裡面可以包括MAC控制器的初始化,PHY的初始化,描述符的初始化,中斷的系結等等;

    .transmit : 上層協定傳送資料時,最後呼叫的就這個函數,因此,它要是實現網絡卡驅動的傳送功能。

    .receive : 當網絡卡收到資料時,會呼叫這個函數進行接收,同時,它裡面還需要實現將收到的資訊傳到上層協定棧中去的功能。

  6. 網絡卡驅動框架:在系統中新增網絡卡資訊

    完成了上述內容之後,整個網絡卡驅動的內容也已經填充到netdev這個結構體中去了,最後只需要呼叫netdev_add函數就可以在系統中新增我們實現的這個網絡卡資訊,如圖 29所示。

     29 netdev_add

  7. 網絡卡驅動框架:連線監測執行緒

    在網絡卡驅動裡,可以建立一個執行緒,用來監測當前網路的連線狀態,如圖 210所示。

     210 監測執行緒

     

     

  8. 參考資料

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-02/140358.htm


IT145.com E-mail:sddin#qq.com