一、網路驅動程式:
使用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 檢測和處理裝置出現的錯誤 訪問特定硬體 訪問特定硬體就...