<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于USB設備的Linux網絡驅動程序開發(fā)

          基于USB設備的Linux網絡驅動程序開發(fā)

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

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

          2. Linux體系結構

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

          圖1

          圖2

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

          3. Linux網絡驅動程序結構

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

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

          函數(shù)名稱

          功能

          open

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

          stop

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

          tx_timeout

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

          hard_start_xmit

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

          get_stats

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

          hard_header

          根據(jù)網絡子系統(tǒng)先前地址解析的結果,構造數(shù)據(jù)包的硬件包頭。

          rebuild_header

          在ARP解析完成之后,由上層協(xié)議在發(fā)送任何新數(shù)據(jù)包之間調用,重新構造硬件包頭。

          set_config

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

          表1

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

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

          4.1 設備的訪問和控制

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

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

          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();