详细透彻的分析DM9000网卡驱动程序(1)

转载地址:http://blog.csdn.net/bingqingsuimeng/article/details/6940276

         自己感觉前段时间的学习,一直是东一榔头,西一棒子,所以决定听“赵磊”大哥的话:这个世界太浮躁,需要静下心来做点儿学问。于是,哥们鼓起勇气开始分析linux内核中的DM9000驱动程序

1.网络相关的程序在linux代码中的层次机构

         从哥们第一天进公司起,就让哥们开始整理**代码,我以为,整理代码应该是从一个较高的层次去整理,只有对整个代码的架构,设计流程了解了,才能算的上是去整理。

所以,什么东西都是经历过后,才能明白其中的奥秘,不是有句叫做:一览众山小嘛,所以,我将先从从一个高的层次,或者说一个抽象的层次,来阐述一下网络相关的东西(重点讨论驱动程序)在linux内核中的层次结构

        

                                                                                                      

                                                                                                                                         图一

      好的,你看到了,我们的设备驱动程序是处于实际硬件设备层之上的一层,所以,也算起到了承上启下的作用,它是在内核空间的,真个linux内核代码有相当大的一部分就是设备驱动程序。

2.实际的网络的传递过程

       下面,我们说一下实际的网络包究竟经过怎样一个流程从用户空间发送到驱动,再到实际的硬件设备的,或者怎样由实际的设备接收之后,经由设备驱动层传递到用户空间的。上图。。。

                                                                          

                                                                                                                                 图二

          好了,这下你清楚了吧?嗯?看不明白?好吧,怎么说哥们既然决定讲了,就将它个翻天覆地,透透彻彻。。。

          (1)接收过程,如上如,网络上的数据包到达网卡后,网卡产生中断,然后设备驱动层收到中断后,开始进行网络包的接收,接收完之后调用一个netif_rx函数交给网络协议层(层次结构上图一),然后就是一层一层的网上传到用户空间了

          (2)发送过程,从用户空间过来的数据包,经过层层穿越之后,到达网络协议层,然后调用一个dev_queue_xmit()函数之后就不管了,剩下的交给驱动层经过处理后,使用函数hard_start_xmit()函数发送,然后硬件上网卡开始发送数据包了

           这就是整个过程,如果你还是不明白,额。。。那么我只能建议你看看《计算机网络》谢老爷子写的那本,第四版或者第五版都行,如果你对中断这块儿的机制不了解,额。。。可以看看单片机相关的东西,其实,通俗的讲,中断就是一种机制,什么机制呢,举个例子就是,假如你正在上课,忽然同学打电话给你,此时,你呢,上课的状态就先断了,而要先接听电话,这就是一种中断,当然,实际的各种硬件设备的中断要比这个复杂,比如保存现场了等等,基本上是这个意思,中断是一种机制,这种机制有利于提高工作效率,还拿刚才的上课举例子,你总不能上课时一直在看有没有电话打来吧,你需要设置铃声,等电话来了通知你。。。好了。。如果说你还是不太明白。。哥啊。。咱问“百哥”或是“谷姐”吧。。

3:DM9000网卡驱动在linux中的实际设计思想.39.1”,没有为什么选择这个版本,哥们随便找了个新的就看了,但是,还是有一个原因,好像都有“喜新厌旧”的习惯吧。。。哈哈哈。。虽然是linux3.0也已经出来了,但哥们既然选择了2.6.39这条路一定要坚持下去,什么?你问我建议你下载哪个版本啊?额。。还是最新吧。。最新的体现了最新的思想,不要总是活在过去哦。。呵呵。。

          好了,扯淡到此为止,分析马上开始。。。。开始上图。。。

          图三

       看见这两个文件了吗?看了哈。。嗯。。。这就是我们分析的重点连个文件。。。嗯?在哪?额。。。\linux-2.6.39.1\drivers\net 目录下。。。不要告诉哥们你不会用Source Insight昂,嗯?你真不会,好吧。。哥们只能勉为其难的告诉你这是一个查看代码的好工具。。剩下怎么用。。你可以去问“百哥”了。。

       好了,我们打开dm9000.c 一共2056行。。嗯。。不多。。在我们的征服范围之内。。。嗯?什么?你嫌多?唉。。其实我也嫌多啊。。我恨不得就一行。。。不过,像咱 这农二代,这点苦还是要吃的的。。好歹说哥们参加工作的第一个项目也写了2000多行代码呢。。

      好了。。还是上图吧。。不然你会说我啰嗦了。。虽然本来就是有点儿啰嗦。。哈哈。。

  1

     嗯。。相信你自己。。你没看错。。是从最后一行往上走的。。为什么?铁道部发言说了。。“我只能说这是一个奇迹”,难怪linux都是一个奇迹。。。大家都知道对于应用程序,我们一般习惯于找main函数,然后开始分析,不过对于驱动,哥们只能拿告诉你,没有main函数,那我们开始从哪分析呢。。。答案是:module_init,模块初始化函数,这才是驱动程序的入口,当然还有一个它的清理函数module_exit

          

时间: 2024-12-02 03:08:08

详细透彻的分析DM9000网卡驱动程序(1)的相关文章

]详细透彻的分析DM9000网卡驱动程序(2)

