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

 

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