cs8900網絡卡驅動簡要解析 4

2021-04-18 15:06:35 字數 1590 閱讀 9301

我們最初分析的函式是

cs8900_init

,並由此展開,跟蹤到了

cs8900_probe

、cs8900_read

、cs8900_write

等,現在收回來,還是回到

cs8900_init中。在

cs8900_init

裡找到如下一行**:

ndev->open= cs8900_start;

如果你之前了解過字元裝置,你很容易聯想到

file_operation

中的open

。其實它們是一樣的。

open

函式在網路裝置被啟用時(

ifconfig

)呼叫。因此,我們在編寫網絡卡驅動時,要考慮網絡卡啟用時,需要完成哪些事情。通常要進行中斷的申請、資源的申請等。在

cs8900

的驅動中,主要完成兩件事情:啟用網絡卡和申請中斷。啟用網絡卡的**如下:

cs8900_set (dev,pp_rxcfg,rxokie | buffercrc | crcerrorie | runtie | extradataie);

cs8900_set (dev,pp_rxctl,rxoka | individuala | broadcasta);

cs8900_set (dev,pp_txcfg,txokie | out_of_windowie | jabberie);

cs8900_set (dev,pp_bufcfg,rdy4txie | rxmissie | txunderrunie | txcolovfie | missovfloie);

cs8900_set (dev,pp_linectl,serrxon | sertxon);

cs8900_set (dev,pp_busctl,enablerq);

申請中斷的方法和以前一樣:

request_irq (dev->irq, &cs8900_interrupt, 0, dev->name, dev))

顯然,我們下乙個任務就是完成中斷處理函式了

(cs8900_interrupt)

,我們後面再說。

當資源準備就緒後,需要呼叫

netif_start_queue

函式開啟網路介面的接收和傳送資料佇列。這個函式原型在

netdevivce.h

中。與它類似的還有乙個函式,叫

netif_wake_queue

。有人更喜歡使用

netif_wake_queue

函式,因為它可以通知網路系統可再次開始傳輸資料報。

static inline void netif_start_queue(struct net_device *dev)

static inline void netif_wake_queue(struct net_device *dev)

#endif

if (test_and_clear_bit(__link_state_xoff, &dev->state))

__netif_schedule(dev);

}一句話總結:我們需要實現乙個

open

函式,用來完成資源申請和開啟網路介面的資料佇列任務。

cs8900網絡卡驅動簡要解析 4

我們最初分析的函式是cs8900 init,並由此展開,跟蹤到了cs8900 probe cs8900 read cs8900 write等,現在收回來,還是回到cs8900 init中。ndev open cs8900 start 如果你之前了解過字元裝置,你很容易聯想到file operatio...

cs8900網絡卡驅動簡要解析 7

上一次講的cs8900 receive函式是在中斷處理函式中呼叫的,也就是當中斷到來,如果判斷出是資料接收情況,則通過這個函式進行資料接收。那麼如果中斷是由於其他事件觸發的呢,當然就需要其他 了,不過那些 並不難,大家自己看就是了。中斷的內容講完後,cs8900 start函式也算告一段落,我們回到...

cs8900網絡卡驅動簡要解析 1

和所有其他模組一樣,函式init module是cs8900的入口 module init cs8900 init module exit cs8900 cleanup cs8900 init函式填充net device結構體。net device是網路驅動中最為重要的乙個結構,需要認真閱讀,其原型...