分享
 
 
 

Linux下网卡的一些技术信息(1)

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

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

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 内核的驱动程序接口

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

探测

在启动时调用以检查网卡存在与否。如果可以通过读取内存等非强制手段进行检查最好。也可以从I/O端口读取。在探测开始向I/O端口写不好,因为这样可能会损害另一个设备。通常在这里还进行一些设备初始化(分配I/O空间、IRQ、填充dev-???域等等)。必须了解网卡可以配置到哪些I/O端口/内存、如何启用共享内存(如果用了的话)以及如何选择/启用中断产生,等等。

中断处理程序

在网卡发出一个中断时内核调用的程序。他需要确定网卡发出中断的原因并进行相应的操作。一般的中断条件是接收到数据、发送完成、报告出错状况。需要了解相关的中断状态位以进行相应的操作。

传送函数

与dev-hard_start_xmit()链接,在内核想通过设备传送数据时调用它。该函数把数据放入网卡并触发传送。需要了解如何把数据打包并传给网卡(共享内存拷贝、PIO传送、DMA?),以及放入网卡正确的位置。然后需要了解如何通知网卡把数据发送到线路上,(可能)在发送完成后发出一个中断。在硬件无法接收更多数据包时需要设置dev-tbusy标志。在网卡有空间可用时,一般这发生在传送完成中断过程中,清除dev-tbusy标志并用mark_bh(INET_BH)通知上一层。

接收函数

在网卡报告有数据时由内核中断处理程序调用。它把数据从网卡上移出,放入一个sk_buff并通过执行netif_rx(sk_buff)告诉内核数据所在位置。需要了解如何在接收数据时启用中断生成,如何检查相关的接收状态位,以及如何从网卡获取数据(通过共享内存拷贝、PIO、DMA,等等)。

打开函数

与dev-open链接,在有人使用ifconfig eth0 up时网络层调用它―― 把设备连到线路上并启用来接收/发送数据。任何在探测过程中(启用IRQ生成等)没有完成的特别的初始化操作都在这里进行。

关闭函数(可选)

在有人使用ifconfig eth0 down时使网卡进入一个清醒的状态。如果硬件许可的话它会释放中断和DMA通道,并完全关闭以节约能源(象收发器一样)。

其它函数

象一个重新设置函数,如果事情变得很糟,驱动程序可以试图重新设置网卡作为最后防线。一般在发送超时或类似情况下如此进行。也是一个读取网卡统计寄存器的函数,如果是这样配备的话。

4 3Com的技术信息

如果对3Com网卡驱动程序的工作感兴趣,可以从3Com公司获取技术资料。Cameron友好地告诉了我们该如何做:

在我们的“技术参考文献”里给出了3Com的以太网适配器驱动程序程序员需要了解的资料。这些手册描述了板上的程序员接口,但没有提及诊断、安装程序等终端用户所看到的东西。

网络适配器分部的市场部有技术参考资料分发。为了使这个计划更有效,我们把它集中到一个称作“CardFacts”的自动电话系统里。你可以打电话来,然后它把资料传真给你。要索取技术参考资料,打电话到408-727-7021。索取开发人员的订单,资料号是9070。在打电话前准备好你的传真号码。填完订单后把它传真到408-764-5004。手册会由联邦速递的次日服务送到。

有人认为我们的手册不该免费,他们也在寻找此系统过于昂贵或占用的时间和努力太多的证据。到目前为止,3Com的顾客确实很好,向我们提出的要求也很合理。我们需要你们的继续合作并把这样的服务维持下去。

5 基于AMD PCnet/LANCE的网卡的注意事项

AMD的LANCE(以太网的局域网控制器)是最早提供的,已经被“PCnet-ISA”芯片所取代,否则又名为79C960。注意,名称“LANCE”有毛病,有些人会用老名称称呼新芯片。AMD的网络产品分部的Dave Roberts友好地提供了下面有关该芯片的信息:

“从功能上来看,它等同与NE1500。它的寄存器组与使用附加1500/2100结构的老式LANCE一样。PCnet-ISA可以使用较早的1500/2100驱动程序。NE1500和NE2100的结构基本上是相同的。开始Novell把它称为2100,但后来想区分同轴电缆与10BASE-T网卡。属于10BASE-T的就只采用1500范围的编号。这是仅有的区别。

许多公司提供基于PCnet-ISA的产品,包括HP、Racal-Datacom、Allied Telesis、Boca Research、Kingston Technology等等。除了有些制造商增加了“无跳线”特性允许软件配置网卡外,这些网卡基本上都是一样的。大多数制造商没有增加这一特性。AMD提供了一个使用PCnet-ISA的网卡的标准设计软件包,许多制造商不加改变地直接使用我们的设计。这也就是说,如果想编写大多数基于PCnet-ISA的网卡的驱动程序,只需要从AMD获取数据资料。打电话给我们的资料分发中心(800)222-9323,索取PCnet-ISA的数据资料Am79C960。这是免费的。

要迅速了解一块网卡是否“标准”网卡只需要看一下它。如果是标准的,网卡上只有一块大的芯

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有