linux网卡驱动对网卡类型的依赖性

 前面我们对网卡的各种类型进行了描述,不同的网卡如何开发相应的linux驱动呢?有没有一个捷径,或者统一的标准,让我们一学就会,快速上手呢?
     很遗憾,这么多的分类使用的技术各不相同,无法用一个统一的开发模版!因此,开发网卡驱动需要有侧重点的实现。
      同时需要补充的一点,前面列举的网卡都是eth(以太网)卡,对于令牌网卡等不做介绍。读者可以自行领悟。
1。开发网卡驱动的首要因素
    网卡的首要参数是 速率!对于不同的速率,开发人员必须小心对待。
假定CPU是1G,网卡是10M/100M速率。这时候网卡工作于中断模式,对CPU性能没有太大影响。
假定CPU是1G,网卡是1000M速率。这时候网卡工作于中断模式,对CPU性能影响就很大了。
网卡速率的不同,必然要求我们的驱动工作方式与之匹配,才能达到最佳工作状态。
 
因此,开发网卡必须对速率首要关心。
 
 
2。网卡涉及到的技术细节
   网卡本身没有太多的技术可言,即使是MAC和PHY的关系,也不是多么负责。
   网卡的技术复杂度来源于 总线类型
   相同的网卡芯片,若采用了不同的总线类型,用到的技术差别很大。
 
  网卡的接入总线类型决定因素很多:
 很多网卡本身提供了ISA,PCI接口。
 网卡通过外接总线控制器,完成接口转换。例如网卡芯片是PCI接口,通过外接其他芯片,做成USB网卡
 
任何插入到系统中的网卡,从CPU的角度首先看到的是总线,随后才是网卡芯片。
总线驱动要先于网卡驱动实现!
总线往往是复杂繁琐,然而又是标准统一的。
总线的标准化,使其很难做到百花齐放,也给开发人员带来了便利。
 
3。网卡驱动在linux内核中的配置依赖性
PCMCIA网卡要求内核首先支持PCMCIA总线。
USB网卡要求内核首先支持USB总线。
总线是由总线控制器实现,总线控制器作为一个物理设备当然也是需要驱动程序支持。
这就是所谓的依赖性了。
 
4。举个网卡驱动开发的例子,讲述一下分析过程。
     目前有个项目要求如下:
      1。该网卡采用芯片A ,芯片A的定位于桌面系统应用。
      2。芯片A只支持1000M速率
      3。网卡要求提供两种型号,USB接口,PCI-E接口。
      4。芯片A内部含有MAC,没有PHY
 思考题:该网卡是有线还是无线的呢??
分析过程:
      1。驱动程序要提供两个,一个是USB网卡驱动,一个是PCI-E驱动。
      2。网卡速率为1000M,由于对电脑的接口不同,对驱动开发来说存在很大差异性。
           USB2.0的速率为480M,PCI-E受E*X的影响。网卡体现到CPU面前的速率差别比较大。
          USB网卡要考虑提升性能,PCI-E网卡考虑对CPU负荷的影响。
      3。USB网卡的驱动必须符合USB规范,使用USB内核接口注册设备
           PCI-E网卡的驱动符合PCI规范,使用PCI内核接口即可。
     4。驱动代码具体实现发送数据包和接收数据包时,必须考虑1000M速率对性能的影响。
           到底是采用中断方式还是查询方式,取决于应用环境。
 
将来作为产品测试性能时:
USB网卡的实际速率<<1000M,可能才100M
PCI-E网卡的实际速率<1000M,但可能有800M的吞吐量
 
原文地址: http://blog.21ic.org/user1/1066/archives/2007/40801.html

你可能感兴趣的:(linux,linux内核,工作,测试,产品)