新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于USB設備的Linux網絡驅動程序開發

        基于USB設備的Linux網絡驅動程序開發

        作者: 時間:2012-05-21 來源:網絡 收藏
        1 引言

        做為開放源代碼 (Open Source) 運動重要組成部分,操作系統吸引了數以萬計的程序員共同開發。由于比較完整的繼承了各種UNIX版本的穩定和高效,并且克服和改進了傳統UNIX中的很多缺點,更因為其開放的開發模式,成為一個具有強大網絡服務功能的操作系統。它支持主流的TCP/IP以及IPX/SPX、 NETBEUI等眾多網絡協議,無論在嵌入式系統,服務器還是桌面操作系統領域,Linux都取得了廣泛的應用。和網絡硬件設備實現網絡協議棧中的數據鏈路層和物理層,對上層協議提供支持,是網絡協議棧的重要組成部分,對Linux的網絡性能起著決定作用。本文主要討論基于總線的 Linux的設計和實現方法。

        2. Linux體系結構

        出于穩定性和安全性的考慮,現代處理器往往具有至少兩個運行級別。權限較低的級別無法訪問所有的寄存器,不能對硬件直接操作。而權限較高的級別能夠進行所有的硬件操作和訪問任何系統資源。Linux設計充分利用了現代處理器的上述特性,其內核部分運行于高權限級別,應用程序運行于低權限級別。作為宏內核結構的操作系統,Linux將進程管理、內存管理、網絡協議棧、設備驅動和文件系統等服務都集成在內核中,而應用程序則通過系統調用與內核通訊,內核結構如圖1所示。

        圖1

        圖2

        Linux網絡子系統基本可以分為系統調用接口、BSD套接字、INET套接字、TCP/IP以及數據鏈路層。其中,BSD套接字由INET套接字層提供支持,而INET套接字管理著基于IP的TCP或UDP協議端,實現IP分組排序以及控制網絡子系統效率等功能。各種位于IP層之下,它們具有訪問硬件設備的能力,實現數據鏈路層的功能。網絡子系統的結構如圖2所示。

        3. Linux網絡驅動程序結構

        一個完整的驅動程序是一組回調(Callback)函數的集合。內核根據用戶或自身的需要來調用驅動程序提供的函數指針,將控制或數據請求交給相應的驅動程序。驅動程序負責了解相應硬件設備的訪問和控制方式,將內核的請求翻譯成設備可以理解的操作。這樣的層次結構使得內核不必了解硬件設備的訪問機制和細節,驅動程序也無需明白內核的控制策略,大大提高了驅動程序的兼容性,同時也方便了程序的調試。根據驅動程序類型的不同,內核要求驅動程序提供的回調函數也不同。

        Linux下的Ethernet驅動程序需要注冊的回調函數分為“必要”和“可選”兩類。“必要”的回調函數是指一個Ethernet驅動程序正常工作所需要的回調函數最小集合,而“可選”的回調函數則是在“必要”的基礎上提供更豐富的特性和功能。“必要”的回調函數如表1所示。

        函數名稱

        功能

        open

        打開網絡接口;將硬件設備配置為正常工作狀態。

        stop

        關閉網絡接口;停止硬件設備工作,釋放打開該接口時分配的系統資源。

        tx_timeout

        當上層協議認為某個數據包發送超時的時候調用;該函數應該解決數據包發送超時問題,并保證函數返回以后,數據包能夠正常發送。

        hard_start_xmit

        由上層協議在希望發送數據包時調用;將來自上層協議的數據包轉換為硬件設備能夠處理的格式,發送至硬件設備。

        get_stats

        當上層希望了解驅動程序控制的網絡設備的統計信息的時候被調用。

        hard_header

        根據網絡子系統先前地址解析的結果,構造數據包的硬件包頭。

        rebuild_header

        在ARP解析完成之后,由上層協議在發送任何新數據包之間調用,重新構造硬件包頭。

        set_config

        改變網絡接口的配置,例如中斷號和I/O地址等。

        表1

        為了方便Ethernet驅動程序的設計,Linux內核為hard_header、rebuild_header和set_config提供了通用的回調函數。如果對硬件包頭或設備配置沒有特殊的要求,通用的回調函數就能夠滿足網絡子系統的要求。

        4. 基于總線的Linux網絡驅動程序設計

        4.1 設備的訪問和控制

        與PCI、ISA等設備不同,USB、1394等新一代總線沒有IO/MEM映射、中斷和DMA硬件資源。取而代之的,是抽象出來的硬件資源概念。對于USB設備來說,資源主要包括配置(configuration)、接口(interface)和端點(endpoint)。三者之間的關系如圖3所示。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 介休市| 华阴市| 曲靖市| 内丘县| 隆林| 婺源县| 湟中县| 邵阳县| 陇西县| 盐池县| 石景山区| 勃利县| 浙江省| 安远县| 兴山县| 彭泽县| 岑溪市| 定南县| 东乌珠穆沁旗| 翼城县| 敦煌市| 丹棱县| 栖霞市| 乐都县| 含山县| 沽源县| 海南省| 垣曲县| 水城县| 洪泽县| 札达县| 五河县| 越西县| 嘉定区| 岑巩县| 金昌市| 故城县| 东乌珠穆沁旗| 鹤山市| 阿克陶县| 阜平县|