久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

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 下一頁

評論


相關推薦

技術專區

關閉