《VxWorks設備驅動開發詳解》筆記——第十章 網絡設備驅動

1.網絡設備是一類非常特殊的設備,其沒有普通文件接口,網絡設備不存在對應的設備節點,不屬於IO子系統管理,不向IO子系統註冊驅動和設備。當一個網絡設備驅動完成其內核層的註冊後,用戶即可對網絡設備進行操作。

2.網絡設備對外界數據的接收時異步的,當用戶層沒有任何數據讀取請求時,其也在不斷的從外界接收數據,緩存到內核專門分配的緩衝區中。實際上所有用戶層將來讀取數據都是從這個內核緩衝區中獲得的。

3.網絡設備驅動從協議棧接收一個已經封裝的數據幀,而後只需要控制網絡設備原封不動地將這個幀發送到網絡介質上即可。對於網絡介質本身的共用及衝突解決都是由網絡硬件設備自動進行處理,無需網絡設備驅動負責。因此,網絡設備的功能就僅包括:

(1)其從網絡棧接收一個數據幀,操作網絡設備,將這個幀發送出去;

(2)其從網絡設備接收一個幀,通過調用網絡棧提供的接口函數,將這個幀傳遞給網絡棧;

4.VxWorks早期使用網絡棧與底層網絡設備直接交互的方式,即4.3BSD網絡驅動類型。在這種方式下,底層驅動與網絡棧的耦合性比較緊密,這一點對於底層驅動開發比較不利,尤其對於VxWorks這種閉源操作系統。因此,VxWorks在後來的版本中(如5.5)提供了另一種驅動開發類型,即基於可裁剪的增強型網絡棧(SENS:scalable enhanced networks stack)實現的底層驅動開發類型。風河將使用SENS編寫的網絡設備驅動稱爲增強型網絡驅動,即END(enhanced network driver)。

5.END網絡設備驅動內核層次

6.爲了簡化網絡設備驅動設計,VxWorks內核提供了一個MUX中間層。該中間層對上與網絡棧核心實現交互,對下與底層網絡設備驅動交互,管理底層網絡設備驅動。注意,上圖中的鏈路層與網絡設備驅動實際是評級關係。

7.基於MUX中間層,核心網絡棧與底層網絡設備驅動之間完全被隔離,底層網絡設備不再與網絡棧有任何關係,而是直接與MUX中間層進行通信,MUX中間層也使得協議層更具有靈活性。

8.對於一個嵌入式系統,通常需要較快的響應時間。如果一箇中斷處理函數執行時間較長,那麼其他設備中的中斷將得不到響應。所以無論是VxWorks還是Linux,都要求儘量減少中斷上下文持續時間。因此,將中斷函數人爲地分爲兩個部分:上半部分和下半部分。在中斷上下文中只完成上半部分的工作,下半部分的工作將安排在一個任務上下文中執行。VxWorks專門提供一個後臺任務完成中斷的下半部分,這個任務就是TNetTask。

9.tNetTask維護一個工作隊列,只要工作隊列非空,就執行執行工作隊列的每個元素中包括的函數。對於一個網絡設備中斷響應函數而言,其完成中斷所需的關鍵的上半部分工作,如檢查中斷來源、寫相關硬件寄存器清除中斷,而具體的數據幀的處理則通過在tNetTask維護的工作隊列中插入一個元素,交由tNetTask在任務上下文中完成。

10.VxWorks提供netJobAdd函數完成向工作隊列添加工作的功能。netJboAdd函數不可過於頻繁地調用,不能在每次中斷的上半部分中都進行調用,因爲tNetTask維護的內核工作隊列“槽位”有限,同時只能安排有限個下半部分。對於網絡驅動,可以通過檢查EMAC_DESCU中的OWNER標誌位,實現在下半部分中進行連續的處理,而不是每次只處理一個EMAC_DESCU結構。因此,只要有一個“下半部分”被安排,就可以完成數據幀接收的任務,而不用安排多個“下半部分”。

11.網絡中斷處理函數中使用到netJobAdd函數的三個地方:

(1)信息統計

(2)數據幀接收

(3)數據幀發送

12.內核數據幀封裝要求是指爲了便於內核代碼對數據幀的解析,在底層驅動將數據幀傳遞給上層之前,必須將數據封裝在一個內核提供的數據結構中,例如Linux中的sk_buff結構,對於VxWorks,則必須封裝在一個M_BLK_ID結構中。

13.對於嵌入式系統,網絡接口MAC地址通常需要由用戶指定,可通過配置網絡設備MAC地址寄存器完成。對於以太網,指定一個六個字節的普通數字字符即可。在VxWorks的BSP中,使用bootline傳遞MAC地址,默認bootline定義在config.h文件中。

14.在VxWorks啓動過程中,將存在一個倒計時的階段,當用戶鍵入任何鍵時,其將處理bootline配置狀態,運行用戶即時更改的bootline參數,包括主機服務器IP地址、目標機IP地址等。

15.在進行網絡驅動設計時,必須同時從內核接口以及底層硬件操作兩個方面入手。內核接口主要從END_OBJ、NET_FUNCS兩個頂層結構以及mBlk、clBlk、clBuff緩衝結構出發進行理解;而硬件設備本身則需要研讀網絡設備手冊,瞭解網絡設備的內部工作方式,從而按順序完成網絡設備驅動的開發工作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章