網路驅動程式概述

2021-06-21 10:31:53 字數 920 閱讀 2694

一、網路驅動程式:

使用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直接記憶體訪問和輪詢模式。

Linux LCD 驅動程式概述

入局 應用程式是如何操控lcd顯示器的?我們知道應用程式的呼叫介面,無非open read write 然後通過驅動程式最終作用到硬體裝置上。以字元裝置為例,對於驅動的開發者,實現了應用程式呼叫的驅動層中與之相匹配的drv open drv read drv write函式,為應用層序提供了操作實際...

驅動程式開發(一) 概述

很久沒有網了,出了一段時間的差,近來,莫名的就有點鬱悶!也畢業好幾年了,技術還需要提高,開始覺得可以考慮換個方向。以前我是做視音訊開發的。換哪個方向呢?人越多的方向,好像越是沒有前途。想想當初上大學,那可是越多人考的學校,學費越貴啊!可現在的職業呢?越多人幹的事,越是沒有前途了。考慮來考慮去,決定學...

Linux驅動程式框架以及概述

1 字元裝置 char device 2 塊裝置 block device 3 網路裝置 net device 1 對裝置初始化和釋放 2 把資料從核心傳送到硬體和從硬體讀取資料 3 讀取應用程式傳送給裝置檔案的資料和回送應用程式請求的資料 4 檢測和處理裝置出現的錯誤 訪問特定硬體 訪問特定硬體就...