有线/无线网卡驱动原理简介
2013-04-20 13:33
225 查看
有线/无线网卡驱动原理简介
网卡里一个概念叫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的模块而已。
原文地址:http://net.zol.com.cn/119/1193530.html
相关阅读:
相关文章推荐
- 有无线网卡驱动未装有线网卡驱动所引起的BOS问题。
- Thinkpad E430+CentOS 6.4+ linux-3.10.12内核网卡驱动(无线+有线)配置
- 笔记本安装Win2012R2 心得(包含无线网卡+有线网卡驱动解决方法)
- Debian下驱动Broadcom系列无线网卡
- ubuntu 12.04 安装无线网卡驱动
- Thinkpad E430+CentOS 6.4+ linux-3.10.12内核网卡驱动(无线+有线)配置
- CentOS 6.5 BCM43142 80211无线网卡驱动安装
- CentOS5.4安装BCM4312无线网卡驱动
- EDUP无线网卡在win10下无法安装驱动怎么解决?
- Ubuntu12.04下安装TP-LINK TL-WN727N无线网卡驱动(RTL8188EU芯片组)
- C# 区分无线网卡和有线网卡的MAC
- Kali Linux ——在无网络情况下安装无线网卡驱动
- Dell Vostro 3400在Fedora 15安装无线网卡驱动
- CentOS 6.4 安装D-Link 525(RT5360)无线网卡驱动
- 记录Ubuntu 14.04 下安装无线网卡驱动解决无法连接WiFi的过程
- 如何让你的计算机无线网卡和有线网卡同时使用
- fedora 18 无线网卡驱动安装
- Linux下RTL8723BE无线网卡驱动问题解决方法
- linux ubuntu安装无线网卡驱动