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

处女座舞者001

处女座舞者001

2016-01-29 19:26

关于Linux下网卡的一些技术信息,关于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 内核的驱动程序接口 

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


探测 

在启动时调用以检查网卡存在与否。如果可以通过读取内存等非强制手段进行检查最好。
展开更多 50%)
分享

猜你喜欢

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

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
关于Linux下网卡的一些技术信息

关于prototype.js的一些技术说明

Web开发
关于prototype.js的一些技术说明

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Linux下网卡设置常见问题

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux下网卡设置常见问题

关于纸巾的一些常识

生活常识
关于纸巾的一些常识

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

一些关于PHP的知识

Web开发
一些关于PHP的知识

关于CSS的一些基础应用

Web开发
关于CSS的一些基础应用

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

ASP漏洞及安全建议(3)

ASP漏洞及安全建议(3)

在Word中跳过首页计算页码

在Word中跳过首页计算页码
下拉加载更多内容 ↓