关于Linux下网卡的一些技术信息

2016-01-29 19:26 5 1 收藏

关于Linux下网卡的一些技术信息,关于Linux下网卡的一些技术信息

【 tulaoshi.com - Linux 】

  对于那些想了解更多有关网卡如何工作、或如何使用现有驱动程序,以及试图为目前不支持的网卡编写自己的驱动程序的人来说,这些信息应该会有用。如果你没有这种想法,那么最好跳过这一节。 

1 可编程I/O、共享内存与DMA 

如果已经可以发送接收背靠背数据包,就无法把更多的数据放到网络上。每一个现代的以太网卡都可以接收背靠背数据包。Linux的DP8390驱动程序(wd80x3、SMC-Ultra、3c503、ne2000,等等)基本上都可以发送背靠背数据包(依赖于当前的中断延迟),3c509和AT1500的硬件在自动发送背靠背数据包上没有一点问题。 

ISA总线可以达到5.3MB/sec (42Mb/sec),对10Mbps以太网而言已经足够了。对于100Mbps网卡,显然需要更快的总线来充分利用网络带宽。 

可编程I/O(如NE2000、3c509) 

优点:没有使用任何受限制的系统资源,只用了若干I/O寄存器,而且没有16M的限制。 

缺点:一般传输速率较慢,CPU需要等待,几乎不可能访问交叉的数据包。 

共享内存(如WD80x3、SMC-Ultra、3c503) 

优点:简单,比可编程I/O速度快,允许随机访问数据包。在可能的情况下,Linux驱动程序在从网卡复制出接收的IP数据包时计算其校验和,从而比相应的PIO网卡进一步减少了对CPU的占用。 

缺点:使用高端内存空间(对DOS用户来说是个大问题,在Linux下没有问题),依然要占用CPU。 

从属(普通)的直接内存存取(Linux下没有这种情况!) 

优点:在实际数据传递过程中不占用CPU。 

缺点:检查边界条件、分配相邻的缓存和DMA寄存器编程使该方法成为最慢的技术。它还占用了一个珍贵的DMA通道,并要求对齐的低端内存缓存。 

总线控制的直接内存存取(如LANCE、DEC 21040) 

优点:在数据传输过程中不占用CPU,可以把缓存串起来,CPU时间很少或不花费在ISA总线上。大多数总线控制的Linux驱动程序现在使用一种“copybreak”方案,较大的数据包直接从网卡放进内核的网络缓存,小的数据包被CPU复制到cache里进行下一步的处理。 

缺点:(只适用于ISA总线的网卡)网卡要求低端内存缓存和一个DMA通道。任何总线控制器在与其它强占总线的总线控制器,如某些古老的SCSI适配器,一起工作时都会出问题。有几个设计低劣的主板芯片组在与总线控制器一起使用时也有麻烦。不使用任何类型的DMA设备的一个原因是使用了设计为代替386的486处理器插件:这些处理器在每个DMA周期都必须刷新cache。(这其中包括Cx486DLC、Ti486DLC、Cx486SLC、Ti486SLC,等等。) 


2 编写驱动程序 

在Linux下使用以太网卡所必需的只不过是相应的驱动程序。因此,关键是制造商要向公众公开编程的技术资料,而无需你(或其他什么人)签署什么协议。关于获取资料的可能性(也许你不编写代码,那么就是其他人编写你确实需要的驱动程序的可能性),一个较好的指南是Crynwr (nee Clarkson)的包驱动程序的可用性。Russ Nelson在干这些事,对开发Linux驱动程序很有帮助。网上冲浪者可以试着看一下Russ的软件。 

Russ Nelson's Packet Drivers 

有了资料,就可以为网卡编写驱动程序并在Linux下使用(至少从理论上来说是这样)。记住,有些为XT一类机器设计的老式硬件在Linux这样的多任务环境下工作得不是很好。如果网络流量较大,使用这些网卡会带来大麻烦。 

大多数网卡都带有如NDIS和ODI一类的MS-DOS接口的驱动程序,但对Linux没有用。许多人建议直接链接它们或自动翻译一下,但这几乎是不可能的。MS-DOS驱动程序需要在16比特模式,并依赖于“软件中断”,这二者与Linux内核不兼容。这种不兼容实际上是Linux的一个特性,有些Linux驱动程序比其相应的MS-DOS驱动程序要好得多。比如“8390”系列驱动程序使用乒乓传送缓存,该方法刚刚被引进MS-DOS。 

(乒乓传送缓存意味着为传送数据包使用至少两个最大大小的包缓存。在网卡发送其中的一个时,载入另一个。在第一个包被发出去后,立刻发送第二个包,依次类推。这样,大多数网卡就可以连续向线路上发送背靠背数据包。) 

好啦。你可以决定为Foobar Ethernet网卡编写驱动程序了,因为你有编程资料,而且还没人写这个驱动程序。(......这是两个主要的需求)你可以从Linux内核源码树中提供的网络驱动程序框架开始。在所有近期的内核里都能找到这个文件/usr/src/linux/drivers/net/skeleton.c。也可以看看如下URL的Kernel Hackers Guide:KHG 


3 内核的驱动程序接口 

下面对编写一个新驱动程序所必需的函数进行了若干说明。和上面提到的驱动程序框架一起阅读可以更清楚一些。 


探测 

在启动时调用以检查网卡存在与否。如果可以通过读取内存等非强制手段进行检查最好。

来源:http://www.tulaoshi.com/n/20160129/1509412.html

延伸阅读
很多人爱吃枣,喜欢它味道的脆甜,一到季节便买上一部分,回家慢慢享用。不过您知道吗?鲜枣还有缓解压力的功效,不过不宜贪多。下面为您详细介绍有关吃枣的学问。 由于鲜枣皮含有大量的不可溶纤维素,在吃的时候尽量不要“囫囵吞枣”,而要细嚼慢咽,否则可能会引起腹胀等不适的感觉。同时,慢慢咀嚼也是释放压力、平静心情的...
标签: 美白
问答 图钉提问: 我是一个天生皮肤黑的女生,请问有什么有效的美白小妙招? 图老师解答: 病情分析:       您好,天生黑的皮肤是很难美白成功的。       指导意见:       主要是注意防晒,出门要使用防晒霜和打伞,一周做一次美白面膜,平时...
    1.Linux运行很慢 一些DOS程序看起来在运行速度上比Linux程序要快,这主要是因为DOS不是多任务操作系统。事实上NT在运行一些程序时,速度也比DOS慢,原因是相同的。但是两个多任务操作系统相比,NT远没有Linux运行得快。 2.Linux会频繁崩溃 有这种想法的用户,一定对Linux不是很了解。目前网络操作系统...
标签: flash教程
Java编程规则 包含了大量有用的建议,帮助大家进行低级程序设计,并提供了代码编写的一般性指导,鉴于AS2.0与Java的相似性,很多建议对As2.0同样有效,特摘选部分,希望对大家有所帮助: (1) 类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首...
关于羊水穿刺的一些问题 什么是羊水穿刺? 羊水穿刺检查是产前诊断的一种方法,一般适合中期妊娠的产前诊断。羊水穿刺术,是将 怀孕 中所产生的羊水,经由一种简单的仪器,在无菌下抽出若干毫升,加以病因化验以判断胎儿健康。这种手术最好在怀孕15~16周进行。太早羊水不够,抽取标本困难...

经验教程

443

收藏

24
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部