網絡驅動程序概述

一、網路驅動程序:

使用net_device描述設備,使用套接字描述符sk_buff封裝數據。


二、設備的註冊:

alloc_ethdev分配net_device結構和私有的數據區、並初始化以太網設備結構、標誌、硬件地址、初始化緩衝區描述符、申請中斷號並註冊中斷處理函數,最後向全局網絡設備鏈表添加初始化後的網絡設備。


三、數據的發送:

1.內核發送數據包的時候,使用套接字sk_buff作爲參數,調用驅動的ndo_start_xmit發送函數,套接字包含有要傳輸數據的指針和數據的長度、以及網絡子系統已經添加的軟件和硬件協議頭(tcp、ip、以太網頭),IP協議頭是14個字節,爲了對齊,一般分配16個字節。

2.然後通過DMA映射,將數據傳到網絡設備的設備內存。

3.最後硬件邏輯通過RJ45接口將數據發送出去。

4.網卡在成功發送數據時候引發中斷,在中斷處理函數中,釋放網絡子系統傳遞給驅動程序的套接字緩衝區sk_buff,並更新接口數據統計結構。


四、數據的接收:

1.數據到達時,網卡通過更新放在特定位置的緩衝區描述符,從而告知所接收到數據的長度和地址,並引發中斷。

2.中斷處理函數,會禁止中斷,並進入輪詢模式。

3.輪詢函數會在原子上下文,分配套接字sk_buff來容納接收到的數據,並刪除硬件頭,添加校驗和,數據類型,協議號等信息。

4.然後調用網絡子系統的接收函數,將套接字sk_buff傳給網絡子系統,網絡子系統的接收函數運行在軟件中斷上下文,使用了頂半部和底半部機制,並負責釋放驅動分配的套接字結構。


五、中斷函數:

1.讀設備狀態的寄存器,區分中斷的類型是發送成功、接收到數據包、還是發生錯誤。

2.發送,釋放sk_buff,更新接口數據統計統計結構。

3.接收,禁止中斷,進入輪詢模式。


六、性能優化:

DMA直接內存訪問和輪詢模式。

發佈了48 篇原創文章 · 獲贊 12 · 訪問量 1141萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章