有人说,少壮不努力,老大做IT,其实,哥们也挺同意这句话的.因为哥们就是做IT的,可见哥们还需要努力啊..以弥补以前欠下的债...         挥手间,又是一年,浮浮沉沉的年华,浮现着摇曳在岁月中的每一个落脚点,蓝天下,朵朵白云飘,风拂过,人在听--<车站>--       上一节我们刚刚贴了一下dm9000的代码就匆匆结束了,只是哥们不想把第一节写的那么复杂,以至于吓跑一些读者,呵呵..那么咱们就从这一篇开始分析吧..放心..我会尽量通俗的讲...       首先,我们可以看到,DM9

详细透彻的分析DM9000网卡驱动程序(4)

           说实话,在这码半天代码,分析了半天,是了神马啊?是因为我们出来江湖混,迟早是要还的,现在我们分析的文件早已超出了dm9000.c,我们完全可以就使用内核提供的接口,而不过问它怎么实现的,但是作为一个有刨根问底精神的人,我们还是需要知道内幕的        正像前几天一个媒体人说到:纳税人有权知道内幕!这句强有力的呐喊.就像人梁宏达,在刘翔事件出来之后第一时间就进行了内幕分析:刘翔跑不跑?问问局领导!刘翔行不行?问问孙海平!刘翔伤没伤?问问赞助商!伤势大不大?问问冬日娜!我了

详细透彻的分析DM9000网卡驱动程序(3)

        以前,听过有一首歌叫做<谁是谁的谁>,好像还不错,世界这么大,你我各自走着自己的精彩的人生,到底谁是谁的谁呢?就像启东事件,就像什锦事件,还是有好多人知道自己是谁的谁,抗议了那些不知道自己是谁的人.震撼,敬佩.          本节继续上次说到那几个结构体,那么他们的作用究竟是什么呢?直接上代码:                          最基本的解释在上面了,表层的解释,第一印象,这也是人们选美的第一个标准.就想前不久,重庆环球小姐大赛出炉,海南小姐选美大赛出炉之后

详细透彻的分析DM9000网卡驱动程序(5)

              上回书说到分配一个网络设备然后进行了初始化,接下来我们继续啊,上代码上代码:                           我了个去,代码啊代码,什么时候能少点?可惜了我们这个时代的青年要完成祖国赋予的历史使命,就要做出不懈努力,毕竟it业不想娱乐圈那样,像杨幂就击败了影后得到了"最后欢迎mtv女歌手"奖,哎,为什么能得这个奖?你懂我懂大家都懂,不就难理解为什么专业评委纷纷吐槽了.            1379行,SET_NETDEV_DEV(nde

Linux下DM9000网卡驱动实验

Linux下DM9000网卡驱动实验 1.1        硬件系统介绍 1.1.1          网络驱动程序的特点     网络驱动程序是介于硬件和内核之间传送数据包,不是面向流的设备,不能象/dev/tty1那样简单的映射到文件系统的节点上.Linux调用这些接口的方式是给他们分配一个独立的名字(如eth0).这样的名字在文件系统中并没有对应项.内核和网络设备驱动程序之间的通信与字符设备驱动程序和快设备驱动程序与内核间的通信是完全不同的.内核不再调用read/write,它调用与数据包

华硕网卡驱动程序导致IE9经常显示已停止工作

  首先请按一下[Windows + R]键,然后输入 msconfig 后在按一下 确定按钮. 请按一下[服务]标签页,然后找到[AtherosSvs]服务,并且取消勾选. 接下来,请再找到[ZAtherosBt&2Wlan Coex Agent],并且取消勾选,完成之后按一下[确定]. 最后请按一下[重新启动]. 重新启动您的电脑之后,您会发现再使用 Internet Explorer 浏览网页会有明显的改善,不过若要彻底解决此问题,建议您可以去华硕官网上找到相应的电脑型号,并更新网卡驱动程

win7网卡驱动程序的安装方法

win7网卡驱动程序的安装方法: 方法一: 1.右击计算机-->管理-->设备管理器: 2.右击网卡设备--属性--驱动程序, 3.点击更新驱动程序. 4.浏览计算机以查找驱动程序软件,浏览位置直接找到光盘网卡驱动. 方法二: 直接用主板驱动光盘安装.把主板光盘放到光驱,然后双击安装,选择网卡,下一步下一步,直到完成,最后重启电脑就OK了. 方法三: 用驱动精灵来安装. 首先下载并安装好驱动精灵,打开驱动精灵,然后会自动更新主板驱动,选择网卡驱动,点击更新,直到完成.

网卡驱动程序故障怎么办

  由于杀毒.非正常关机等原因,可能造成网卡驱动程序的损坏.如果网卡驱动程序损坏,网卡不能正常工作,网络也ping不通,但网卡指示灯发光.这时可通过"控制面板"中"系统"的"设备管理器器"选项,查看网卡驱动程序是否正常,如果"网络适配器"中所显示该网卡图标上标有一黄色"!",说明该网卡驱动程序不正常,用驱动人生重新安装网卡驱动程序,即可解决问题. 驱动人生是一款免费的驱动管理软件,实现智能检测硬件并自动查找

电脑网卡驱动程序不正常怎么办

  1.使用 Windows Update.您可能需要将 Windows Update 设置为自动下载并安装推荐的更新.安装任何重要.推荐和可选的更新即可更新系统功能和其他软件(可能对修复网络连接问题有帮助). 2.安装设备制造商提供的软件.例如,如果您的计算机或网络适配器带有光盘,则此光盘可能包含用于为网络适配器安装驱动程序的软件. 3.自己下载并安装对应版本的驱动程序.您可以在制造商网站上搜索驱动程序.如果 Windows Update 无法为您的网络适配器找到驱动程序,并且该适配器未附带用