S3C2440驅動簡析——DM9000網卡驅動(2)

     經過本系列第一篇博文對DM9000網卡驅動的框架解釋之後,接下來就應該按模塊來分析這個對新手來說的“龐然大物”了。本文先解釋.driver 和.remove 這兩條分支吧。什麼?不知道那兩個東東是幹什麼用的?請先看小弟這系列的第一篇博文吧(http://blog.csdn.net/jarvis_xian/archive/2011/06/10/6537446.aspx)。

 

在介紹那兩條分支之前,我們最好還是遵循分析驅動程序的步驟吧,先找到“入口”和“出口”,方能進可攻退可守!

 

由此可看出DM9000是一個平臺虛擬總線驅動。它的platform_driver 正是函數參數dm9000_driver

dm9000_driver:

這裏就是我們上文所提及的三個分支:.driver  .probe  .remove  ,其中 .probe留待接下來的博文再做詳細分析,本文先討論.driver 和.remove 。我們看到.driver結構體內最重要的應當看成員.pm,其賦值dm9000_drv_pm_ops代碼如下

 

即提供兩個功能函數dm9000_drv_suspend 和dm9000_drv_resume,逐一分析如下:

 

1.dm9000_drv_suspend:

本函數作用是掛起網卡接口,其中最核心的動作在於netif_device_detach(ndev);

netif_device_detach函數顧名思義,完成臨時刪除設備的動作。函數首先判斷設備是否屬於連接狀態和運行狀態(缺一不可),然後就執行netif_tx_stop_all_queues函數,刪除設備實則即爲停止該設備所有工作隊列,並非物理上的刪除。

 

2.dm9000_drv_resume

函數完成恢復接口的功能,主要來看netif_device_attach(ndev);

跟netif_device_detach函數對應,本函數實際完成把工作隊列重新喚醒,並喚醒網絡接口的看門狗。

 

3.dm9000_drv_remove

跟以往的remove函數相似,都是很有禮貌地把自己所佔用的資源歸還給內核。試想如果各個模塊並不是這麼有禮貌的話,一個系統長時間運行,系統資源總有耗竭之時,到時等待我們的就只有崩潰。所以禮讓不僅“生存”在我們日常生活當中,在Linux系統裏也能很好地把這個優良特質顯現出來!

 

本文內容相對簡單,權當熱身,後面博文將會分析.probe那一系列的函數及其操作,敬請期待~

 

 

 

本系列課程鏈接地址

DM9000網卡驅動(1)http://blog.csdn.net/jarvis_xian/archive/2011/06/10/6537446.aspx
DM9000網卡驅動(2)http://blog.csdn.net/jarvis_xian/archive/2011/06/12/6539931.aspx
DM9000網卡驅動(3)http://blog.csdn.net/jarvis_xian/archive/2011/06/13/6542411.aspx
DM9000網卡驅動(4)http://blog.csdn.net/jarvis_xian/archive/2011/06/15/6545109.aspx
DM9000網卡驅動(5)http://blog.csdn.net/jarvis_xian/archive/2011/06/15/6547203.aspx

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章