网站首页  注册会员  本站免费电影 留言板  繁體中文

 

您现在的位置: 陈鹏个人网站 >> 电脑应用 >> 网络应用 >> 组网维护 >> 正文
 

   
专 题 栏 目
相 关 文 章

酷盘网络U盘新年大升级
网络应用最炫手机推荐
4G网络安致新宠 HTC EV0
网络购物请提防十大“黑
网络引领生活减法 80后选
网络速度变慢的常见23种
机遇与洗牌 网络视频行业
网络传情新玩法Lava-lav
试用网络相册拍拍乐的全
网络通话平台—群英会20

 
网络基础:有线与无线网卡驱动原理           
网络基础:有线与无线网卡驱动原理
作者:陈鹏 文章来源:eNet 点击数: 更新时间:2009-9-11 1:42:03
 




 

网卡里一个概念叫descripter,它是DMA和CPU交换控制的一个固定结构链表。

  在初始化的时候,申请一定数目的和descripter的结构一样大小的内存给网卡。对于收包方向上,还要申请同样数目的packet buffer挂在这些descripter上。发包方向上,只在要发包的时候把要发送的这个packet buffer挂在当前的descripter上,初始化的时候并不需要申请。

  初始化还需要对descripter做一些必要的设置。完成以后,在收包方向,只要把这些descripter的控制权从CPU交到DMA的手上,然后DMA负责检测网络上有没有包进来,如果有,会根据设定做一些检查,没有问题就把这个包复制到第一个descripter 里面所带的packet buffer里,产生一个信号通知CPU(一般是interrupt)同时也把这个descripter的控制权交给CPU,DMA自己会跳到下一个descripter上继续同样的监测。一般这个链表是环行的,所以到底以后可以从头再开始,也有的网卡会记住哪个是第一个哪个是最后一个,自己做跳转。 另外一端,CPU如果接收到interrupt或者自己loop查询时,发现有descripter的控制权是自己时,就要去把这个packet buffer取出来,这里可以把内容复制出来,也可以用一个新的把这个packet buffer替换掉,(在descripter里记录只是buffer的指针),很明显这种替换的做法,效率很高,这就是所谓“Zero copy”。当然也有些网卡像realtek 8139系列就没办法做到这一点。因为因为他的descripter 和packet buffer是连在一起的连续空间。

  发包方向,初始化时只要descripter填些默认值就可以了。在要发包的时候,才去做具体的事情,包括把packet buffer链到descripter上,再对descripter做必要设置,然后就把控制权交给DMA去处理。DMA发现这个descripter的控制者是自己,就会把这里packet buffer里面的内容发送出去。发送完毕也会发个interrupt信号给cpu,然后把控制权还给cpu。CPU收到这个发送完成的interrupt,就会把这个packet buffer free掉。这里也是"Zero copy"的机制。另外一种做法是在初始化也和接收一样同样也申请packet buffer给descripter,在发送的时候需要把要发送的内容复制到这个packet buffer里,然后发送完成后,就不需要对这个packet buffer做什么特别的事情了。

  大概的原理就是这样的,当然还有其他许多东西比如flow control可以再做深入了解,而且每颗芯片都不太一样,需要结合datasheet具体去处理。

  无线网卡硬件实现和有线网卡差别很大,但是他的驱动原理其实和有线网卡是一样的,只是多了个RF的模块而已。

文章录入:陈鹏    责任编辑:陈鹏 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     
     
     
     
     

    Copyright © 2007 - 2009 chenpeng123.com All Rights Reserved
    本站所有文章,软件等均来自网络收集,不代表本站观点,仅供学习和研究使用。如有侵犯您的版权,请联系我们,本站将立即删除。
    鲁ICP备07014697号
    你是本站第 位访客