linux網路驅動之網絡卡驅動程式的設計

2021-09-20 15:25:59 字數 1446 閱讀 9478

裝置開啟

資料傳送

資料接收

中斷處理

每個網路介面都由乙個net_device(位於 標頭檔案的的第840行) 結構描述,該結構可用於如下核心函式動態分配:

*struct net_device *alloc_netdev (int sizeof_priv,const char *mask,void (*setup)(struct net_device ))

引數:

sizeof_priv:私有資料區大小;

mask:裝置名;

setup:初始化函式,用來設定 net_device 結構剩餘的部分

*struct net_device alloc_etherdev(int sizeof_priv)

結構 net_device 的主要成員包括

其中的基本方法

可選操作

網路介面驅動的註冊方式與字元驅動不同之處在於它沒有主次裝置號,並使用如下函式註冊:

int

register_netdev

(struct net_device *dev)

linux 核心中的每個網路資料報都由乙個套接字緩衝區結構 struct sk_buff 描述,即乙個 sk_buff 結構就是乙個包,指向 sk_buff 的指標通常被稱做skb。

*struct sk_buff skb;

該結構包含如下重要成員:

open 請求任何它需要的系統資源並且啟動介面:

舉例:

int

net_open

(struct net_device *dev)

當核心需要傳送乙個資料報時,它呼叫hard_start_transmit函式,該函式將最終呼叫到net_device結構中的hard_start_xmit函式指標。

網路介面驅動可以實現兩種方式的報文接收:中斷和查詢,linux 中驅動多採用中斷方式。

分配 skb

skb = dev_alloc_skb(pkt->datalen+2)

從硬體中讀取資料到skb呼叫netif_rx將資料交給協議棧

netif_rc(skb)

網路介面通常支援3種型別的中斷:新報文到達中斷、報文傳送完成中斷和出錯中斷。中斷處理程式可通過檢視網絡卡中的中斷狀態暫存器,來分辨出中斷型別。

Linux驅動之虛擬網絡卡

底層 工作在核心層的朋友應該有這種感覺,才開始學的時候真的很難,也就是說上手難,我就拿linux驅動來說吧,寫乙個完整的驅動,你得裝乙個虛擬機器跑linux吧,用來編譯驅動程式,虛擬機器裡面需要安裝一些庫和工具,驅動程式必須跑在乙個完整的系統上,所以首先你得搭建好整個系統,你還得了解硬體時序等,這些...

linux 網絡卡驅動

如何安裝linux網絡卡驅動呢,看看下面的說明。適用機型 所有xseries 205 所有xseries 206 所有xseries 225 所有xseries 226 所有xseries 235 所有xseries 236 所有xseries 255 所有xseries 305 所有xseries...

Linux驅動之網路驅動應用

include include include printk include kmalloc include error codes include size t include mark bh include include struct device,and other headers incl...