Linux以太网-HOWTO by Paul Gortmaker v2.8, Oct 29, 2000 _________________________________________________________________ 本文为以太网-HOWTO,汇集了有关哪些以太网装置可以用于Linux,以及如何进行 设置的信息。请注意本文侧重于以太网卡的硬件与底层驱动方面的内容,并未涵 盖诸如ifconfig和route等软件方面的问题。对于那些问题,请参 阅Network-HOWTO。 _________________________________________________________________ 1. 导言 * 1.1 本文档的新版本 * 1.2 以太网-HOWTO的用法 * 1.3 帮帮我——网卡没反应! * 1.4 网卡应该支持的电缆类型 2. 常见问题 * 2.1 该为Linux买什么网卡? * 2.2 Alpha驱动程序——获取与使用 * 2.3 一台机器使用多个以太网卡 * 2.4 这个以太东东不干活。为什么? * 2.5 NE1000/NE2000网卡(及其兼容卡)的问题 * 2.6 SMC Ultra/EtherEZ和WD80*3网卡的问题 * 2.7 3Com网卡的问题 * 2.8 非特定网卡的FAQ。 3. 性能小技巧 * 3.1 一般概念 * 3.2 ISA网卡和ISA总线速度 * 3.3 设置TCP的Rx窗口 * 3.4 增强NFS性能 4. 有关销售商/制造厂家/型号的信息 * 4.1 3Com * 4.2 Accton * 4.3 Allied Telesyn/Telesis * 4.4 AMD / Advanced Micro Devices * 4.5 Ansel Communications * 4.6 Apricot * 4.7 Arcnet * 4.8 AT&T * 4.9 Boca Research * 4.10 Cabletron * 4.11 Cogent * 4.12 Compaq * 4.13 Danpex * 4.14 D-Link * 4.15 DFI * 4.16 Digital / DEC * 4.17 Farallon * 4.18 Fujitsu * 4.19 Hewlett Packard * 4.20 IBM / International Business Machines * 4.21 ICL Ethernet Cards * 4.22 Intel Ethernet Cards * 4.23 Kingston * 4.24 LinkSys * 4.25 Microdyne (Eagle) * 4.26 Mylex * 4.27 Novell Ethernet, NExxxx及其相关兼容卡。 * 4.28 Proteon * 4.29 Pure Data * 4.30 Racal-Interlan * 4.31 RealTek * 4.32 Sager * 4.33 Schneider & Koch * 4.34 SEEQ * 4.35 SMC (Standard Microsystems Corp.) * 4.36 Texas Instruments * 4.37 Thomas Conrad * 4.38 VIA * 4.39 Western Digital * 4.40 Winbond * 4.41 Xircom * 4.42 Zenith * 4.43 Znyx * 4.44 识别未知网卡 * 4.45 非以太网设备的驱动程序 5. 电缆、同轴电缆、双绞线 * 5.1 以太网细缆(thinnet) * 5.2 双绞线 * 5.3 以太网粗缆 6. 软件设置与网卡诊断 * 6.1 以太网卡的配置程序 * 6.2 以太网卡的诊断程序 7. 技术信息 * 7.1 可编程I/O、共享内存与DMA * 7.2 涉及总线带宽的性能 * 7.3 32比特(VLB/EISA/PCI)以太网卡 * 7.4 编写驱动程序 * 7.5 内核的驱动程序接口 * 7.6 3Com的技术信息 * 7.7 基于AMD PCnet/LANCE的网卡的注意事项 * 7.8 广播与混杂模式 * 7.9 Berkeley包过滤器(BPF) 8. 便携式/笔记本电脑联网 * 8.1 使用SLIP * 8.2 PCMCIA支持 * 8.3 对接座内的ISA以太网卡。 * 8.4 袖珍/并口适配器。 9. 杂项 * 9.1 向内核传递以太网参数 * 9.2 把以太网驱动程序作为模块使用 * 9.3 相关文档 * 9.4 声明与版权 * 9.5 结束语 _________________________________________________________________ 1. 导言 以太网-HOWTO包括了该买什么网卡与不该买什么网卡;如何设置网卡,怎样运行 多个网卡,以及其它常见错误和问题。它包含了对目前所有能够得到的最常见网 卡的支持的细节资料。 它不包含有关软件方面的内容,因为NET-3 Howto中包含了这些内容。还要注意这 里不包括(或者至少不应当包括)那些非Linux特有的有关以太网的一般问题的解 答。对于那些问题,可以参考comp.dcom.lans.ethernet的FAQ中的大量资料,与 所有其它新闻组FAQ一样通过FTP到rtfm.mit.edu获取。 本修订版覆盖了Linux 2.2.17及其之前的内核发行版本。 以太网-HOWTO的作者为: Paul Gortmaker, p_gortmaker@yahoo.com 原始的ASCII版本的以太网-HOWTO的主要资料来源为: Donald J. Becker, becker@scyld.com 感谢他编写了许多Linux目前使用的以太网卡驱动程序。他也是最初的NFS服务器 的作者。谢谢Donald! Copyright (c) 1993-2000 本文的版权所有人为Paul Gortmaker。请阅读本文档 结尾处的声明与版权信息( [1]copyright)以了解有关分发本文及通常的“我们不 对你试图破坏......的行为负责”之类的法律信息。 1.1 本文档的新版本 本文档的新版本可以从如下主页获得: [2]Ethernet-HOWTO 希望采用FTP方式或者希望获取非HTML格式文档的可使用以下站点: [3]Sunsite HOWTO Archive 这是“官方”站点——也可以在其它各种Linux WWW/ftp镜像站点找到本文档。在 有了新资料或新驱动程序时本文档将进行更新。如果你阅读的文档已经存在6个月 以上了,那么你需要检查一下是否已经有更新过的版本。 本文档有多种格式(postscript,dvi,ASCII,HTML,等等)。推荐用HTML格式 浏览(通过WWW浏览器)或Postscript/dvi格式浏览。这两种格式都包含有普通文 本ASCII格式无法提供的交叉引用功能。 1.2 以太网-HOWTO的用法 由于本指南越来越大,你可能不希望花一个下午从头读到尾。而令人高兴的是你 不必阅读全部内容。HTML和Postscript/dvi版本都有内容列表,可以帮助你更快 地找到所需的内容。 可能你是由于无法使网卡工作,而且不知道该怎么做或者如何检查,才来阅读本 文档的。下一节( [4]帮帮我——网卡没反应!)就是针对Linux初学者并给出正确 的指导。 经常有一些问题被不同的人问了一遍又一遍。可能你碰到的某个问题就是常见问 题之一,而且在本文档的FAQ部分( [5]常见问题)已经有了答案。每个人在发文寻 求帮助之前都最好先看一下这一节。 如果你还没有网卡,那么你可能想从决定买网卡开始。( [6]该为Linux买什么网 卡?) 如果你已经有了一块以太网卡,但不能确定是否可以在Linux上使用它,那么你可 能想读一下包含每一个制造厂家及其网卡的特定信息的章节。( [7]有关销售商/ 制造厂家/型号的信息) 如果你对Linux设备驱动程序的一些技术细节感兴趣,那么你可以浏览有此类信息 的章节。( [8]技术信息) 1.3 帮帮我——网卡没反应! 好,别紧张。下面就告诉你如何解决问题,即使你此前对Linux或以太网硬件一无 所知。 首先你需要弄清楚你的网卡类型,然后确定Linux是否有此类型网卡的驱动程序。 主机在控制不同的网卡时使用的方法一般也不一样,而Linux驱动程序(如果有的 话)就以允许Linux使用此卡的格式包含了这样的控制信息。如果你没有手册一类 的东西让你知道网卡的类型,那么你可以尝试处理“神秘”网卡的章节(参考章节 : [9]识别未知网卡)。 现在你知道了你的网卡类型,阅读特定网卡章节中有关你的网卡的细节(参考章 节: [10]有关销售商/制造厂家/型号的信息),那里以字母顺序列出了网卡制造 厂家、各自的类型号以及是否有Linux驱动程序。如果在列表中被表明“不支持” ,你就可以放弃了。如果从中找不到你的网卡,那么看一下你的网卡手册是否说 它与某个已知网卡类型“兼容”。例如至少有几百种网卡与原来的Novell NE2000设计兼容。 假设你已经发现了你的网卡有Linux驱动程序,现在就找到并利用它。因为Linux 有你的网卡的驱动程序并不意味著它存在每一个内核中。(内核是启动时最先载 入的操作系统核心,包含各种硬件的驱动程序,以及其它等等。)可能只有很少 几个预先生成的内核,和一大批较小的作为分立模块的驱动程序,或者是许多的 内核,覆盖了大量内建驱动程序的组合,这都完全取决于是谁生成了你所使用 的Linux发行版本。 现在的大多数Linux发行版本都提供大量较小的作为分立模块的不同驱动程序。需 要的模块通常可以在启动过程的后期载入,或者在存取特定设备时以命令的形式 载入一个驱动程序。你需要在内核启动后把该模块加载到内核上。查阅你所用的 发行版本中有关安装和使用模块的信息,并参考本文档的有关模块章节。( [11] 把以太网驱动程序作为模块使用) 如果你没有找到包含你的网卡驱动程序的已生成内核,也没有找到该驱动程序的 模块形式,那么可能是你的网卡不够常见,而且需要你自己生成一个包含该驱动 程序的内核。只要你已经安装了Linux,生成一个定制的内核一点儿都不难。你只 要对内核需要包含些什么回答是或者不是,然后让它生成就行了。有一 个Kernel-HowTo可以帮助你。 此时你还需要以某种方式启动内建了你的驱动程序的内核,或者以模块的形式载 入驱动程序。大约人们碰到的问题有一半儿出在没有以这种或那种方式载入驱动 程序,所以你会发现网卡现在工作了。 如果它还不工作,那么你需要证实一下内核确实检测到了网卡。要做到这一点, 你需要在系统启动以及所有模块载入之后键入dmesg | more。这可以让你查看启 动过程中内核所显示的启动信息。如果网卡被检测到,你可以从中找到以eth0开 头的网卡驱动程序显示信息,指出网卡所使用的驱动程序名称和硬件参数(中断 设置、I/O地址等等)。(注意:在启动时,Linux会列出所有系统中安装的PCI卡 ,无论是否有驱动程序——不要把这个误认为其后的驱动程序检测!) 如果你没看到这样的驱动程序识别信息,那么驱动程序就没有检测到你的网卡, 这就是问题所在。查看FAQ( [12]常见问题)寻找网卡未检测到时该做些什么。如 果你的网卡是NE2000兼容的,在FAQ中有一些有关NE2000网卡检测的技巧。 如果网卡被检测到了,但检测信息报告了一些错误,比如资源冲突,那么驱动程 序可能无法正常初始化,网卡还是不可用。这一类的最常见错误信息也在FAQ中列 出来了,并给出了相应的解决方案。 如果检测信息看起来没问题,那么再检查一下驱动程序报告的网卡资源是否与网 卡的物理设置一致(网卡的物理设置或者是通过网卡上的跳线,或者是网卡制造 厂家提供的软件工具完成。)它们必须完全一致。例如,网卡的跳线或配置 为IRQ 15,而驱动程序在启动信息中报告为IRQ 10,那么就会出问题。在FAQ中讨 论了最常见的驱动程序错误地检测各种网卡配置信息的情况。 现在你已经使你的网卡以正确的参数被检测到了,但愿一切正常。如果还有问题 ,那么或者是软件配置有错,或者是硬件配置有错。软件配置错误就是 在ifconfig和route命令中没有设置正确的网络地址,其处理细节可以在Network HowTo和“Network Administrator's Guide”中找到,它们可能都在你用来安装 的CD-ROM上。 硬件配置错误是某些资源冲突或忘记配置(即在启动时没检测到驱动程序),使 网卡无法正常工作。通常可以用几种不同的方法来检查。(1) 在ifconfig试图打 开设备来使用时报告出错信息,如“SIOCSFFLAGS: Try again”。(2) 驱动程序 报告eth0出错信息(用dmesg | more查看)或者每次试图发送或接收数据时奇怪 的不一致。(3) 键入cat /proc/net/dev来显示eth0的errs、drop、fifo、frame 或carrier列中的非零数字。(4) 键入cat /proc/interrupts显示网卡的零中断计 数。大多数典型的硬件配置错误也在FAQ中进行了讨论。 好吧,如果你现在还有麻烦,阅读本文档的FAQ,阅读有关销售商章节中有关你的 网卡的细节,如果问题还没解决,那么你只好求助于某个相应的新闻组了。在求 助文章中请给出所有相关的细节资料,比如网卡商标、内核版本、驱动程序的启 动信息、cat /proc/net/dev的输出、清晰的问题描述,当然还有你在试图解决问 题时尝试采用的方法。 你可能会奇怪有那么多的人发出诸如“Can someone help me? My ethernet doesn't work.”而没有其它内容的无用信件。新闻组的读者一般会忽略掉这些愚 蠢的信件,而详细的有内容的问题描述则会让“Linux专家”立即指出你的问题所 在。当然在用电子邮件发送问题报告时这也同样成立——总是提供尽可能多的信 息。 1.4 网卡应该支持的电缆类型 使用RJ-45(大的电话插头)连接器的双绞线从技术上来说叫做10BaseT。你可能 听到过它被称为UTP(无屏蔽双绞线)。 使用BNC(金属的推进和旋转锁定)连接器的以太网细缆(RG-58同轴电缆)从技 术上来说叫做10Base2。 只会在早期的装置上发现的老式以太网粗缆(10mm同轴电缆)被称为10Base5。在 某些以太网卡上使用的15针D形插座(AUI连接器)是用来连接以太网粗缆和外部 收发器的。 大多数以太网卡都有价格稍高$10-$20的“Combo”版本。它们同时提供双绞线和 细缆以太网收发器,可以让你以后改变主意。 大多数装置使用10BaseT /100BaseT,因为10Base2无法升级为100Base之类的网络 。10Base2对于因为某种原因不想购买HUB的爱好者建立室内网络而言是足够的。 参考 [13]电缆、同轴电缆......以了解有关以太网线缆不同类型的情况。 2. 常见问题 这里是一些有关使用Linux进行以太网连接的常见问题。某些特定问题按照制造商 进行分类。可能你想问的问题别人已经问过(而且被回答了!),所以即使没有 在这里找到你的答案,还可能在诸如 [14]Dejanews之类的新闻档案中找到你所要 的。 2.1 该为Linux买什么网卡? 这个问题的答案很大程度取决于你希望用网络连接干些什么,以及会遇到多大的 数据流量。 如果你只想作为一个用户偶尔使用一下FTP或WWW,那么即使是8比特的老ISA网卡 都能满足你的需要。 如果你想建立一个服务器,并要求接收或发送网络数据给CPU带来的负载最小,那 么你可能需要看一下使用具有总线控制能力的芯片的PCI网卡,比如DEC tulip (21xxx)芯片,或者AMD PCnet-PCI芯片。 如果你的需求在这二者之间,那么使用有稳定的驱动程序的便宜的PCI网卡或16比 特的ISA网卡就可以了。 2.2 Alpha驱动程序——获取与使用 我听说我的网卡有一个更新的或初步的/alpha驱动程序。从哪儿得到它呢? 最新的“新”驱动程序可以在Donald的FTP站点:cesdis.gsfc.nasa.gov里面 的/pub/linux/下找到。因为事情变化很频繁,可能需要四处找一找。或者使 用WWW浏览器去: [15]Don's Linux Home Page 查找你想要的驱动程序更简单一些。(留神WWW浏览器会悄悄地把源码中的TABs替 换为空格,等等——如果无法确定的话,使用FTP下载,至少也得用WWW浏览器 的FTP URL。) 如果驱动程序确实是alpha版本,或pre-alpha版本,那么请恰当地对待它。换句 话说,不要抱怨,因为你无法弄清用它能做些什么。如果弄不清如何安装,最好 不要去试。同样,如果它使你的机器宕机了,不要抱怨。相反,你应该发给我们 一份材料组织很好的Bug报告,如果是一个补丁,那就更好! 注意,某些“可用”的实验性/alpha驱动程序已经包含在标准的内核源码树中。 在运行make config时你首先要回答的一个问题就是“Prompt for development and/or incomplete code/drivers”。在此你要回答“Y”以包括任何alpha/实验 性驱动程序。 2.3 一台机器使用多个以太网卡 做些什么才能让Linux运行两块以太网卡? 这个问题的答案取决于驱动程序是否被用做可载入的模块或者直接编译进了内核 。大多数Linux发行版本现在都使用模块化的驱动程序。这样就不用发行许多内核 ,每种内核设置一个不同的内建驱动程序。使用一个单一的基本内核,如果特定 用户系统需要,一旦系统启动,就可以从驱动程序模块文件(通常存放 在/lib/modules/)中载入个别的驱动程序。 把驱动程序作为模块使用:对于PCI驱动程序,模块通常会自动检测该品牌类型所 有安装的网卡。但对于ISA网卡,探寻一个网卡是不安全的操作,因此你需要提供 网卡的I/O地址以便模块知道去哪里查找。这一信息存储在文 件/etc/conf.modules中。 例如,如果一个用户有两块ISA NE2000网卡,一块在0x300,一块在0x240,它们 在/etc/conf.modules文件中显示如下: alias eth0 ne alias eth1 ne options ne io=0x240,0x300 这几行的意义:就是说如果管理员(或内核)进行modprobe eth0或者modprobe eth1,那么为eth0或者eth1载入ne.o驱动程序。此外,在载入ne.o模块时,使用 选项io=0x240,0x300,这样驱动程序就知道去哪里寻找网卡。注意0x很重要— —DOS里常用的300h在这里没有用。改变0x240和0x300的顺序会使哪一块物理网卡 以eth0和eth1结尾发生改变。 同这个例子一样,大多数ISA模块驱动程序可以接受多个以逗号分隔的I/O值以处 理多块网卡。但是,某些(老的?)驱动程序,比如3c501.o模块,目前载入一个 模块只能处理一块网卡。这样,要检测两块网卡就必须载入两次该模块。此时, 文件/etc/conf.modules将如下所示: alias eth0 3c501 alias eth1 3c501 options eth0 -o 3c501-0 io=0x280 irq=5 options eth1 -o 3c501-1 io=0x300 irq=7 在此例中,选项-o用来给每个模块实例一个唯一的名字,因为不能用同一个名字 载入两个模块。选项irq=也是用来指定网卡设置的硬件IRQ。(此方法也能用于可 接受多个以逗号分隔的I/O值的模块,但这样会使模块被不必要地载入两次,降低 了效率。) 最后一个例子,假设用户有一块在0x350的3c503网卡和一块在0x280的SMC Elite16 (wd8013)网卡。则应该这样: alias eth0 wd alias eth1 3c503 options wd io=0x280 options 3c503 io=0x350 对于PCI网卡,只要用alias语句把ethN接口和相应的驱动程序名联系起来就行了 ,因为PCI网卡的I/O地址可以被安全地检测到。 可用的模块一般存放在/lib/modules/`uname -r`/net下,这里uname -r命令可以 得到内核的版本(比如2.0.34)。你可以在这里看看哪一个驱动程序适合你的网 卡。一旦你在conf.modules文件里进行了正确的设置,就可以用下面的方法检查 一下: modprobe ethN dmesg | tail 这里“N”是你要检测的以太网卡的接口号。 使用编译进内核的驱动程序:如果你需要的驱动程序编译进了内核,那么处理多 块以太网卡的接口已经存在了。但缺省情况下只自动检测一块以太网卡。这样就 避免了启动时检测敏感网卡可能引起的麻烦。 (注意:在2.1.x之后的内核中,启动检测被分为安全和不安全的两类,所有安全 的检测(如对PCI和EISA网卡)可以自动找到所有相关的网卡。在至少有一块ISA 网卡的多网卡系统中还需要进行以下的处理。) 有两种方法可以启动对第二块(或第三块等等)网卡的自动检测。最简单的方法 是向内核传递启动参数,由LILO完成。使用ether=0,0,eth1这样简单的启动参数 就可以完成对第二块网卡的检测。此时按照启动时找到的网卡顺序分配eth0 和eth1。假如你想让0x300处的网卡为eth0,而0x280处的网卡为eth1,那么可以 使用 LILO: linux ether=5,0x300,eth0 ether=15,0x280,eth1 命令ether=可以接受的参数并不仅限于如上所示的IRQ + I/O + name。请参看 [16]传递以太网参数......以了解全部的句法、网卡特定参数和LILO使用技巧。 这些启动参数可以固定,这样就不用每次都必须重新敲一遍。参看LILO手册中有 关LILO的配置选项“append”。 第二种方法(不建议使用)是编辑文件Space.c并用零替换I/O地址中的0xffe0入 口。0xffe0入口是用来告诉内核不要检测该设备——把它替换为零就启动了对该 设备的自动检测。 2.4 这个以太东东不干活。为什么? 如上所述,ether=命令只对编译进了内核的驱动程序起作用。现在大多数的发行 版本都用模块的方式使用驱动程序,所以很少再使用ether=命令了。(某些早期 文档需要更新以反映这一变化。)如果你想使用模块化的以太网驱动程序的选项 ,必须修改/etc/conf.modules文件。 如果你是使用编译的驱动程序,而且已经把ether=加进了LILO配置文件,需要重 新运行lilo使更新后的配置文件生效。 2.5 NE1000/NE2000网卡(及其兼容卡)的问题 问题: 在用v2.0.x启动时没有检测到PCI NE2000兼容网卡。 原因: 在v2.0.30之前的ne.c驱动程序只知道基于RealTek 8029的兼容网卡 的PCI ID号。在此只后才出现了使用其它PCI ID号的PCI NE2000兼容网卡,所以 驱动程序无法检测这些网卡。 解决方案: 最简单的方法是把Linux内核升级到v2.0.31以上版本。它可以识别五 种不同的NE2000-PCI芯片的ID号,在启动或载入模块时自动检测到它们。如果你 升级到了2.0.34以上版本,会有一个比原先的ISA/PCI驱动程序稍小但更高效 的PCI专用NE2000驱动程序。 问题: 启动时PCI NE2000兼容网卡被报告为ne1000(8比特网卡!)或者 在v2.0.x下载入ne.o模块不起作用。 原因: 某些PCI兼容网卡不支持字节存取(因此不是百分之百兼容的NE2000)。 这使它在检测时被误认为NE1000网卡。 解决方案: 你需要升级到v2.0.31以上版本。现在的驱动程序会检测到这种硬 件Bug。 问题: PCI NE2000网卡的性能很差,即使按照性能技巧章节所说的减小了窗口大 小。 原因: 十多年前设计和出售的初始8390芯片的技术数据手册上提到,为了得到最 高的可靠性,在每次写操作之前需要一个读操作。驱动程序能够轻易地做到这一 点,但从v1.2内核时代起,缺省情况下取消了这一操作。有一个用户报告说重新 启用这一“错误的特性”就可以改善廉价的PCI NE2000兼容网卡的性能。 解决方案: 由于只有一个用户提出报告把它作为解决方案,不要对此寄予太大的 希望。重新使用写之前的读操作可以简单地编辑linux/drivers/net/下的驱动程 序文件,取消包含NE_RW_BUGFIX的那一行的注释,然后重建内核或载入相应的模 块。如果这样确实有效,请给我发一封e-mail,描述性能上的差异和你所使用的 网卡/芯片类型。(对ne2k-pci.c驱动程序也可以如法炮制。) 问题: ne2k-pci.c驱动程序对PCI NE2000网卡报告诸如timeout waiting for Tx RDC错误信息,无法正常工作。 原因: 你的网卡或网卡到PCI总线的连接无法处理该驱动程序使用的长字I/O优化 。 解决方案: 首先,检查BIOS/CMOS设置,看看与PCI总线相关的计时对于可靠的操 作是否过于严格了。否则,使用ISA/PCI的ne.c驱动程序(或者删除ne2k-pci.c中 的#define USE_LONGIO),使你的网卡可用。 问题: 没检测到ISA的即插即用NE2000网卡(如RealTek 8019)。 原因: 初始的NE2000特性不支持即插即用,因此Linux的NE2000驱动程序也不支 持即插即用。 解决方案: 使用网卡所附的DOS配置盘取消PnP,并为该网卡设置一个指定的I/O 地址和IRQ。在/etc/conf.modules里增加这样的一行options ne io=0xNNN,其 中0xNNN是你为网卡设置的16进制I/O地址。(假设你使用的是模块化驱动程序; 否则,在启动时使用一个ether=0,0xNNN,eth0参数)。你也可以进入BIOS/CMOS设 置,把IRQ从PnP改为Legacy-ISA。如果你需要为兼容其它的操作系统而保留PnP设 置,那么你可以看一下isapnptools软件包。使用man isapnp看看它是否已经安装 在你的系统上了。如果没有,浏览一下下面的连接: [17]ISA PNP Tools 问题: 在启动检测时NE*000驱动程序报告“not found (no reset ack)”。 原因: 这跟上面所说的改动有关。在证实8390处于所检测的I/O地址之后,进行 重新设置。在网卡完成重新设置后,应当通知重新设置完成。你的网卡没有通知 ,所以驱动程序认为不存在NE网卡。 解决方案: 你可以在启动时使用一个未被使用的mem_end的16进制值0xbad,告诉 驱动程序你有一个坏网卡。在使用0xbad覆盖时你必须为网卡提供一个非零的I/O 地址。例如,在0x340的网卡不响应重新设置时,则使用如下方法: LILO: linux ether=0,0x340,0,0xbad,eth0 这样,即使你的网卡不响应重新设置,网卡检测还能继续下去。如果你是以模块 方式使用驱动程序,那么可以象提供I/O地址一样提供选项bad=0xbad。 问题: NE*000网卡使机器在第一次网络访问时死机。 原因: 这个问题从早期的1.1.57内核到现在都出现过,而且只在有限的几种软件 配置的兼容网卡上出现。看来是需要用某些特殊的方法来初始化它们。 解决方案: 有几个人报告在热启动(即loadlin或Ctrl-Alt-Del)Linux之前,运 行提供的DOS软件配置程序或提供的DOS驱动程序可以使网卡工作。这表明这些卡 需要以某种特殊的方式初始化,与当前的Linux驱动程序稍有区别。 问题: 在0x360的NE*000以太网卡没有检测到。 原因: 你的NE2000网卡在I/O空间占据了0x20个字节,使它与0x378处的并口发生 冲突。其它可能的设备是0x370处的第二个软盘控制器(如果有的话),以 及0x376--0x377处的第二个IDE控制器。如果该口已被其它驱动程序注册,内核将 不再进行检测。 解决方案: 或者把你的网卡移到0x280, 0x340, 0x320一类的地址,或者在编译 时不支持并行打印机。 问题: 每次打印时网络都断开(NE2000)。 原因: 与上一个问题相同,但你的内核比较老,不支持对重叠I/O区域的检查。 使用如上的解决方案,有空时获取一个新的内核。 问题: 没检测到0xNNN: 00 00 C5 ... 处的NE*000以太网卡。(非法标识yy zz ) 原因: 首先,你是否在地址0xNNN处有一个NE1000或NE2000网卡?如果有,报告 的硬件地址是否象一个合法地址?如果是的话,那么你的NE*000兼容网卡很差劲 。所有的NE*000兼容网卡都假定网卡上的SA PROM的第14和15字节为0x57。而你的 网卡不是这样——它的值为“yy zz”。 解决方案: 有两种解决方法。最简单的方法就是如上所述的“no reset ack”解 决方案,使用一个0xbad的mem_end值。这样在提供一个非零的I/O地址时就可以忽 略标识检查。此方法无需重新编译内核。 第二种方法(对黑客)需要修改驱动程序,并重新编译内核(或模块)。在驱动 程序(/usr/src/linux/drivers/net/ne.c)的42行有一个“Hall of Shame”列 表。这个表是用来检测那些差劲的兼容网卡的。例如,DFI网卡在PROM的前三个字 节使用“DFI”,而不是象要求的那样在第14和15字节使用0x57。 问题: 机器在启动时出现“8390...”或“WD....”信息后死机。拔掉NE2000就 好了。 原因: 你的NE2000兼容网卡兼容性不好。一个激活的NE2000是个无底洞,会使其 它的驱动程序陷在其空间内进行自动检测。把NE2000改到一个不常用的地址就可 以从其它的自动检测中消除这一陷阱,机器也就可以启动了。 解决方案: 把你的NE2000地址改为0x340一类的地址。此外,你可以在和 “ether=”参数一起使用“reserve=”启动参数,保护网卡不受其它设备驱动程 序检测的影响。 问题: 机器启动时在进行SCSI检测时死机。 原因: 这个问题跟上面的一样,改变以太网卡的地址,或使用reserve/ether启 动参数。 问题: 机器启动时在进行声卡检测时死机。 原因: 不对,实际上是发生在静默方式的SCSI检测过程中,与上面的问题一样。 问题: 启动时检测不到NE2000 -- 根本就没有启动信息。 解决方案: 因为造成检测不到的原因很多,所以没有“神奇的解决方案”。下面 列出了可能有所帮助的一些措施。 1) 构建一个只包含需要的设备驱动程序的内核。证实你确实是从新内核启动的。 忘记运行lilo等会使你从老的内核启动。(仔细观察启动时报告的构建时间/日期 。)听起来很明显,但我们以前都犯过这个错。通过检查System.map文件 里ne_probe一类的名称,确定驱动程序已包含在新的内核里。 2) 仔细观察启动信息。看看它是否提及正在进行诸如“NE*000 probe at 0xNNN: not found (blah blah)”一类的ne2k检测,或者就是静悄悄地失败了。 这里的区别很大。使用dmesg|more在登录后浏览启动信息,或者在启动完成显示 登录提示符时使用Shift-PgUp卷回屏幕。 3) 启动后,执行cat /proc/ioports,证实网卡要求的全部I/O空间是空的。如果 网卡在0x300,那么ne2k驱动程序要求的空间为0x300-0x31f。如果其它设备的驱 动程序注册了其中的一个口,就不会对该地址进行检测,而是静悄悄地检测下一 个要检测的地址。常见的情况是lp驱动程序保留了 _________________________________________________________________ 0x378 _________________________________________________________________ ,或者第二个IDE通道保留了0x376,这就使ne驱动程序停止检测0x360-0x380。 4) 与上面一样执行cat /proc/interrupts。确定没有其它设备注册了你为以太网 卡设置的中断。这种情况下,检测可以进行,以太网卡驱动程序会在启动时大声 抱怨无法得到所要求的IRQ中断线。 5) 如果你还为驱动程序静悄悄地失败而苦恼,那么编辑并给检测增加一 些printk()。比如,对于ne2k,你可以在linux/drivers/net/ne.c中增加/删除某 些行(用“+”或“-”表示),如下所示: _________________________________________________________________ int reg0 = inb_p(ioaddr); + printk("NE2k probe - now checking %x\n",ioaddr); - if (reg0 == 0xFF) + if (reg0 == 0xFF) { + printk("NE2k probe - got 0xFF (vacant I/O port)\n"); return ENODEV; + } _________________________________________________________________ 那么它就会输出检查的每一个口地址信息,你可以看到你的网卡地址是否被检测 了。 6) 你还可以从Don的ftp站点(在howto中也提及了)获取ne2k的诊断程序,看看 你在启动进入Linux后能否用它检测你的网卡。使用“-p 0xNNN”选项告诉它在哪 里寻找你的网卡。(缺省情况下只检测0x300,与启动时的探测不同,不会检测其 它的地址。)在找到网卡时的输出如下: _________________________________________________________________ Checking the ethercard at 0x300. Register 0x0d (0x30d) is 00 Passed initial NE2000 probe, value 00. 8390 registers: 0a 00 00 00 63 00 00 00 01 00 30 01 00 00 00 00 SA PROM 0: 00 00 00 00 c0 c0 b0 b0 05 05 65 65 05 05 20 20 SA PROM 0x10: 00 00 07 07 0d 0d 01 01 14 14 02 02 57 57 57 57 NE2000 found at 0x300, using start page 0x40 and end page 0x80. _________________________________________________________________ 你的注册值和PROM值可能会不一样。注意,对16比特网卡,所有PROM值都增加一 倍,以太网卡地址(00:00:c0:b0:05:65)出现在第一行,加倍后的0x57标识出现 在PROM的结尾。 在0x300处没有安装网卡时的输出如下: _________________________________________________________________ Checking the ethercard at 0x300. Register 0x0d (0x30d) is ff Failed initial NE2000 probe, value ff. 8390 registers: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff SA PROM 0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff SA PROM 0x10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff Invalid signature found, wordlength 2. _________________________________________________________________ 出现值0xff的原因是在读取空I/O口时返回的就是该值。如果在检测的区域内有其 它硬件,你可以看到一些非0xff的值。 7) 尝试在运行提供的DOS驱动程序或配置程序之后,从DOS启动软盘(通 过loadlin)热启动进入Linux。这可能会进行一些额外的(即非标准的)“魔法 ”来初始化网卡。 8) 试一下Russ Nelson的ne2000.com包驱动程序,看它能否看见你的网卡——如 果还不行,事情就不大妙了。例如: A:> ne2000 0x60 10 0x300 所用参数为软件中断向量、硬件IRQ和I/O地址。你可以从任意的msdos档案文件中 的pktdrv11.zip里找到它——现在的版本大概是11以上了。 2.6 SMC Ultra/EtherEZ和WD80*3网卡的问题 问题: 你得到了如下信息: eth0: bogus packet size: 65531, status=0xff, nxpg=0xff 原因: 是共享内存的问题。 解决方案: 最普遍的原因是配置的PCI机器没有映射到ISA内存设备里。因此你读 到的是PC的RAM(全都是0xff值),而不是存放接收数据包数据的网卡上的RAM。 另一个容易解决的典型问题是板卡冲突,在此区域有缓存或“shadow ROM”,或 者你的ISA总线运行速度高于8Mhz。以太网卡上的内存失效的数目也令人惊奇,所 以如果你的以太网卡有诊断程序的话,运行一下。 问题: SMC EtherEZ在非共享内存(PIO)模式下不工作。 原因: 老版本的Ultra驱动程序只支持共享内存模式下的操作。 解决方案: 版本2.0以上的内核所附驱动程序就支持可编程I/O模式的操作。升级 到v2.0以上版本。 问题: 老的wd8003或可跳线的wd8013总是得到错误的IRQ。 原因: 老的wd8003网卡或可跳线的wd8013兼容卡没有驱动程序可以从中读取设置 的IRQ的EEPROM。如果驱动程序无法读到IRQ,就尝试用auto-IRQ发现它。 若auto-IRQ返回0,那么驱动程序就给8比特网卡分配IRQ 5,或者为16比特网卡分 配IRQ 16。 解决方案: 使auto-IRQ代码无效,并在你的模块配置文件(对于内建的驱动程序 则通过启动参数)告诉内核你把网卡跳成了什么IRQ。 问题: SMC Ultra网卡被检测成了wd8013,但IRQ和共享内存地址是错的。 原因: Ultra网卡看起来跟wd8013很相象,如果内核里没有Ultra驱动程序,wd驱 动程序就会把ultra误认为wd8013。ultra检测在wd之前,所以一般不会出问题 。ultra在EEPROM保存的IRQ和内存地址与wd8013保存的位置不同,所以报告的值 是假的。 解决方案: 只保留需要的驱动程序重新编译内核。如果你在同一台机器上同时使 用wd和ultra网卡,并使用模块,那么首先载入ultra模块就行了。 2.7 3Com网卡的问题 问题: 3c503选择了IRQ N,但其它设备也需要IRQ N。(比如CD ROM驱动程序 、modem等。)可以不编译进内核就解决这个问题吗? 解决方案: 3c503驱动程序按照顺序{5, 9/2, 3, 4}检测空闲的IRQ线,从中找到 一个未被使用的IRQ。在网卡被ifconfig操作配置时选择中断IRQ。 如果你使用的是模块化的驱动程序,可以用模块参数设置各种情况,包括中 断IRQ的值。 下面的语句选择IRQ9、基址0x300、和if_port #1(外部收发器 )。 io=0x300 irq=9 xcvr=1 另外,如果驱动程序被编译进了内核,你还可以通过LILO在启动时传递参数来设 置同样的值。 LILO: linux ether=9,0x300,0,1,eth0 下面的语句选择IRQ3、检测基址、和缺省if_port #0(外部收发 器)。 LILO: linux ether=3,0,0,0,eth0 问题: 3c503: configured interrupt X invalid, will use autoIRQ. 原因: 3c503网卡只能使用中断IRQ{5, 2/9, 3, 4}中的一个(这些是网卡所能连 接的中断线。)如果你使用一个不在其中的IRQ值,就会得到如上的提示。一般情 况下,没必要为3c503指定中断值。3c503会在ifconfig配置时使用autoIRQ,并 从IRQ{5, 2/9, 3, 4}中选择一个。 解决方案: 使用上述的合法IRQ值,或者不指定IRQ以启用autoIRQ。 问题: 提供的3c503驱动程序无法使用AUI(粗缆以太网)端口。怎样才能不使用 缺省的细缆以太网端口而选择AUI端口? 解决方案: 3c503的AUI端口对于内建驱动程序可以在启动时选择,对于模块化驱 动程序可以在插入模块时选择。这一选择会覆盖未使用的dev->rmem_start变量的 低比特位,所以启动参数: LILO: linux ether=0,0,0,1,eth0 可以对内建在内核的驱动程序起作用。 要在载入模块时指定AUI端口,只需把xcvr=1附加在模块选项包含你的I/O和IRQ值 的那一行就行了。 2.8 非特定网卡的FAQ。 Linux与ISA的即插即用以太网卡。 要获得最佳效果(问题最少),推荐使用随网卡附的程序(通常是DOS程序)取 消PnP机制,并给网卡设置一个固定的I/O地址和IRQ。确定使用的I/O地址在启动 时被驱动程序检测到,如果使用模块,则在/etc/conf.modules中使用io=选项提 供地址。也可以进入BIOS/CMOS设置,把IRQ从PnP改为Legacy-ISA(如果计算机有 此选项的话)。 注意,运行基于DOS的配置程序一般并不需要安装DOS。可以用DOS软盘启动,然后 从提供的软盘上运行它们就可以了。同样可以自由地下载OpenDOS和FreeDOS。 如果需要使用PnP以与其它操作系统兼容,就得每次启动时都使用Linux 的isapnptools包配置网卡。还需要确定为网卡选择的I/O地址被驱动程序检测到 ,或用io=选项提供I/O地址。 有些系统在BIOS/CMOS设置菜单中有“enable PnP OS”(或类似的名称)选项, 几乎在所有情况下或网卡无法正常工作甚至检测不到的情况下都需要禁用此选项 。一个用户对此描述得很好“我不知道它在屏幕后干了些什么,但看起来是在捣 乱。” 启动时没有检测到以太网卡。 出现这个问题的常见原因是人们使用的内核不支持特定的网卡。对于模块化的内 核,这一般说明要求的模块尚未被载入,或者需要用模块选项指定其I/O地址。 如果使用的是模块化的内核,就象大多数用Linux发行版安装的那样,试著用一下 该发行版的配置工具来选择网卡所用模块。对于ISA网卡一个较好的主意是,确定 网卡的I/O地址,如果配置工具要求选项则把它作为一个选项(如io=0x340)加进 去。如果没有配置工具,那么需要在/etc/conf.modules里添加正确的模块名称( 及选项)——阅读man modprobe以了解更多的细节。 如果使用的是发行版套件里的预编译内核,那么需要查看文档以确定安装的是哪 一种内核,以及是否支持所用的网卡。如果不支持的话,要么试著找一个支持所 用网卡的内核,要么自己生成一个内核。 只保留所需的驱动程序生成自己的内核是个聪明的主意,因为这会减小内核大小 (为应用程序保留宝贵的RAM!),减少打扰敏感硬件的设备检测数目。生成内核 并不象听起来那么复杂。你只需要对一些有关想要哪些驱动程序的问题回答是或 不是,其它的事都由程序完成。 另一个主要原因是其它的设备占用了网卡所需的部分I/O空间。大多数网卡在I/O 空间里占用了16或32个字节。如果你的网卡设在0x300并需要32个字节,那么驱动 程序就要求0x300-0x31f。如果某个其它设备驱动程序注册了哪怕其中一个端口, 驱动程序就不会对该地址进行检测,而是静悄悄地进入下一个检测地址。所以, 在启动之后,运行一下cat /proc/ioports以确定网卡要求的全部I/O空间都是空 的。 还有一个问题就是网卡跳到的I/O地址不是缺省检测的地址。每个驱动程序的检测 地址列表可以很容易地在驱动程序源码中的文本注释里找到。即使网卡设定 的I/O地址不在检测地址列表上,你也可以在启动时用ether=命令提供(对内建驱 动程序),参见 [18]传递以太网参数...。模块化的驱动程序可以 在/etc/conf.modules里使用io=选项指定一个非缺省检测的地址。 ifconfig报告了错误的网卡I/O地址。 这不可能。你只是理解错误。这不是一个Bug,而且报告的数字是正确的。这只出 现在某些基于8390的网卡上(如wd80x3、smc-ultra等),实际的8390芯片位于第 一个给定I/O端口加上一个偏移量处。此偏移量保存在dev->base_addr里,也就 是ifconfig报告的值。如果你想看到网卡使用的全部端口,试一下cat /proc/ioports以得到想要的数字。 PCI机器探测到了网卡,但驱动程序检测失败。 某些PCI的BIOS在上电时没有启用所有的PCI卡,特别是在使用了“PNP OS” 的BIOS选项情况下。这一特性是为了支持当前依然使用某些实模式驱动程序 的Windows版本。或者禁用该选项,或者升级到一个可以启用被禁用网卡的新驱动 程序。 PCI机器里的共享内存ISA网卡不工作(0xffff) 这常表现为显示读出大量0xffff值。除非你正确地设置了PCI ROM BIOS/CMOS SETUP配置,任何类型的共享内存网卡都不会在PCI机器上工作。你必须把网卡所 用内存区域设置为可以从ISA总线访问共享内存。如果你不知道哪些设置有用,那 么询问你的供应商或者当地的计算机大拿。对于AMI BIOS,在“Plug and Play” 部分有一个“ISA Shared Memory Size”和“ISA Shared Memory Base”的设置 。对于类似wd8013和SMC Ultra的网卡,把共享内存的大小从缺省的禁用改 为16kB,并把基址改为网卡的共享内存地址。 网卡看来在发送数据,但没有收到过数据。 执行cat /proc/interrupts。这样产生的列表会显示网卡产生的所有中断事件的 实时数目。如果为0或在试图使用网卡时没有增加,那么可能是与计算机安装的其 它设备发生物理中断冲突(无论其它的设备是否安装/提供了驱动程序)。把其中 一个设备的IRQ改成未使用的IRQ。 异步传输模式(ATM)支持 Werner Almesberger在进行Linux的ATM的支持工作。他使用的是Efficient Networks的ENI155p板( [19]Efficient Networks)和Zeitnet的ZN1221板( [20]Zeitnet)。 Werner说ENI155p的驱动程序已经很稳定了,而ZN1221的驱动程序目前还没有完成 。 去下面的连接查看一下最新的进展: [21]Linux ATM Support 吉比特以太网支持 Linux支持吉比特以太网吗? 是的,目前至少已经有了两个驱动程序。在v2.0和v2.2内核里有一个Packet Engines G-NIC PCI吉比特以太网适配器的驱动程序。驱动程序的更多细节、支持 和更新可访问: http://www.scyld.com/linux/drivers/yellowfin.html v2.2内核提供的acenic.c驱动程序可用于Alteon的AceNIC吉比特以太网卡和其它 如3Com的3c985一类的基于Tigon的网卡。这个驱动程序还可以用于NetGear 的GA620,但还需要证实。 FDDI支持 Linux支持FDDI吗? 是的。Larry Stefani为v2.0编写了Digital的DEFEA(FDDI EISA)和DEFPA (FDDI PCI)网卡驱动程序。它被包含进v2.0.24内核。目前还没有其它的网卡被 支持。 全双工支持 全双工能达到20MBps吗?Linux支持吗? Cameron Spitzer对全双工10Base-T网卡有如下论断:“如果你连在全双工交 换HUB上,你的系统足够快而且不做太多其它的工作,它会使你的网络在两个方向 上都保持忙碌。不存在什么全双工的10BASE-2或10BASE-5(细缆和粗缆)。全双 工是通过取消适配器的碰撞检测来达到的。这就是为什么用同轴电缆实现不了全 双工;LAN无法以全双工方式运转。10BASE-T(RJ45接口)使用不同的线进行发送 和接收,所以二者可能同时进行。交换HUB处理碰撞问题。信号速率是10Mbps。” 所以,你只能以10Mbps速率接收或发送数据,无法期望得到两倍的性能提高。对 于是否支持,取决于网卡和可能的驱动程序。有些网卡可以自动协商,有些需要 驱动程序支持,还有的需要用户在网卡的EEPROM配置中设置选项。只有那些认真 的用户会注意到全双工与半双工模式间的差别。 SMP机器上的Linux以太网卡 如果有钱买多处理器(MP)的计算机,那么最好买一个好点儿的以太网卡。 对v2.0内核这还不是个问题,但对v2.2就成问题了。大多数老式的非智能( 如ISA总线的PIO和共享内存设计)网卡在设计时根本没考虑多处理器应用。简单 地说就是买一个现代设计的智能网卡,并确定有能够处理多处理器操作的驱动程 序。(注意这里的“现代设计” - PCI-NE2000就是在现代总线上有10多年历史的 老式设计。)在驱动程序的源码里查找spin_lock可以很好地说明该驱动程序是否 能够处理多处理器操作。下面详细解释了为何要为多处理器应用购买好的网卡( 以及不买会出现什么问题)。 在v2.0内核,在任意时刻只有一个处理器允许进入“内核态”(即改变内核数据 或运行设备驱动程序)。所以从网卡(及相关驱动程序)的角度来看,这与单处 理器操作没有什么不同,所以不会出问题。(这也是得到一个可以工作的Linux多 处理器版本的最简单的办法——使用一个大锁使得一次只有一个处理器处于内核 状态。这样你就知道不可能有两个处理器同时要修改同一数据!) 在任意时刻只有一个处理器允许进入内核态的不利之处在于只有运行自我控制和 密集计算的程序时才会获得多处理器的优越性。如果程序进行了大量诸如向磁盘 或网络读/写数据的I/O操作,在处于内核的那个处理器努力运行所有的设备驱动 程序以满足I/O请求的同时,其它的处理器都必须等待自己的I/O请求被处理完成 。这样内核就成为了瓶颈,由于只有一个处理器运行在内核态,多处理器机器的 性能在I/O任务重、单锁的情况下迅速降级到接近单处理器的水平。 很明显这与理想情况相差太远(尤其是对于文件/WWW服务器、路由器等),v2.2 的内核就使用了粒度更小的锁——也就是说同时可以有多个处理器进入内核。不 再是对整个内核使用一个大锁,而是使用许多较小的锁保护关键数据,防止同时 被多个处理器控制——例如,一个处理器可以运行网卡驱动程序,同时另一个处 理器可以运行磁盘驱动器的驱动程序。 好的,这样就有问题了:更小的锁定就意味著可以有一个处理器试图通过以太网 驱动程序发送数据,同时另一个处理器试图访问同一个驱动程序/网卡来做别的事 情(比如通过cat /proc/net/dev得到网卡统计数据)。哎呦——你的网卡正在通 过网线发数据,你又要用它来收数据。网卡被同时要求做两件事(或更多),会 弄糊涂的,所以有可能在处理过程中网卡使你的机器死机。 因此,为单处理器写的驱动程序不再适用——它需要更新控制对网卡访问的锁, 使得网卡的接收、发送和操作配置数据这三种任务以网卡稳定操作所要求的程度 串行化起来。没有更新为使用稳定多处理器操作的锁的驱动程序在轻的网络负载 下可能看起来会正常工作,但在两个(或更多)处理器试图同时进行多个任务时 就会造成死机,或至少表现出奇怪的行为,这就是问题。 更新后的意识到多处理器的以太网驱动程序将要求一个驱动程序范围的锁,使得 内核进入驱动程序的访问入口被限制为一次一个。这样,任务就被串行化,而对 硬件的处理就如同在单处理器下一样,也就一定应当稳定。使用驱动程序范围的 锁的不利之处在于它类似于对整个内核加锁(但规模较小)对性能的影响——也 就是说,一次只可以有一个处理器处理网卡。 [技术提示:如果增加的锁 是irqsave类型的而且被持有较长时间,对性能的影响还包括增加了中断延迟。] 这里可以进行的改进有两处。可以尝试减少获得与释放锁之间所用的时间,或者 在驱动程序内部实现更为细化的锁(比如满足网卡需求的前提下,把整个驱动程 序的锁替换为若干保护同时访问若干敏感寄存器或设置的锁)。 但是,对于老式的非智能网卡而言,在设计时根本就没有考虑过多处理器的应用 ,这样的改进可能无法实现。更糟的是非智能网卡一般要求处理器在网卡和内存 之间传送数据,所以在最坏的情况下,每当在ISA总线传送1.5kB数据包时,锁都 被一直保持著。 现代的智能网卡一般无需处理器的帮助就可以直接在网卡和内存之间传递网络数 据。这是个很大的改进,因为只需要在处理器通知网卡使用哪一块内存保存下一 个网络数据包的那一小段时间持有锁。现代的网卡在设计时同样也不要求对整个 驱动程序使用一个大锁。 Alpha/AXP PCI板上的Linux以太网卡 对于v2.0,只有3c509、depca、de4x5、pcnet32和所有8390驱动程序(wd 、smc-ultra、ne、3c503等等)是编写成“结构无关”的,所以它们可以运行在 基于DEC的Alpha CPU系统上。其它一些从Donald的WWW主页上下载的更新过的PCI 驱动程序也可以工作,因为它们也是按照结构无关的思想编写的。 注意,使驱动程序与结构无关所需要进行的改动并不很复杂。只需要如下进行: ——把所有与jiffies有关的值都乘以HZ/100,得到Alpha使用的不同的HZ值。( 即timeout=2;变成timeout=2*HZ/100;) ——把所有I/O内存(从640k到1MB)的指针引用替换为相应的readb() writeb() readl() writel()调用,如下例所示。 _________________________________________________________________ - int *mem_base = (int *)dev->mem_start; - mem_base[0] = 0xba5eba5e; + unsigned long mem_base = dev->mem_start; + writel(0xba5eba5e, mem_base); _________________________________________________________________ ——把所有使用I/O内存作为源或目的地址的memcpy()调用替换为相应 的memcpy_fromio()或者memcpy_toio()调用。 以结构无关的方式处理内存访问的细节在近期的内核所附的文 件linux/Documentation/IO-mapping.txt中进行了说明。 SUN/Sparc硬件上的Linux以太网卡。 要得到最新的Sparc信息,可以访问以下URL: [22]Linux Sparc 注意,有些Sparc的以太网硬件从主机获得其MAC地址,因此可能会有多个接口具 有相同的MAC地址。如果想在同一个网络上使用多个接口,可以使用ifconfig 的hw选项以分配唯一的MAC地址。 把PCI驱动程序移植到Sparc平台上与上面提到的AXP平台相似。可能的差异出 在endian上,因为Sparc是big endian,而AXP和ix86是little endian。 其它硬件上的Linux以太网卡。 还有一些其它硬件平台可以运行Linux,比如Atari/Amiga(m68k)。就象Sparc一 样,最好是访问每个Linux支持的平台主页,以了解当前都支持哪些硬件。(欢迎 提供这样的站点连接——把它们发给我!) 不使用Hub连接10/100BaseT 可以不使用Hub连接基于10/100BaseT(RJ45)的系统吗? 如果不使用额外的设备或机械装置,可以很容易地连接两台这样的机器, 但不可 能再多。参阅 [23]双绞线 ——解释了如何做到这一点。而且你不可能简单地交 叉几根线或其它什么 就弄出一个Hub,不复制Hub也无法正确完成冲突信号。 SIOCSIFxxx: No such device 在启动时出现了一大堆“SIOCSIFxxx: No such device”信息,后面还有一条 “SIOCADDRT: Network is unreachable”,怎么回事? 你的以太网设备在启动/插入模块时没有被检测到,当ifconfig和route运行时, 它们没有可用的设备。使用dmesg | more来浏览启动信息,看看有没有检测以太 网卡的信息。 SIOCSFFLAGS: Try again 在运行“ifconfig”时出现“SIOCSFFLAGS: Try again”——怎么回事? 某些其它的设备使用了以太网卡想用的IRQ,所以以太网卡无法使用该IRQ。你不 必重新启动来解决这个问题,因为某些设备只是在需要时才获取IRQ,在完成后就 释放了。例如某些声卡、串口、软盘驱动器等。你可以键入cat /proc/interrupts来看看哪些中断正在 被使用。绝大多数Linux以太网卡驱动程 序只有在用“ifconfig”打开时才获取IRQ。如果你能让其它设备“放开”所需 的IRQ中断线,那么你就可以用ifconfig来“Try again”了。 使用“ifconfig”得到的连接为UNSPEC,而硬件地址是00:00:00:00:00:00 在不带参数运行ifconfig时,报告说连接为UNSPEC(而不是10Mbs以太网),而且 硬件地址都是零。 这是因为运行的“ifconfig”程序版本比内核的版本高。在与老版本的内核一起 运行时,新版本的ifconfig无法报告这些特性。你可以升级内核,或者“降级 ”ifconfig,或者干脆不理会这个错误。内核知道硬件地址,所以即使ifconfig 无法读出它也没有关系。 如果使用的ifconfig程序比使用的内核旧很多的话,也会出现一些奇怪的信息。 大量的RX和TX错误 在不带参数运行ifconfig时,报告大量的接收和发送数据包错误。但看起来工作 正常——怎么回事? 再看一遍。报告是说RX packets big number 停顿errors 0 停顿 dropped 0 停 顿 overrun 0。所以你看到的那个大数字是机器接收和发送的数据包总数。如果 还觉得不可思议,键入cat /proc/net/dev看看。 /dev/下的以太网卡入口 /dev/eth0像是个到/dev/xxx的连接。这样对吗? 与你听过的正好相反,/dev/*下的文件没被使用。你可以删除掉任何 /dev/wd0 、/dev/ne0以及类似的入口。 Linux与“trailers” 在“ifconfig”网卡时,需要禁止trailers吗? 不能禁止trailers,而且也没必要。“trailers”是避免在网络层复制数据的工 具。其想法是使用一个大小为“H”的固定大小的头,把可变大小的头信息放在包 的尾部,并把所有包定位在页开始之前的“H”字节。这只是个好想法,在实际中 工作得并不好。如果有人建议使用“-trailers”,那不过是找个替罪羊罢了。这 对解决问题没有任何意义,但如果问题真的自行解决了,那么他就可以吹嘘自己 的神奇本领了。 访问原始以太网设备 在Linux下怎样不通过TCP/IP之类的东西访问原始的以太网设备? _________________________________________________________________ int s=socket(AF_INET,SOCK_PACKET,htons(ETH_P_ALL)); _________________________________________________________________ 这样就可以得到一个接收所有协议类型的socket。对它执行recvfrom()调用,它 就会用sa_family里的设备类型和sa_data数组里的设备名来填充sockaddr。我不 知道是谁最早在Linux里使用SOCK_PACKET,但它确实是个非常好的东西。你也可 以通过sendto()调用发送原始数据包。当然,在这样做时你必须拥有root的权限 。 3. 性能小技巧 如果你的以太网吞吐量太小,或者想提高ftp传输的速度,可以使用这里的一些小 技巧。 程序ttcp.c是测试原始吞吐量大小的好实验。另一个普通的技巧是把一个大 于1MB的large_file驻留在发送机器的缓冲内存里,然后执行ftp> get large_file /dev/null。(至少要“get”两次,因为第一次是把文件驻留在发送 机器的缓冲内存中。)把文件驻留在缓冲内存的原因是你对测量里混进从磁盘存 取文件的速度不感兴趣。这也是把输入数据发送到/dev/null而不是磁盘上的原因 。 3.1 一般概念 即使一个8比特的网卡在接收背靠背的数据包时也没有问题。但在计算机无法迅速 地从网卡接收数据包为更多进来的数据包腾出空间时,困难就出现了。如果计算 机不能迅速地清除已经接收到的数据包占据的网卡内存,网卡就没有空间存放新 的数据包了。 在这种情况下,网卡或者丢弃新的数据包,或者把它放在以前接收的数据包位置 上。任何一个都会引起重新传送而严重地中断平滑的数据传输流,并使性能被严 重降低,其降级因子甚至可以达到5! 拥有更多板上内存的网卡可以“缓冲”更多的数据包,因此可以无需丢弃就处理 更大量的突发背靠背数据包。这也就意味著网卡不需要主机响应从缓存读取数据 包的延迟更小以避免丢弃数据包。 大多数8比特网卡有8kB缓存,而大多数16比特网卡有16kB缓存。大多数的Linux驱 动程序要保留3kB的缓存(作为两个Tx缓存),这样就只给8比特网卡剩下5kB作为 接收的空间。它只够存放三个完全大小(1500字节)的以太网数据包。 3.2 ISA网卡和ISA总线速度 在上面提到,如果从网卡移走数据包的速度足够快,即使Rx数据包缓冲内存的数 量小,丢弃/覆盖的情况也不会出现。设置数据包从网卡移到计算机内存的速率的 因子是连接这二者的数据通道的速度——即ISA总线的速度。(如果CPU是很慢 的386sx-16,它也会起一定的作用。) 推荐的ISA总线时钟为8MHz,但很多主板和周边设备可以运行在更高的频率上。一 般通过在CMOS设置里选择主板/CPU时钟频率因子,可以设置ISA总线的时钟频率。 有些ISA和PCI/ISA主板可能没有这一选项,那么就只能使用制造商的缺省值了。 例如,下面是在一台40MHz的486上,不同ISA总线速度下,8比特WD8003EP网卡 用TTCP程序测量得到的一些接收速度。 _________________________________________________________________ ISA总线速度(MHz) Rx TTCP (kB/s) ------------------- -------------- 6.7 740 13.4 970 20.0 1030 26.7 1075 _________________________________________________________________ 使用TCP/IP,对任何10Mb/s以太网卡都难以得到高于1075kB/s的结果。但是,不 要期望每一个系统都可以工作在快的ISA总线速度下。大多数系统在高于13MHz的 速度上无法正常工作。(同样,某些PCI系统的ISA总线速度固定在8MHz,所以用 户没有机会提高它。) 另外,对于快的传输速度,可以从较短的内存和I/O周期减少CPU占用量中获益。 (注意,设置在ISA总线上的硬盘和视频卡也会从提高的ISA总线速度中感受到性 能的提高。) 在实验超过8MHz的ISA总线速度之前,一定要备份你的数据,并在提高速度后彻底 测试所有的ISA周边设备是否工作正常。 3.3 设置TCP的Rx窗口 再说一遍,网卡的板上RAM小以及网卡与计算机内存间的数据通道相对较慢会引起 麻烦。TCP缺省的Rx窗口设置为32kB,也就是说与你在同一子网的一台较快的计算 机会一下子发给你32kB的数据,而不会停下来看看你是否正常地接收到了它们。 近期版本的route命令能够在运行过程中设置这个窗口的大小。一般它只用在需要 减小该窗口的局域网,因为在若干路由器或网关后面的计算机会得到足够的“缓 冲”而不造成问题。下例为一个可能的用法: _________________________________________________________________ route add ... window _________________________________________________________________ 其中的win_size是你希望使用的窗口大小(以字节计算)。一个运行在8MHz或更 低速度下的ISA总线上的8比特3c503网卡,可以在4kB大小的窗口下很好地工作。 太大的窗口会导致覆盖和丢弃数据包,并严重降低以太网的吞吐量。你可以 用cat /proc/net/dev检查操作状态,它会显示出现的丢弃或覆盖状况。 3.4 增强NFS性能 有些人发现在使用8kB(Sun的原始值)的NFS数据包大小时,在NFS客户端使用8比 特网卡得到的性能比预期的要差。 可能的原因在于8比特网卡与16比特网卡的板上缓存大小不同。最大的以太网数据 包大小为1500字节。这样8kB的NFS数据包就成为大约6个背靠背的最大大小的以太 网数据包。8比特网卡和16比特网卡在接收背靠背数据包时都没有问题。在机器无 法及时从网卡缓存移走数据包时就有问题了,缓存会溢出。8比特网卡每次传送时 要多占用一个ISA总线周期的事实也帮不上忙。如果用的是8比特网卡,你能做的 是把NFS传送大小设置为2kB(甚至1kB),或者试著提高ISA总线速度以加快清空 网卡上的缓存。我发现8MHz下(没有其它系统负载),一个旧的WD8003E网卡可以 跟得上2kB大小的NFS接收,但在4kB时,性能降低的因子为3。 另一方面,如果缺省的安装选项为1kB大小,而你的网卡至少为16比特的 ISA网卡 ,把其大小提高到4kB(甚至8kB)会使性能显著提高。 4. 有关销售商/制造厂家/型号的信息 下面按照销售商名称和产品标识的字母顺序列出了许多网卡。在每个产品ID旁都 标明了“支持”、“半支持”或“不支持”。 支持意味著该网卡的驱动程序存在,而且许多人在愉快地使用著此驱动程序,它 看起来相当可靠。 半支持意味著该网卡的驱动程序存在,但至少下面的描述中有一个是真实的 :(1) 驱动程序或硬件有Bug,会导致性能差、连接失败甚至死机。(2) 驱动程序 是新的或网卡不够普及,因此驱动程序得到的使用/测试机会很少,驱动程序的作 者收到很少的反馈信息。很明显(2)比(1)要好一些,在网卡/驱动程序的独立描述 中会指明它属于哪种情况。对这两种情况,在运行make config回答“Prompt for development and/or incomplete code/drivers?”时都应该回答“Y”。 不支持意味著该网卡目前还没有可使用的驱动程序。这可能是由于对很少见的硬 件缺乏兴趣,也可能是销售商还没有发布编写驱动程序所需的硬件资料。 注意,“支持”和“半支持”之间的区别是相当主观的,是基于新闻组和邮件列 表信息上得到的用户反馈进行区分的。(无论如何,一个人来测试每个版本内核 上所有网卡的所有驱动程序是不可能的!!!)所以你可能会发现一个被标为半 支持的网卡工作得很好(这样很不错),或者一个被标为支持的网卡给你带来无 穷的麻烦(这样就不够好)。 在这些状态后面,列出了Linux内核中给出的驱动程序名称。这也 是/etc/conf.modules模块配置文件里alias eth0 driver_name一行所使用的驱动 程序模块的名称。 4.1 3Com 如果你确定不了你的网卡是什么,但认为它是3Com网卡,你可以通过集成块编号 来识别它。3Com有一本资料“通过集成块编号识别适配器”(ref 24500002), 它应该能让你弄明白。参见 [24]3Com的技术信息以了解如何从3Com索取该资料。 注意,3Com还有个有各种好东西的WWW/FTP站点:ftp.3Com.com,你也许想去看看 。对于某些他们的网卡甚至还有Linux驱动程序,可能你想检验一下。据说他们的 驱动程序不太稳定,或者在SMP和非基于ix86的机器上不稳定,所以需要记住这一 点。 3c501 状态:半支持,驱动程序名称:3c501 这种过时的石器时代的8比特网卡用起来会很头疼的。象瘟疫一样躲开它吧。不要 买这种网卡,哪怕是开玩笑也不要买。它的性能很差劲,而且很容易坏掉。 对那些还不肯相信的人来说,3c501一次只能干一件事——在从其单包缓存移出一 个数据包时,它不能接收另一个包,在载入一个发送包时也不能接收一个包。对 于两台处理一个包并回答会花掉10毫秒的基于8088的计算机之间的网络而言,这 就不错了,但现代网络几乎每次事务都会发送背靠背数据包。 AutoIRQ可以工作,没使用DMA,自动检测只能查看0x280和0x300,诊断级别通过 第三个启动参数设置。 再说一遍,强烈反对使用3c501!更差的是在IP广播内核中,在侦听所有广播包时 你会进入暂停状态。阅读源码头部的注释以得到更多的细节。 EtherLink II, 3c503, 3c503/16 状态:支持,驱动程序名称:3c503 (+8390) 3c503没有“EEPROM setup”,所以在Linux下运行该网卡无需使用诊断/设置程序 。3c503的共享内存地址是用跳线设置的,与启动PROM地址共享。熟悉其它ISA网 卡的人可能会被弄糊涂,因为其它ISA网卡除非有启动PROM,都是让跳线设为“禁 止”的。 因为WD80x3的总线宽度一样,这些网卡的速度也应该一样,但实际上更慢一些。 这些共享内存的的以太网卡还有一种不使用8390工具的可编程I/O模式(它们的工 程师发现了太多的Bug!)。Linux的3c503驱动程序也可以工作在3c503的可编 程I/O模式,但不如共享内存模式可靠,而且更慢。同样,在更新驱动程序时可编 程I/O模式没有很好地测试。不要使用可编程I/O模式,除非要与MS-DOS兼容。 3c503的IRQ中断线用软件设置,在EEPROM中没有其痕迹。与MS-DOS驱动程序不同 ,Linux的驱动程序有autoIRQ的能力:它使用{5,2/9,3,4}中第一条可用IRQ中断 线,在每次运行ifconfig时进行选择。(老式的驱动程序版本在启动时选择IRQ。 )如果没有IRQ中断线可用,“ifconfig”里的ioctl()调用将返回EAGAIN。 某些使用503会遇到的常见问题在 [25]3Com网卡的问题中进行了讨论。 如果你想把该驱动程序作为一个可载入的模块,应该阅读 [26]把以太网驱动程序 作为模块使用以了解有关模块的信息。 注意,一些旧的无盘386工作站有一个板上的3c503(3Com制造,但用其它名称销 售,如“Bull”),但销售商ID不是3Com的ID,所以检测不出来。更多的资料可 以在Etherboot软件包里找到,要启动这些无盘工作站你一定得有这些东西。 Etherlink Plus 3c505 状态:半支持,驱动程序名称:3c505 这些网卡使用i82586芯片,但没有太多的有关这些网卡的资料。标准内核包含该 驱动程序,但它被归为alpha版本的驱动程序。参见 [27]Alpha驱动程序以了解 在Linux下使用alpha/测试版本以太网驱动程序的重要信息。 如果你要使用这样的网卡,还应该读一 下/usr/src/linux/drivers/net/README.3c505文件。它包含了你可以使用/禁止 的各种选项。 Etherlink-16 3c507 状态:半支持,驱动程序名称:3c507 该网卡使用了一块Intel芯片,其驱动程序的开发与Intel的Ether Express驱动程 序开发关系很密切。在标准的内核发行版本中包含了其驱动程序,但是是作为一 个alpha版本的驱动程序。参见 [28]Alpha驱动程序以了解在Linux下使用alpha/ 测试版本以太网驱动程序的重要信息。 Etherlink III, 3c509 / 3c509B 状态:支持,驱动程序名称:3c509 这种网卡相当便宜,而且对ISA的无总线控制的设计而言性能相当好。其缺点在于 原始的3c509要求很低的中断延迟。3c509B有一个较大的缓存,应该没有这个问题 。(见下文。)这些网卡使用PIO传输,与ne2000网卡相似,相对而言,wd8013一 类使用共享内存的网卡效率更高一些。 原始的3c509有一个小的包缓存(总共4kB,2kB Rx,2kB Tx),如果中断屏蔽的 时间过长,驱动程序就会丢弃数据包。要减轻这个问题,可以尝试在IDE磁盘传输 过程中不屏蔽中断(参见man hdparm),或者提高ISA总线速度使IDE传输结束得 早一些。 新型号的3c509B板上缓存为8kB,并且可以把Rx/Tx划分成4/4、5/3或6/2。这一设 置要用DOS配置工具来改变,并保存在EEPROM上。这会减轻上面提到原始3c509的 问题。 3c509B的用户可以使用提供的DOS工具来禁止即插即用支持,并把输出媒介设置为 要求的东西。目前的Linux驱动程序还不支持自动检测媒介设置,所以必须选 择10Base-T、10Base-2或AUI。注意,要完全禁止PnP,需要使用3C5X9CFG /PNP:DISABLE并重新冷启动以确保设置生效。 有些人询问DOS配置工具中出现的“Server or Workstation”和“Highest Modem Speed”设置。Donald写道:“这些只不过是给驱动程序的提示,而Linux 驱动程序不使用这些参数:它总是优化为高吞吐量,而非低延迟(‘Server’) 。低延迟对于老式的无窗口IPX吞吐量非常关键。为了减少延迟,3c509的MS-DOS 驱动程序对某些操作禁止中断,阻塞串口中断。因此需要‘modem speed’设置 。Linux驱动程序只对整个包进行操作,例如在数据包完全传到网卡后才开始发送 该数据包,从而避免了长时间禁止中断的需要。” 注意,ISA网卡检测使用的方法与大多数网卡不同。基本上是通过发送数据 到ID_PORT(从端口0x100到0x1ff,间隔为0x10)要求网卡响应。这一检测方法意 味著在多ISA的3c509配置中,某个特定网卡总是首先被检测,而硬件以太网地址 最低的网卡总是作为eth0。这其实没什么问题,但有些人想为特定的接口分配一 个6字节的硬件地址。如果有多块3c509网卡,最好不指定I/O端口(即使 用I/O=zero)使用ether=0,0,ethN命令,让自动检测来排列哪一块网卡作为第一 块网卡。使用非零的I/O值会使该命令无法检测所有的网卡,所以不要这样做。 如果这使你感到困扰,看一下Donald的最新驱动程序,你可以在未使用的内存地 址域中使用一个0x3c509值,使检测的顺序符合你的要求。 3c515 状态:支持,驱动程序名称:3c515 这是3Com的ISA 100Mbps产品,编码名为“CorkScrew”。v2.2内核里包含了 从Donald那儿得到的这些网卡的相对较新的驱动程序。要获得更新的资料,可以 访问Vortex的网页: [29]Vortex 3c523 状态:半支持,驱动程序名称:3c523 这个MCA总线的网卡使用i82586,Chris Beauregard修改了ni52驱动程序用于这些 网卡。在v2.2内核源码树里可以找到它的驱动程序。 更多的细节可以在MCA-Linux的网页上找到 http://glycerine.cetmm.uni.edu/mca/ 3c527 状态:不支持。 对,这是另一个MCA网卡,对它没兴趣。如果你坚持用MCA,最好用3c529。 3c529 状态:支持,驱动程序名称:3c509 这个网卡实际上使用与3c509相同的芯片组。实际上早在内核里加进对MCA的支持 之前,Donald就已经在3c509的驱动程序里放了些钩子函数,在探测完EISA网卡后 ,开始探测ISA网卡之前,检查MCA网卡。所需的MCA探测代码被包含在与v2.2内核 一起提供的驱动程序里。更多的细节可以在MCA-Linux网页上找到: http://glycerine.cetmm.uni.edu/mca/ 3c562 状态:支持,驱动程序名称:3c589(独立发行) 这个PCMCIA网卡是3c589B网卡与modem的组合。对于终端用户,modem与一个标准 的modem一样。唯一的麻烦是要使两个独立的Linux驱动程序共用一个中断。该卡 上有一些新的寄存器和一些支持共享中断的硬件。需要使用支持共享中断的v2.0 以上的内核版本。 再次感谢Cameron提供给David Hinds的样品和资料。请在David发行的PCMCIA软件 包里寻找支持。 参见 [30]PCMCIA支持以了解更多的有关PCMCIA芯片组、socket启用软件等信息。 3c575 状态:未知。 这个PCMCIA网卡的驱动程序正在开发中,但愿以后会包含在David的PCMCIA软件包 里。最好检查一下PCMCIA软件包以了解目前的状态。 3c579 状态:支持,驱动程序名称:3c509 EISA版本的509。目前的EISA版本还使用同样的16比特宽的芯片,而不是32比特的 接口,所以性能上的改善并不令人惊奇。确定网卡被配置为EISA寻址模式。阅读 上面的3c509一节以了解驱动程序的信息。 3c589 / 3c589B 状态:半支持,驱动程序名称:3c589 现在这种PCMCIA网卡已经被很多人使用了相当长时间。注意对它的支持(目前) 还不包括在缺省的内核源码树内。名称中“B”的含义与3c509的情况相同。 在Donald的ftp站点和David Hinds的PCMCIA软件包里都有可用的驱动程序。你还 需要一套支持PCMCIA控制器的芯片组。参见 [31]PCMCIA支持以了解更多的有 关PCMCIA芯片组、socket启用软件等信息。 3c590 / 3c595 状态:支持,驱动程序名称:3c59x 这些“Vortex”网卡是用在PCI总线机器上的,'590是10Mbps的产品,'595 是3Com的100Mbs产品。注意'595也可以象'590一样运行(即使用10Mbps模式)。 驱动程序包含在v2.0内核源码中,但还在不断升级。如果在使用v2.0内核里的驱 动程序时遇到问题,可以从下面的URL获取一个更新的驱动程序: [32]Vortex 注意,现在有两种不同的3c590网卡,较早的型号有32kB的板上内存,后来的型号 只有8kB的板上内存。可能你买一个新的3c59x还没有多久,它就正在被3c90x所取 代。如果你是买别人的二手货,想法弄到一个32kB的型号。3c595网卡有64kB板上 内存,因为无法只用8kB的RAM就能达到100Mbps! 感谢Cameron Spitzer和3Com的Terry Murphy给Donald提供网卡和资料, 使Donald能写出驱动程序来。 3c592 / 3c597 状态:支持,驱动程序名称:3c59x 这些是EISA版本的3c59x系列网卡。3c592/3c597(又名为Demon)可以使用上面讨 论的vortex驱动程序。 3c900 / 3c905 / 3c905B / 3c905C 状态:支持,驱动程序名称:3c59x 这些网卡(又名为“Boomerang”,或EtherLink III XL)是用来取 代3c590/3c595网卡的。 对Cyclone的“B”版本的支持最近才加进来。要在v2.0之前的内核使用该网卡, 必须从如下的Donald站点获取更新后的3c59x.c驱动程序: [33]Vortex-Page 3c985 状态:支持,驱动程序名称:acenic Jes Sorensen提供的驱动程序在v2.2内核里能找到。除了3Com的型号,它还支持 几种其它的吉比特网卡。 4.2 Accton Accton MPX 状态:支持,驱动程序名称:ne (+8390) 不要被它的名字骗了。它还是NE2000兼容网卡,可以使用ne2000驱动程序。 Accton EN1203, EN1207, EtherDuo-PCI 状态:支持,驱动程序名称:de4x5, tulip或rtl8139 显然有几种修订版的EN1207(A到D),其中A、B和C是基于tulip的,而D版本的是 基于RealTek 8139(驱动程序不同)。所以在购买时要确定如果出问题可以退回 。 Accton EN2209 Parallel Port Adaptor (EtherPocket) 状态:半支持,驱动程序名称:? 现在有这些并口适配器的驱动程序,但还不包括在2.0或2.1版本内核源码中。可 以从如下主页获取驱动程序: http://www.unix-ag.uni-siegen.de/~nils/accton_linux.html Accton EN2212 PCMCIA Card 状态:半支持,驱动程序名称:? David Hinds在编写该网卡的驱动程序,最好检查一下他的PCMCIA软件包以了解目 前的状态。 4.3 Allied Telesyn/Telesis AT1500 状态:支持,驱动程序名称:lance 这些是使用79C960版本的AMD LANCE的系列低成本以太网卡。它们是可以控制总线 的网卡,因此是一种可用的较快的ISA总线以太网卡。 DMA选择和芯片号码信息可以在 [34]AMD LANCE找到。 更多有关基于AMD LANCE的以太网卡的技术信息可以在 [35]Notes on AMD...找到 。 AT1700 状态:支持,驱动程序名称:at1700 注意,要在make config时访问该驱动程序依然需要先在回答“Prompt for development and/or incomplete code/drivers?”时回答“Y”。这只是因为这 种网卡很少见,导致驱动程序稳定性的反馈太少。如果与内核一起提供的驱动程 序出现问题,也许你会对以下的替代驱动程序感兴趣 :http://www.cc.hit-u.ac.jp/nagoya/at1700/ Allied Telesis的AT1700系列网卡是基于Fujitsu的MB86965芯片的。该芯片使用 可编程I/O接口和一对固定大小的传输缓存。这样在发送背靠背的一小组数据包时 ,切换缓存带来的停顿较小。 该网卡的一个独特之处在于除了能够驱动10baseT的100欧姆UTP(非屏蔽双绞线) 之外,还能够驱动一般安装在令牌环上的150欧姆STP(屏蔽双绞线)。该网卡还 有一个光纤版本(AT1700FT)。 用在AT1700上的Fujitsu芯片有一个设计上的缺陷:它需要机器断电来完全重起。 使用reset按钮无法重起总线接口。这也不是太坏,只不过在重起后才能可靠地被 检测到。解决方法是在内核检测AT1700有问题时关机器重起。 AT2400 状态:支持,驱动程序名称: ne, ne2k-pci (+8390) 还是PCI NE2000兼容网卡,它是基于RealTek 8029芯片的。 AT2450 状态:支持,驱动程序名称:pcnet32 这是PCI版本的AT1500,而且没有Boca的79c970 PCI网卡那样的问题。DMA选择和 芯片号码信息可以在 [36]AMD LANCE找到。 更多有关基于AMD LANCE的以太网卡的技术信息可以在 [37]Notes on AMD...找到 。 AT2500 状态:半支持,驱动程序名称:rtl8139 该网卡使用RealTek的8139芯片——参见 [38]RealTek 8139一节。 AT2540FX 状态:半支持,驱动程序名称:eepro100 该网卡使用i82557芯片,因此可能/应该能够使用eepro100的驱动程序。如果你试 用过,请发给我一份报告以更新本信息。 4.4 AMD / Advanced Micro Devices AMD的Carl Ching友好地提供了非常详尽的所有有关AMD以太网产品的资料,对澄 清本节内容很有帮助。 AMD LANCE (7990, 79C960/961/961A, PCnet-ISA) 状态:支持,驱动程序名称:lance 这实际上不是AMD的以太网卡。你会阅读本小节的原因是,你在网卡上只能找 到AMD标记和上述数字。7990是原始的“LANCE”芯片,但大多数资料(包括本文 档)都按照“LANCE”芯片对待所有这些类似的芯片。(......我可以加一句:这 样是不对的。) 上面这些数字指明了作为许多以太网卡的核心的AMD芯片。例如,Allied Telesis的AT1500(参见 [39]AT1500)和NE1500/2100(参见 [40]NE1500)就使 用了这些芯片。 7990/79c90早已被新版本所取代。79C960(又名PCnet-ISA)主要包含79c90核心 以及所有其它必须的硬件支持,可作为单片以太网卡的解决方案 。79c961(PCnet-ISA+)是'960的无跳线即插即用版本。ISA系列的最后一个芯片 是79c961A(PCnet-ISA II),增加了全双工的功能。除了那些使用共享内存配置的 原始7990的非常古老的网卡,所有使用这些芯片的网卡都可以使用lance.c驱动程 序。可以通过DMA通道没有跳线来辨认出这些老网卡。 一个常见的问题是遇到“busmaster arbitration failure”消息。在固定的时间 之内(50us)LANCE驱动程序无法访问总线时就会出现这一消息。这通常预示主板 上的总线控制DMA被破坏,或者某些其它设备霸占了总线,或者DMA通道出现冲突 。如果你的BIOS设置中有“GAT option”(保证存取时间),那么试著改变一下 其设置看看有没有效。 同样要注意,对一个合法网卡,驱动程序只查看以下地址:0x300, 0x320, 0x340, 0x360,启动参数ether=所提供的地址被静悄悄地略过了(对此将进行修 改),所以现在要确定你的网卡配置为上述的一个I/O地址。 即使安装了超过16MB的内存,该驱动程序依然工作得很好,因为必要时它会使用 低端内存“bounce-buffers”(即在发送数据到网卡进行传输之前,16MB以上内 存的数据会先拷贝到16MB以下的一个缓存里。) DMA通道可以用除此之外不被使用的dev->mem_start值的低位进行设置(又 名PARAM_1)。(参见 [41]PARAM_1)如果没有设置,那么按次序启用每个空闲 的DMA通道并检查是否初始化成功来进行探测。 HP-J2405A板是个例外:在该板上很容易读出EEPROM设置的IRQ和DMA的值。 参见 [42]Notes on AMD...以了解更多有关这些芯片的信息。 AMD 79C965 (PCnet-32) 状态:支持,驱动程序名称:pcnet32 这是PCnet-32——用于VL总线和局部总线系统的原始LANCE芯片的32比特总线控制 版本。这些芯片可以用标准的lance.c驱动程序操作,同时还有一个不受任何ISA 总线有关16MB限制的32比特版本的驱动程序(pcnet32.c)。 AMD 79C970/970A (PCnet-PCI) 状态:支持,驱动程序名称:pcnet32 这是PCnet-PCI——与PCnet-32相似,不过是为基于PCI总线系统设计的。请参阅 上面的PCnet-32信息。这意味著需要构建一个启用PCI BIOS支持的内核。'970A在 原始的'970设计上增加了全双工支持及其它一些特性。 注意,Boca制造的79C970无法用在较快的奔腾机器上。这是个硬件错误,它也会 影响DOS用户。参考Boca一节以了解更多的细节。 AMD 79C971 (PCnet-FAST) 状态:支持,驱动程序名称:pcnet32 这是用于PCI系统的AMD的100Mbit芯片,也支持全双工操作。1996年6月出产。 AMD 79C972 (PCnet-FAST+) 状态:支持,驱动程序名称:pcnet32 已经证实该网卡工作情况与'971一样。 AMD 79C974 (PCnet-SCSI) 状态:支持,驱动程序名称:pcnet32 这是PCnet-SCSI——从以太网的观点来看基本上按'970处理。参看上文。不要问 是否支持芯片的SCSI部分——本文是以太网-HowTo,不是SCSI-HowTo。 4.5 Ansel Communications AC3200 EISA 状态:半支持,驱动程序名称:ac3200 注意,要在make config时访问该驱动程序依然需要先在回答“Prompt for development and/or incomplete code/drivers?”时回答“Y”。这只是因为这 种网卡很少见,导致驱动程序稳定性的反馈太少。 其驱动程序作为alpha测试驱动程序被包含在目前的内核里。该网卡是基 于ne2000和wd80x3网卡上使用的普通的NS8390芯片。请参见本文的 [43]Alpha驱 动程序以了解在Linux下使用alpha版驱动程序的重要信息。 如果你在使用该网卡,请让我们知道它的工作情况,虽然在v1.1.25内核里就包含 了其驱动程序,但反馈信息很少。 如果你想把该驱动程序作为一个可载入的模块,应该阅读 [44]把以太网驱动程序 作为模块使用以了解有关模块的信息。 4.6 Apricot Apricot Xen-II On Board Ethernet 状态:半支持,驱动程序名称:apricot 这是使用i82596总线控制芯片的板上以太网卡。它的I/O地址只能是0x300。从驱 动程序的源码上得知,其IRQ也被硬件固定为10。 早期版本的驱动程序倾向于认为0x300处存放的一定是apricot NIC。后来才对硬 件地址进行检查以避免错误的检测。 4.7 Arcnet 状态:支持,驱动程序名称:arcnet (arc-rimi, com90xx, com20020) 由于该网卡的价格非常低廉而且以太网性能很好,可能人们会有很多机会捐献出 他们的Arcnet硬件,使得很多家用系统都使用Arcnet。 Arcnet的一个优点在于所有的网卡接口都一样,所以只需要一个驱动程序。它还 内建了错误处理机制,据信不会丢失数据包。(对UDP来说这可太棒了!)注意 ,arcnet驱动程序使用“arc0”作为自己的名字,而不是通常的以太网设备名 “eth0”。 在标准内核里包含了若干设置跳线、一般提示和邮寄Bug报告地址的信息文件。 据信100Mbs的ARCnet网卡也可以同样使用该驱动程序! 4.8 AT&T 注意,AT&T的StarLAN是一种孤岛技术,跟SynOptics的LattisNet一样,不能在标 准的10Base-T环境里使用,没有能进行“相互交流”的Hub。 AT&T T7231 (LanPACER+) 状态:不支持。 这些StarLAN网卡使用的接口类似于i82586芯片。Matthijs Melchior (matthijs.n.melchior@att.com)曾经试著用过3c507的驱动程序,好象差不多 可以工作了。但从那之后就再没听过多少消息了。 4.9 Boca Research 不错,他们不光是制造多口串行卡。 Boca BEN400 状态:支持,驱动程序名称:ne (+8390) 显然这是一款NE2000兼容网卡,使用VIA VT86C916芯片。 Boca BEN (ISA, VLB, PCI) 状态:支持,驱动程序名称:lance, pcnet32 这些网卡都是基于AMD的PCnet芯片。需要警告一下潜在的买家,许多用户在使用 这些VLB/PCI网卡时遇到了没完没了的麻烦。快的奔腾系统用户受到了特别的打击 。注意这并不是驱动程序的问题,因为DOS/Win/NT用户也一样遇到麻烦。Boca的 技术支持电话号码是(407) 241-8088,也可以通过75300.2672@compuserve.com找 到他们。老式的ISA网卡看来没遇到这种问题。 Boca对受影响的使用者提供“包修”服务,需要增加一个缺少的电容,虽然可以 解决一些问题,但对大多数人来说并非百分之百奏效。 如果您仍然想买这种网卡,至少试著得到一个7天无条件退货的条款,这样一旦出 问题你就可以退货。 有关AMD芯片更一般的信息可以在 [45]AMD LANCE找到。 基于AMD LANCE的以太网卡的更多技术信息可以在 [46]Notes on AMD...找到。 4.10 Cabletron Donald写道:“是的,又一个不肯提供编程资料的公司。他们要等待几个月来最 终确定 所有他们的资料都是私有的,蓄意浪费我的时间。如果可以的话,象躲避 瘟疫一样避免使用他们的网卡。还要注意,有人曾打电话给Cabletron,结果听到 什么‘有个D. Becker在编写Linux下的驱动程序’之类的话——好象我是为他们 工作的。完全不是这么回事。” 看来自从几年前Donald写了上述注释后,Cabletron改变他们对于编程资料的政策 (象Xircom一样)——如果你想证实这一点或索取编程信息的话,发个e-mail 给support@ctron.com。但是,现在几乎没有人对老式的E20xx和E21xx网卡提出修 改/更新驱动程序的要求了。 E10**, E10**-x, E20**, E20**-x 状态:半支持,驱动程序名称:ne (+8390) 这些差不多算是NEx000兼容网卡,据报告可以使用标准的NEx000驱动程序,这要 感谢探测时的ctron特性检查。如果有问题,几乎不可能修复,因为没有编程资料 。 E2100 状态:半支持,驱动程序名称:e2100 (+8390) 又来了,在编程资料私有的情况下什么都做不了。E2100的设计很差劲。每次传送 数据包映射它的共享内存时,它都要映射到整个128K的区域!这就意味著你无法 在此区域安全地使用另一个中断驱动的共享内存设备,包括另一个E2100。绝大多 数时间它都正常工作,但时不时地会咬你一口。(对,这个问题可以通过传送数 据包时关中断来避免,但那样几乎肯定会丢失时钟ticks。)同样,如果错误地对 板进行了编程,或者在错误的时刻暂停机器,即使reset按钮都无法生效。你必须 关机并保持30秒之后再开机。 媒介选择是自动进行的,但可以用dev->mem_end参数的低比特位来覆盖。参见 [47]PARAM_2。模块用户可以在/etc/conf.modules文件里指定xcvr=N值作 为option。 同样,不要把E2100当成NE2100的兼容网卡。E2100是采用NatSemi的DP8390的共享 内存设计,大致与伤脑筋的WD8013相似,而NE2100(和NE1500)是用总线控制 的AMD的LANCE设计的。 在标准内核里包含了E2100的驱动程序。但是,无法看到其编程资料,不要指望 有Bug修复。除非你已经买了该网卡,不要用它。 如果你想把该驱动程序作为一个可载入的模块,应该阅读 [48]把以太网驱动程序 作为模块使用以了解有关模块的信息。 E22** 状态:半支持,驱动程序名称:lance 按照Cabletron技术公告牌上的资料,这些网卡使用标准AMD的PC-Net芯片组(参 见 [49]AMD PC-Net)而且可以使用普通的lance驱动程序。 4.11 Cogent 下面是进行联系的地址和方法: Cogent Data Technologies, Inc. 175 West Street, P.O. Box 926 Friday Harbour, WA 98250, USA. Cogent Sales 15375 S.E. 30th Place, Suite 310 Bellevue, WA 98007, USA. 技术支持: Phone (360) 378-2929 between 8am and 5pm PST Fax (360) 378-2882 Compuserve GO COGENT Bulletin Board Service (360) 378-5405 Internet: support@cogentdata.com EM100-ISA/EISA 状态:半支持,驱动程序名称:smc9194 这些网卡使用SMC的91c100芯片,可以使用SMC的91c92驱动程序,但还没得到证实 。 Cogent eMASTER+, EM100-PCI, EM400, EM960, EM964 状态:支持,驱动程序名称:de4x5, tulip 这些是另一种DEC的21040网卡,希望可以使用标准21040驱动程序很好地工作。 EM400和EM964是使用DEC的21050桥接器和4片21040芯片的4端口网卡。 参见 [50]DEC 21040以了解这些网卡的更多信息和当前驱动程序的状况。 4.12 Compaq Compaq并不真正从事制造以太网卡,但他们的很多系统都在主板上嵌入了以太网 控制器。 Compaq Deskpro / Compaq XL (Embedded AMD Chip) 状态:支持,驱动程序名称:pcnet32 诸如XL系列的机器在主板上有一片AMD的79c97x PCI芯片,可以使用标准的LANCE 驱动程序。但在使用前,必须使用一些技巧把PCI BIOS放到可以被Linux发现的地 方。Frank Maas友好地提供了其中的细节: “Compaq机器的这个问题在于其PCI目录被载入高端内存,Linux内核无法达到那 一点。结果:网卡检测不到,也无法使用(另外鼠标也不工作)。其解决方法( 在http://www-c724.uibk.ac.at/XL/里有详尽的描述)是载入MS-DOS,使 用Compaq编写的一个小驱动程序,然后用LOADLIN载入Linux内核。好吧,你也许 想说“呸、呸”,但到目前为止,这是所我知道的唯一办法。那个小驱动程序的 作用只不过是把PCI目录放到其正常的存储位置(这样Linux就可以找到它了)” 更多有关AMD芯片的一般资料可以在 [51]AMD LANCE找到。 Compaq Nettelligent/NetFlex(嵌入ThunderLAN芯片) 状态:支持,驱动程序名称:tlan 这些系统使用Texas Instruments的ThunderLAN芯片。有关ThunderLAN驱动程序的 资料可在 [52]ThunderLAN找到。 Compaq PCI card 状态:支持,驱动程序名称:eepro100 检查你的网卡——如果它的零件登记号是323551-821或者上面有一片intel 82558芯片,那它就是另一种基于Intel EEPro100的网卡。 4.13 Danpex Danpex EN9400 状态:支持,驱动程序名称:de4x5, tulip 又一个基于DEC的21040芯片的网卡,据报告性能挺好,价格比较便宜。 参见 [53]DEC 21040以了解这些网卡的更多信息和当前驱动程序的状况。 4.14 D-Link DE-100, DE-200, DE-220-T, DE-250 状态:支持,驱动程序名称:ne (+8390) 一些早期的D-Link网卡没有PROM的标识0x57,但ne2000驱动程序能识别它们。对 于软件配置的网卡,可以从www.dlink.com得到配置程序。DE2**网卡曾经广为报 道在早期版本的Linux下会产生传输地址不匹配的虚假错误。注意,有一 些Digital (DEC)的网卡也叫做DE100和DE200,只是名称相同而已。 DE-520 状态:支持,驱动程序名称:pcnet32 这是使用PCI版本AMD的LANCE芯片的PCI网卡。DMA选择和芯片号码信息可以在 [54]AMD LANCE找到。 更多有关基于AMD LANCE的以太网卡的技术信息可以在 [55]Notes on AMD...找到 。 DE-528 状态:支持,驱动程序名称:ne, ne2k-pci (+8390) 很明显D-Link已经开始制造PCI NE2000兼容网卡了。 DE-530 状态:支持,驱动程序名称:de4x5, tulip 这是一款使用DEC的21040 PCI芯片的通用网卡,据报告可以使用通用的21040 tulip驱动程序。注意,它不是DFE-530。 参见 [56]DEC 21040以了解这些网卡的更多信息和当前驱动程序的状况。 DE-600 状态:支持,驱动程序名称:de600 笔记本电脑以及想让电脑快捷地联上以太网的用户可能用该网卡比较好。在缺省 的内核源码树里有它的驱动程序,是Bjorn Ekwall bj0rn@blox.se编写的。通过 并口可以从该网卡获得180kb/s的传送速度。请阅读内核源码树里 的README.DLINK文件。 注意,现在传递给ifconfig的设备名为eth0,而不是以前用的dl0。 如果你的并口不是在标准的0x378,那么需要重新进行编译,因为地址是直接编译 到驱动程序里的。同样还要注意,某些笔记本电脑主板上的并口位于0x3bc,某些 一体化板卡的并口也是这样。 DE-620 状态:支持,驱动程序名称:de620 与DE-600一样,只是有两种输出格式。Bjorn为1.1以上版本内核里的这种型号网 卡编写了驱动程序。参见上面有关DE-600的信息。 DE-650 状态:半支持,驱动程序名称:de650 (?) 这种PCMCIA网卡已经被有些人在他们的笔记本电脑上使用一段时间了。它是个基 本的8390设计,与NE2000很相象。LinkSys的PCMCIA网卡和IC-Card的Ethernet都 被认为是DE-650兼容网卡。注意,目前其驱动程序还不是标准内核的一部分,所 以需要做一些打补丁的工作。参见本文档的 [57]PCMCIA支持。 DFE-530TX 状态:支持,驱动程序名称:via-rhine 又一款使用VIA Rhine芯片组。(参见 [58]VIA Rhine)不要把它同基于tulip的 网卡DE-530相混淆。 DFE-538TX 状态:支持,驱动程序名称:rtl8139, 8139too 该网卡使用RealTek 8139芯片——参见 [59]RealTek 8139一节。 4.15 DFI DFINET-300和DFINET-400 状态:支持,驱动程序名称:ne (+8390) 又一款拙劣设计的NE兼容网卡——这些网卡在PROM的前三个字节使用“DFI”,而 不是象所有NE1000和NE2000网卡那样在第14和15字节使用0x57。(300是8比特的 伪NE1000兼容卡,400是伪NE2000兼容卡。) 4.16 Digital / DEC DEPCA, DE100/1, DE200/1/2, DE210, DE422 状态:支持,驱动程序名称:depca 源文件“depca.c”里的说明包含了在一台机器里如何使用多块此类网卡。注意 ,DE422是EISA网卡。这些网卡都是基于AMD的LANCE芯片。参见 [60]AMD LANCE以 了解更多信息。同时最多只能使用两块ISA网卡,因为它们的I/O基址只能设置 在0x300和0x200。如果想这么做的话,请阅读标准内核源码树中的驱动程序源文 件depca.c里的注释。 其驱动程序也可以用在基于Alpha CPU的机器上,用户还可以使用其中的各 种ioctl()函数。 Digital EtherWorks 3 (DE203, DE204, DE205) 状态:支持,驱动程序名称:ewrk3 这些网卡使用DEC的私有芯片,而不是象早期的DE200网卡那样使用LANCE芯片。它 们支持共享内存和可编程I/O两种工作方式,但在使用PIO模式时其性能会下 降50%。共享内存的大小可以设置为2kB、32kB或64kB,但驱动程序只进行了2kB 和32kB下的测试。在驱动程序文件ewrk3.c的开头有更多的信息(包括如何把它作 为可载入模块使用),在README.ewrk3里也有此类信息。在发行的标准内核里包 含了这两个文件。与depca.c一样,该驱动程序也支持Alpha CPU。 标准的驱动程序里有一些有趣的ioctl()调用,可以用来获取或清除数据包统计信 息、读/写EEPROM、改变硬件地址等。黑客可以阅读源代码以了解更多此类信息。 除了其它工具软件,David还为这些网卡编写了一个配置工具(依照DOS程 序NICSETUP.EXE)。这些都可以在大多数Linux的FTP站点的目 录/pub/Linux/system/Network/management下找到——查找文 件ewrk3tools-X.XX.tar.gz。 DE425 EISA, DE434, DE435, DE500 状态:支持,驱动程序名称:de4x5, tulip 这些网卡是基于下面会提到的21040芯片。DE500使用21140芯片提供10/100Mbs以 太网的连接。阅读下面的21040一节以了解其它信息。在非DEC网卡使用此驱动程 序时还有一些编译时的选项。细节可见README.de4x5。 所有Digital网卡都自动探测媒介(除了DE500暂时因为专利的原因还不支持这一 点)。 驱动程序也支持Alpha CPU,可以被作为模块载入。用户可以通过ioctl()调用访 问驱动程序的内部——参考“ewrk3”工具和de4x5.c源码以了解如何使用。 DEC 21040, 21041, 2114x, Tulip 状态:支持,驱动程序名称:de4x5, tulip DEC 21040是Digital的总线控制单片以太网卡产品,与AMD的PCnet芯片类似 。21040是为PCI总线结构特别设计的。显然目前不再生产这些芯片了,因 为Intel购买了DEC的半导体部分,更倾向于使用他们自己的以太网卡芯片。 对基于此芯片的网卡可以在两个驱动程序之间进行选择。上面讨论了DE425驱动程 序,还有一个通用的21040“tulip”驱动程序。 警告:即使你的网卡是基于该芯片的,驱动程序也可能出问题。Davies写道: “无法保证‘tulip.c’或‘de4x5.c’可以驱动任一基于DC2114x的网卡,除非说 明支持该网卡。为什么??因为一个寄存器,通用寄存器(CSR12) ,(1)DC21140A中的CSR12是可编程的,而各个销售商的实现各不相同 ;(2)DC21142/3中的CSR12现在是个SIA控制寄存器(按照DC21041的方式)。唯一 的希望是SROM可以编码来帮助构建驱动程序。但这并非可以确保的解决方案,因 为有些销售商(如SMC的9332网卡)并未遵从Digital Semiconductor推荐的SROM 编程格式。” 从非技术的角度上说,这就意味著你无法确定一个未知的采用DC2114x芯片的网卡 可以使用Linux驱动程序,所以在购买网卡之前,最好确定一下可以退货。 在很多近期的SMC EtherPower网卡中也发现21041芯片被用来代替21040。21140可 以支持100Base-T,并使用21040芯片的Linux驱动程序。如果要对非DEC的网卡使 用David的de4x5驱动程序,请先看一下README.de4x5里的细节。 如果有问题的话,请试著从Donald的ftp/WWW站点获取最新的驱动程序版本。 [61]Tulip Driver 那里还有一个各种使用21040芯片的网卡/销售商的(非完全)列表。 4.17 Farallon Farallon销售EtherWave适配器和收发器。其设备可以把多个10baseT设备构成菊 花链。 Farallon Etherwave 状态:支持,驱动程序名称:3c509 据说这是一个包含EtherWave收发器的3c509兼容网卡。可以成功地使用目前 的Linux的3c509驱动程序。对于一般的应用,该网卡过于昂贵了,但在某些特殊 情况下可以使用它。小Hub的价格在$125以上,Etherwave还要在板卡的价格之上 增加$75-$100——如果拉一根线太少的话就物有所值,如果是缺少两个网络就不 值得这么做了。 Farallon PCI 593 状态:支持,驱动程序名称:de4x5, tulip 据说该网卡可以被de4x5驱动程序检测到。 4.18 Fujitsu 与许多网络芯片制造商不同,Fujitsu还制造和销售一些基于他们自己芯片的网卡 。 Fujitsu FMV-181/182/183/184 状态:支持,驱动程序名称:fmv18x 从驱动程序来看,这些网卡就是Fujitsu的MB86965网卡的简单改进,这使它们 与Allied Telesis的AT1700网卡很相似。 4.19 Hewlett Packard 272**网卡使用可编程I/O,与NE*000板卡类似,但是数据传输端口可以在不访问 的时候“关闭”,以避免自动探测驱动程序时的麻烦。 感谢Glenn Talbott帮助澄清了本节有关HP硬件版本号的疑惑。 HP Night Director+ 10/100 状态:支持,驱动程序名称:pcnet32 看来这些网卡使用的是AMD 79C972芯片。 27245A 状态:支持,驱动程序名称:hp (+8390) 这是基于8比特8390的10BaseT网卡,出于所有8比特的缘故不推荐使用。几年前该 网卡被重新设计为高度集成的,引起了一些只影响测试程序的初始化时的变化, 对LAN驱动程序没有影响。(新的网卡在切换进入和退出环回模式后并不立刻处于 “准备好”的状态。) 如果你想把该驱动程序作为一个可载入的模块,应该阅读 [62]把以太网驱动程序 作为模块使用以了解有关模块的信息。 HP EtherTwist, PC Lan+ (27247, 27252A) 状态:支持,驱动程序名称:hp+ (+8390) HP的PC Lan+与标准的HP PC Lan网卡不同。从v1.1.x开发时其驱动程序就被加入 到标准内核的驱动程序列表中。它可以象ne2000一样工作在PIO模式,也可以 象wd8013一样工作在共享内存模式。 47B是基于16比特8390的10BaseT w/AUI,而52A是基于16比特8390的ThinLAN w/AUI。这些网卡用于收发数据包缓冲的板上RAM为32K,而不是一般的16KB,而且 都提供自动识别LAN连接器的功能。 如果你想把该驱动程序作为一个可载入的模块,应该阅读 [63]把以太网驱动程序 作为模块使用以了解有关模块的信息。 HP-J2405A 状态:支持,驱动程序名称:lance 这些网卡比27247/27252A便宜而且稍微快一点儿,但少了一些特性,如AUI 、ThinLAN连接与启动PROM插座。这是一个相当通用的LANCE设计,但设计时的一 个不起眼的决定使它与通用的“NE2100”驱动程序不兼容。感谢HP的Glenn Talbott提供的资料,使驱动程序能够包含对它的特别支持(包括从板上读取DMA 通道)。 更多有关基于LANCE的网卡信息可以在 [64]Notes on AMD...中找到。 HP-Vectra On Board Ethernet 状态:支持,驱动程序名称:lance HP-Vectra在主板上有一个AMD的PCnet芯片。 DMA选择和芯片号码信息可以在 [65]AMD LANCE找到。 更多有关基于AMD LANCE的以太网卡的技术信息可以在 [66]Notes on AMD...找到 。 HP 10/100 VG Any Lan Cards (27248B, J2573, J2577, J2585, J970, J973) 状态:支持,驱动程序名称:hp100 该驱动程序还支持某些Compex VG产品。由于驱动程序支持ISA、EISA和PCI网卡, 所以在对内核源码运行make config时可以在ISA网卡下找到它。 HP NetServer 10/100TX PCI (D5013A) 状态:支持,驱动程序名称:eepro100 显然这只是重新标记过的Intel EtherExpress Pro 10/100B网卡。参见Intel一节 以了解更多信息。 4.20 IBM / International Business Machines IBM Thinkpad 300 状态:支持,驱动程序名称:znet 它与基于Intel的Zenith Z-note兼容。参见 [67]Z-note以了解更多信息。 据信下面这个站点有一个新版本Thinkpad的全面的有用资料数据库。我还没有亲 自去查看过。 [68]Thinkpad-info 对不便于使用WWW浏览器的读者,可以试试peipa.essex.ac.uk:/pub/tp750/ IBM Credit Card Adaptor for Ethernet 状态:半支持,驱动程序名称:?(独立发行) 该PCMCIA网卡可以在Linux下正常使用。同样需要指出的是,笔记本电脑需要有支 持PCMCIA的芯片组,而且要把支持PCMCIA的补丁加进标准内核。参见本文档中的 [69]PCMCIA支持。 IBM 10/100 EtherJet PCI 状态:支持,驱动程序名称:eepro100 据说该网卡与Intel EtherExpress Pro 100驱动程序兼容。 IBM Token Ring 状态:半支持,驱动程序名称:ibmtr 要支持令牌环不仅仅需要写一个设备驱动程序,还要为令牌环编写源路由例程。 编写时花费时间最多的地方就是源路由。 开始的驱动程序开发是针对IBM的ISA和MCA令牌环网卡,并在MCA 16/4 Megabit令 牌环板上进行过测试,但在其它基于Tropic的板上也可以工作。 4.21 ICL Ethernet Cards ICL EtherTeam 16i/32 状态:支持,驱动程序名称:eth16i 驱动程序支持该网卡的ISA (16i)和EISA (32)两个版本。它使用的Fujitsu 的MB86965芯片也被用在at1700网卡上。 4.22 Intel Ethernet Cards 注意,各种Intel网卡的命名是乱七八糟的。如果有问题,检查网卡上主要芯片 的i8xxxx号码,对PCI网卡使用/proc目录下的PCI信息,然后再与这里列出的数字 进行比较。 Ether Express 状态:支持,驱动程序名称:eexpress 该网卡使用intel的i82586芯片。驱动程序的早期版本(在v1.2内核里) 是alpha-测试驱动程序,大多数人在使用时会遇到麻烦。v2.0内核里的驱动程序 要好得多,虽然其源码还被列为实验性的,而且在较快的机器上问题更多。 在驱动程序源码开头的注释里列出了一些与这些网卡有关的问题(并进行了修正 !)。至少有一个用户报告说有死锁,使得把驱动程序里所有的outb替换 为outb_p的工作放慢下来。同时还要检查一下驱动程序报告的RAM缓存大小 与Intel配置工具报告的是否一致。 Ether Express PRO/10 (PRO/10+) 状态:支持,驱动程序名称:eepro Bao Chau Ha编写了这些网卡的驱动程序,早在1.3.x内核中就包含了它。该驱动 程序也可以使用在一些基于i82595芯片的Compaq内建以太网系统上。可能需要在 适当的地方使用网卡自带的配置工具禁用PnP支持。 Ether Express PRO/10 PCI (EISA) 状态:半支持,驱动程序名称:?(独立发行) 有一个在缺省内核外独立发行的PCI版本的驱动程序。这些网卡使用PLX9036 PCI 接口芯片和Intel的i82596 LAN控制器芯片。如果你的网卡上有i82557芯片,那么 你的网卡就不是该类型网卡,而是下面要讨论的版本,需要EEPro100驱动程序。 可以从如下站点获得PRO/10 PCI网卡的alpha驱动程序及使用指导: [70]EEPro10 Driver 如果是EISA网卡,可能要改一下驱动程序在不同情况下(PCI与EISA)使用的检测 机制。 Ether Express PRO 10/100B 状态:支持,驱动程序名称:eepro100 注意,该驱动程序不支持老式的100A网卡。驱动程序里列出的芯片号码 是i82557/i82558。更新驱动程序或寻找支持,请访问: [71]EEPro-100B Page 4.23 Kingston Kingston制造各种网卡,包括NE2000+、基于AMD PCnet的网卡和基于DEC tulip的 网卡。大多数网卡都可以使用相应的驱动程序。参见 [72]Kingston Web Page。 4.24 LinkSys LinkSys制造少量不同的NE2000兼容网卡、一些正统的ISA网卡、一些即插即用 的ISA网卡以及一些基于支持ne2000-PCI芯片组的ne2000-PCI兼容网卡。它们的型 号太多,这里就不一一列出了。 LinkSys对Linux是友好的,拥有一个专门的Linux支持WWW主页,甚至在某些产品 的包装盒上印有Linux字样。请访问: http://www.linksys.com/support/solution/nos/linux.htm LinkSys Etherfast 10/100 Cards. 状态:支持,驱动程序名称:tulip 注意,这些网卡有几种“修订版”(即使用不同的芯片组),都使用一样的网卡 名。第一种使用DEC芯片组。第二种修订版使用Lite-On PNIC 82c168 PCI网络接 口控制器,该网卡的第三种修订版使用LinkSys 82c169 NIC芯片。对后两种版本 网卡的支持已经被合并到标准的tulip驱动程序里——按照当前所用驱动程序的版 本,可能需要进行版本升级来支持它们。 更多的有关PNIC信息可在下面找到: http://www.scyld.com/linux/drivers/pnic.html 有关这些网卡各种版本的进一步资料可以在上面提到过的LinkSys的WWW站点得到 。 LinkSys Pocket Ethernet Adapter Plus (PEAEPP) 状态:支持,驱动程序名称:de620 据说这是DE-620兼容网卡,而且据报道可以正常使用DE-620的驱动程序。参见 [73]DE-620以了解更多信息。 LinkSys PCMCIA Adaptor 状态:支持,驱动程序名称:de650 (?) 有人猜想这是重新标记过的DE-650。参见 [74]DE-650以了解更多信息。 4.25 Microdyne (Eagle) Eagle Technology(又称Novell网卡)被卖给Microdyne。如果在这里的列表上找 不到你的网卡,请检查本文档的Novell一节。虽然Microdyne现在不再积极销售网 卡,在他们的网站ftp.mcdy.com上还有一些与产品相关的资料。 Microdyne Exos 205T 状态:半支持,驱动程序名称:? 这是另一款基于i82586的网卡。Dirk Niggemann dirk-n@dircon.co.uk编写了一 个自己认为属于“pre-alpha”的驱动程序,希望有人进行测试。要了解细节请写 信给他。 4.26 Mylex 如果想询问有关Mylex的问题,请通过如下号码与他们联系。 MYLEX CORPORATION, Fremont Sales: 800-77-MYLEX, (510) 796-6100 FAX: (510) 745-8016. 他们也有一个WEB站点: [75]Mylex WWW Site Mylex LNE390A, LNE390B 状态:支持,驱动程序名称:lne390 (+8390) 这些是相当老的使用与wd80x3相似的共享内存方式的EISA网卡。在目前的2.1.x系 列内核里有它们的驱动程序。应该确定共享内存地址被设置在1MB以下,或者在机 器所安装物理RAM的最高地址之上。 Mylex LNP101 状态:支持,驱动程序名称:de4x5, tulip 这是基于DEC的21040芯片的PCI网卡。可以选择10BaseT、10Base2和10Base5输出 。LNP101网卡被证实可以使用通用的21040驱动程序。 参见有关21040芯片一节( [76]DEC 21040)以了解更多信息。 Mylex LNP104 状态:半支持,驱动程序名称:de4x5, tulip LNP104使用DEC的21050芯片来处理四个独立的10BaseT端口。它应该可以使用最近 的可以共享中断的21040驱动程序,但(我觉察到)这一尝试还没有人报告使用过 。 4.27 Novell Ethernet, NExxxx及其相关兼容卡。 前缀“NE”来自Novell Ethernet。Novell按照最便宜的NatSemi数据手册设计并 把制造权卖(扔?)给了Eagle,就是为了向市场提供价格合理的以太网卡。(目 前被广泛使用的NE2000网卡。) NE1000, NE2000 状态:支持,驱动程序名称:ne (+8390) ne2000现在是按照NatSemi的8390芯片进行基本设计的通用名称。它们使用可编 程I/O,而不是共享内存,使得安装简单,但性能有一点降低,而且带来几个问题 。有关NE2000网卡的一些普遍性问题列在 [77]Problems with...里。 有些NE2000兼容卡使用National Semiconductor的“AT/LANTic”83905芯片,提 供与wd8013相似的共享内存模式和EEPROM软件配置。共享内存模式比可编程I/O模 式占用的CPU要少(也就是更有效)。 一般来说,把NE2000兼容卡的I/O地址放在0x300不是个好主意,因为几乎每一个 设备驱动程序启动时都探测这个地址。某些差劲的NE2000兼容卡在被探测到错误 区域时处理不当会导致机器死锁。同样,0x320也不好,因为SCSI驱动程序会探 测0x330。 Donald为所有ne2000网卡编写了一个NE2000诊断程序(ne2k.c)。参见 [78]诊断 程序以了解更多信息。 如果你想把该驱动程序作为一个可载入的模块,应该阅读 [79]把以太网驱动程序 作为模块使用以了解有关模块的信息。 NE2000-PCI (RealTek/Winbond/Compex) 状态:支持,驱动程序名称:ne, ne2k-pci (+8390) 是的,无论相信与否,人们制造的PCI网卡是基于十多年前设计的ne2000接口。目 前几乎所有这些网卡都是基于RealTek的8029芯片或Winbond的89c940芯片。显 然Compex、KTI、VIA和Netvin的网卡也使用这些芯片,只是PCI ID不同。 最新的v2.0内核支持对所有这些网卡的自动检测与使用。(如果你使用v2.0.34之 前的内核版本,把它升级以确保网卡被检测到。)目前有两个可选的驱动程序, 一个是原始的ISA/PCI驱动程序ne.c,另一个是相对较新的只支持PCI的驱动程 序ne2k-pci.c。 要使用原始的ISA/PCI驱动程序,在运行make config时必须对“Other ISA cards”选项回答“Y”,与ISA网卡使用同一个NE2000驱动程序。(这会让你意识 到这些网卡并不像PCNet-PCI或DEC 21040网卡一样智能......) 较新的只支持PCI的驱动程序与ISA/PCI驱动程序的区别在于去掉了对所有老式8比 特网卡的支持,而且在移动网卡上的数据时使用更大的数据块,不再有老 式ISA-NE2000网卡可靠操作所必需的中间暂停。这样驱动程序变得小了一些,效 率也高了一些,但在普通应用中这一区别并没明显到令人激动的地步。(如果希 望得到最高效率/最低的CPU占用率,那么PCI-NE2000不过是个差劲的选择。)驱 动程序更新及更多信息可以在下面找到: http://www.scyld.com/linux/drivers/ne2k-pci.html 如果你的NE2000 PCI网卡没有被最新版本的驱动程序检测到,请 与/usr/src/linux/MAINTAINERS里列出的NE2000驱动程序维护者联系,并附 上cat /proc/pci和dmesg的输出,以便把对该网卡的支持加到驱动程序里。 还要注意,有些网卡的制造商在明知道他们的网卡完全不同时(如PCNet-PCI 或RealTek的8139),依然在产品包装上写著“NE2000 Compatible”。如果有疑 问的话,按照本文档查看一下主要芯片的编号。 NE-10/100 状态:不支持。 这些是基于National Semiconductor的DP83800和DP83840芯片的ISA 100Mbps网卡 。目前没有驱动程序支持它,也没听说有谁在编写这样的驱动程序。除了一个简 单的PDF文件,目前还没有足以编写驱动程序的有关该芯片的资料。 NE1500, NE2100 状态:支持,驱动程序名称:lance 这些网卡使用AMD的原始7990 LANCE芯片,可以使用Linux的lance驱动程序。较新 的NE2100兼容卡使用AMD更新后的PCnet/ISA芯片。 某些老版本的lance驱动程序在使用autoIRQ从原始Novell/Eagle 7990网卡获取中 断线时会遇到麻烦。希望现在已经被修正了。如果问题没解决,就用LILO来指 定IRQ,还有问题的话,请告诉我们。 DMA选择和芯片号码信息可以在 [80]AMD LANCE找到。 更多有关基于AMD LANCE的以太网卡的技术信息可以在 [81]Notes on AMD...找到 。 NE/2 MCA 状态:半支持,驱动程序名称:ne2 若干公司生产了几种NE2000微通道网卡。v2.2内核里提供的ne2驱动程序可以检测 如下MCA网卡:Novell Ethernet Adapter NE/2、Compex ENET-16 MC/P和Arco Ethernet Adapter AE/2。 NE3200 状态:不支持。 这种老式的EISA网卡把一片8MHz的80186与一片i82586混合使用。没人为它编写驱 动程序,因为没有该网卡的资料,而且也没有对其驱动程序的真正需求。 NE3210 状态:支持,驱动程序名称:ne3210 (+8390) 这一EISA网卡与NE3200完全不同,它使用Nat Semi的8390芯片。其驱动程序可以 在v2.2内核源码树中找到。确定共享内存地址被设置在1MB以下,或者在机器所安 装物理RAM的最高地址之上。 NE5500 状态:支持,驱动程序名称:pcnet32 这些不过是AMD PCnet-PCI网卡('970A)芯片。更多有关基于LANCE/PCnet的网卡 信息可以在 [82]AMD LANCE找到。 4.28 Proteon Proteon P1370-EA 状态:支持,驱动程序名称:ne (+8390) 很明显这是一款NE2000兼容卡,在Linux下工作得挺好。 Proteon P1670-EA 状态:支持,驱动程序名称:de4x5, tulip 这是另一款基于DEC的Tulip芯片的PCI网卡。据说在Linux下工作得挺好。 参见有关21040芯片一节( [83]DEC 21040)以了解更多信息。 4.29 Pure Data PDUC8028, PDI8023 状态:支持,驱动程序名称:wd (+8390) PureData的PDUC8028和PDI8023系列网卡差不多就是wd80x3的兼容网卡—— 在wd.c驱动程序里有特别的代码来探测这些网卡。 4.30 Racal-Interlan 可以通过WWW站点www.interlan.com联系Racal Interlan。我认为在过去他们曾被 称为MiCom-Interlan。 ES3210 状态:半支持,驱动程序名称:es3210 这是一款基于EISA 8390的共享内存网卡。有一个实验性的驱动程序与v2.2内核一 起发行,据说工作得挺好,但(至少)对早期版本网卡的EISA IRQ和共享内存地 址的检测有点问题。(这个问题并不仅限于Linux......)这样就需要给驱动程序 提供中断和地址。例如,网卡为IRQ 5,共享内存在0xd0000,使用模块化驱动程 序,则在/etc/conf.modules里添上options es3210 irq=5 mem=0xd0000。或者使 用编译进内核的驱动程序,在启动时提供ether=5,0,0xd0000,eth0。I/O基址是自 动检测的,所以在此使用一个零值。 NI5010 状态:半支持,驱动程序名称:ni5010 以前需要另外寻找这些老式8比特MiCom-Interlan网卡的驱动程序,现在它被作为 一个实验性的驱动程序与v2.2内核一起发行了。 NI5210 状态:半支持,驱动程序名称:ni52 该网卡也是使用Intel的芯片。Michael Hipp编写了一个驱动程序,作为“alpha ”驱动程序被包含在标准内核里。Michael希望得到该网卡用户的反馈。参见 [84]Alpha驱动程序以了解在Linux下使用alpha/测试版本以太网驱动程序的重要 信息。 NI6510 (不是EB) 状态:半支持,驱动程序名称:ni65 也有一个基于LANCE的NI6510网卡的驱动程序,而且也是Michael Hipp编写的。它 同样也是“alpha”驱动程序。出于某些原因,该网卡与通用的LANCE驱动程序不 兼容。参见 [85]Alpha驱动程序以了解在Linux下使用alpha/测试版本以太网驱动 程序的重要信息。 EtherBlaster(又名NI6510EB) 状态:支持,驱动程序名称:lance 从1.3.23内核开始,通用的lance驱动程序里增加了对NI6510EB专有标识0x52, 0x44进行的检查。但有人报告说不是所有NI6510EB网卡该标识都一样,这会导 致lance驱动程序检测不出你的网卡。如果出现了这一问题,可以把探测(大约 在lance.c的第322行)改为printk(),把你的网卡上的值打印出来,然后用它们 来代替缺省的0x52, 0x44。 在使用lance驱动程序时,网卡可能运行在“高性能”模式下,而不是NI6510兼容 模式。 4.31 RealTek RealTek RTL8002/8012 (AT-Lan-Tec) Pocket adaptor 状态:支持,驱动程序名称:atp 这是一款AT-Lan-Tec与(可能的)其它一些供应商出售的通用低成本的OEM袖珍适 配器。在标准内核里包含其驱动程序。注意,驱动程序源文件“atp.c”里包含了 一些实质性的信息。 注意,对于早期版本的驱动程序,传递给ifconfig的设备名不是eth0,而是atp0 。 RealTek 8009 状态:支持,驱动程序名称:ne (+8390) 这是一款ISA NE2000兼容网卡,据说使用Linux的NE2000驱动程序工作得挺好。程 序rset8009.exe可以从RealTek的WWW站点http://www.realtek.com.tw获取——或 者用FTP从该站点下载。 RealTek 8019 状态:支持,驱动程序名称:ne (+8390) 这是上述网卡的即插即用版本。使用DOS软件禁止PnP功能,启用无跳线配置,把 网卡的I/O地址和中断设为可用值,然后就行了。(如果要把驱动程序用作模块的 话,不要忘记在/etc/conf.modules里添加一个io=0xNNN选项。)程 序rset8019.exe可以从RealTek的WWW站点http://www.realtek.com.tw获取——或 者用FTP从该站点下载。 RealTek 8029 状态:支持,驱动程序名称:ne, ne2k-pci (+8390) 这是一款NE2000兼容的PCI单芯片产品。现在各个销售商都在销售使用该芯片的网 卡。参见 [86]NE2000-PCI以了解使用该网卡的有关信息。注意,这依然是附 在PCI总线上的十多年前的老式设计。其性能并不比相应的ISA型号好多少。 RealTek 8129/8139 状态:半支持,驱动程序名称:rtl8139 另一款RealTek的PCI单芯片以太网产品。基于该芯片的网卡的驱动程序被包括 在Linux的v2.0.34发行版本中。目前在回答是否要使用v2.2内核里的实验性驱动 程序时,依然要回答“Y”以获得使用该驱动程序的权利。 Donald说基于该芯片的网卡的价格与PCI NE2000兼容网卡大致相同(在有些地方 甚至会便宜13美元!),虽然8139的设计并非最好的10/100板子,还是要比PCI NE2000兼容网卡好。 2.4.x内核还有一个叫做8139too的驱动程序,是基于rtl8139的,但试图处理一些 人们报告的更普遍的问题,所以如果使用的是2.4内核,可以试一下。 4.32 Sager Sager NP943 状态:半支持,驱动程序名称:3c501 这只不过是一款S.A. PROM前缀不同的3c501兼容网卡。我认为它跟原始的3c501一 样伤脑筋。其驱动程序检查NP943 I.D.之后把它当成3c501来处理。参见 [87]3Com 3c501以了解为什么实际上不需要使用这些网卡。 4.33 Schneider & Koch SK G16 状态:支持,驱动程序名称:sk_g16 其驱动程序被包含在v1.1内核中,是PJD Weichmann和SWS Bern编写的。似乎SK G16与NI6510相似,都是基于LANCE芯片的第一版(7990)。再重复一次,似乎该 网卡无法使用通用的LANCE驱动程序。 4.34 SEEQ SEEQ 8005 状态:支持,驱动程序名称:seeq8005 驱动程序里只包含了很少的网卡信息,所以这里也没有多少相关信息。如果有问 题的话,最好发e-mail给源码中列出的驱动程序作者。 4.35 SMC (Standard Microsystems Corp.) 在许多年前wd8003和wd8013还是主流产品时,Western Digital的以太网部门就 被SMC收购了。在那之后,SMC继续制造基于8390的ISA网卡(Elite16、Ultra 、EtherEZ),并增加了几种PCI产品。 与SMC的联系方法: SMC / Standard Microsystems Corp., 80 Arkay Drive, Hauppage, New York, 11788, USA. Technical Support via phone: 800-992-4762 (USA) or 800-433-5345 (Canada) or 516-435-6250 (Other Countries). Literature requests: 800-SMC-4-YOU (USA) or 800-833-4-SMC (Canada) or 516-435-6255 (Other Countries). Technical Support via E-mail: techsupt@ccmail.west.smc.com. FTP Site: ftp.smc.com. WWW Site: [88]SMC. WD8003, SMC Elite 状态:支持,驱动程序名称:wd (+8390) 这些是网卡的8比特版本。8比特的8003比较便宜,但只在流量小的用途上是划算 的。注意,某些没有EEPROM的网卡(使用跳线的兼容卡,或非常非常古老 的wd8003网卡)无法报告它们使用的中断线。此时,如果使用auto-irq失败,驱 动程序就会静悄悄地分配IRQ 5。你可以从SMC的FTP站点获取设置/驱动程序磁盘 。注意,某些较新的SMC的“SuperDisk”程序检测不到那些确实古老的无EEPROM 的网卡。文件SMCDSK46.EXE看来是个相当全面的方法。前面提到的档案中的一 个ASCII文本文件里给出了所有这些网卡的跳线设置。最新(最好?)的版本可以 从ftp.smc.com得到。 这些基本上与它们的16比特对应网卡(WD8013 / SMC Elite16)是一样,所以可 以从下一节了解更多的信息。 WD8013, SMC Elite16 状态:支持,驱动程序名称:wd (+8390) 若干年后,SMC在设计中添加了更多的寄存器和一个EEPROM。(第一块wd8003网卡 已经面世十年了!)兼容卡一般使用的名称为“8013”,而且通常采用无EEPROM (用跳线)的设计。近期型号的SMC网卡使用SMC的83c690芯片,代替了早期网卡 上的原始Nat Semi的DP8390。共享内存设计使网卡的速度比PIO网卡快了一点,尤 其是对较大的数据包。更重要的是,从驱动程序的角度来看,避免了8390可编 程I/O模式的几个Bug,允许多个线程安全地访问数据包缓存,而且在热启动探测 时不会因为可编程I/O数据寄存器导致死机。 无EEPROM的网卡在无法读取选定的中断时会尝试auto-irq,如果失败的话,它会 静悄悄地分配IRQ 10。(8比特版本分配IRQ 5。) 板上内存大小不标准的网卡可以在启动时指定内存大小(如果使用模块的话,把 它作为/etc/conf.modules中的一个选项)。8比特网卡的标准内存大小为8kB ,16比特网卡为16kB。例如,老式的WD8003EBT网卡可以用跳线设置为32kB内存。 要完全使用这些RAM,需要如下操作(对I/O=0x280和IRQ 9): _________________________________________________________________ LILO: linux ether=9,0x280,0xd0000,0xd8000,eth0 _________________________________________________________________ 参见 [89]8013问题以了解某些常见问题。 如果你想把该驱动程序作为一个可载入的模块,应该阅读 [90]把以太网驱动程序 作为模块使用以了解有关模块的信息。 SMC Elite Ultra 状态:支持,驱动程序名称:smc-ultra (+8390) 该以太网卡是基于SMC的83c790芯片,比83c690多几个新特性。虽然有一种与老 式SMC以太网卡相似的模式,它无法与老的WD80*3驱动程序完全兼容。但在这种模 式下,它可以与其它8390驱动程序共享大部分代码,而且操作比WD8013兼容网卡 稍微快一点。 由于Ultra部分看起来象8013,所以Ultra探测应当在wd8013探测错误地识别一 个Ultra网卡之前找到它。 Donald提到可以为Ultra的“Altego”模式编写一个独立的驱动程序,该模式允许 把发送链接起来进行,其代价是接收缓存的利用效率会下降,但是也可能不下降 。 总线控制SCSI主机适配器的用户需要注意:在与Interactive UNIX一起发行的手 册里提到,SMC Ultra里的一个Bug会导致aha-154X主机适配器运行的SCSI磁盘数 据损坏。这可能影响aha-154X兼容卡,如BusLogic板和AMI-FastDisk SCSI主机适 配器。 SMC承认在Interactive和老式Windows NT驱动程序上会出现这个问题。它是早期 版本的网卡存在的硬件冲突,可以通过驱动程序的设计解决。目前的Ultra驱动程 序通过只在与网卡传递数据时才启用共享内存避免了这个问题。确定你的内核版 本至少是1.1.84以上,或者启动时报告的驱动程序版本至少 为smc-ultra.c:v1.12,否则就会出问题。 如果你想把该驱动程序作为一个可载入的模块,应该阅读 [91]把以太网驱动程序 作为模块使用以了解有关模块的信息。 SMC Elite Ultra32 EISA 状态:支持,驱动程序名称:smc-ultra32 (+8390) 这个EISA网卡与其相应的ISA网卡有很多共同点。在v2.0和v2.2内核里都包含了一 个可以使用(而且稳定)的驱动程序。感谢Leonard Zubkoff买了一些这样的网卡 ,使得Linux里能够增加对它们的支持。 SMC EtherEZ (8416) 状态:支持,驱动程序名称:smc-ultra (+8390) 该网卡使用SMC的83c795芯片并支持即插即用特性。它也有SMC Ultra兼容模式, 可以使用Linux的Ultra驱动程序。要得到最佳效果,请使用SMC提供的程序(通过 他们的FTP/WWW站点)禁用PnP,并把它配置为共享内存模式。参见上面有 关Ultra驱动程序的说明。 对于v1.2内核,该网卡必须被配置为共享内存模式。但v2.0内核可以在共享内存 或可编程I/O模式下使用该网卡。共享内存模式稍微快一点,而且对CPU资源的占 用少一些。 SMC EtherPower PCI (8432) 状态:支持,驱动程序名称:de4x5, tulip 先声明一点:EtherPower II是一款完全不同的网卡。往下看!这些网卡是基本 的DEC 21040产品,即一个大芯片和若干收发器。Donald在开发通用21040驱动程 序(又名tulip.c)时使用了一块这样的网卡。再一次感谢Duke Kamstra提供了开 发时所用的网卡。 某些近期版本的这种网卡使用较新的DEC 21041芯片,在使用早期版本的tulip驱 动程序时可能会有问题。如果遇到麻烦,请确定使用的是最新发布的驱动程序, 它可能还没有被包含在目前的内核源码树中。 参见 [92]DEC 21040以了解这些网卡的更多信息和当前驱动程序的状况。 很明显,EtherPower-II网卡的最新版本使用9432芯片。目前还不清楚它是否可以 使用现在的驱动程序。同样,如果无法确信的话,在购买网卡之前,先确定如果 不能使用Linux驱动程序就可以退货。 SMC EtherPower II PCI (9432) 状态:半支持,驱动程序名称:epic100 这些网卡是基于SMC 83c170芯片,与基于Tulip的网卡完全不同。在v2.0和v2.2内 核里包含支持它的新驱动程序。更多的细节请访问: http://www.scyld.com/linux/drivers/epic100.html SMC 1211TX 10/100 状态:半支持,驱动程序名称:rtl8139 显然SMC已经不再是如Ultra和EPIC那样提供网卡的同一家公司。芯片设计部分现 在叫做SMSC,而SMC的名称是与低端OEM板联系在一起的,就像这块板一样——带 一块修改过的EEPROM的RealTek 8139。 SMC 3008 状态:不支持。 这些8比特网卡是基于Fujitsu MB86950的,它是Linux at1700驱动程序所 用MB86965的古老版本。Russ说可以通过阅读at1700.c代码和他自己的Tiara网 卡DOS驱动程序包(tiara.asm)来编写它的驱动程序。这些网卡不是很常见。 SMC 3016 状态:不支持。 这些是16比特的I/O映射8390网卡,与通用NE2000网卡很相似。如果你能从SMC得 到说明资料,那么移植NE2000驱动程序将相当简单。这些网卡不是很常见。 SMC-9000 / SMC 91c92/4 状态:支持,驱动程序名称:smc9194 SMC9000是基于91c92芯片的VLB网卡。91c92也出现在若干其它品牌网卡上,但相 当少见。 SMC 91c100 状态:半支持,驱动程序名称:smc9194 据说SMC 91c92驱动程序支持该款基于100Base-T芯片的网卡,但目前还未得到证 实。 4.36 Texas Instruments ThunderLAN 状态:支持,驱动程序名称:tlan 该驱动程序覆盖了许多Compaq的内建以太网设备,包括NetFlex和Netelligent系 列。它还支持Olicom的2183、2185、2325和2326产品。 4.37 Thomas Conrad Thomas Conrad TC-5048 这是基于DEC的21040芯片的另一款PCI网卡。 参见有关21040芯片一节( [93]DEC 21040)以了解更多信息。 4.38 VIA 你可能没见过VIA网卡,但VIA制造的几种网络芯片被用在其它厂家的以太网卡上 。他们有一个WWW站点: http://www.via.com.tw/ VIA 86C926 Amazon 状态:支持,驱动程序名称:ne, ne2k-pci (+8390) 该控制器芯片是VIA提供的PCI-NE2000。你可以选择ISA/PCI驱动程序ne.c或者只 支持PCI的驱动程序 _________________________________________________________________ a:autoexec.bat,这样在用这张软盘启动时, 该程序会自动运行,把网卡设置为正常的缺省值。关闭机器,重新安装ne2000+网 卡,插入新的启动软盘,再开机。可能机器还会发出叫声,但最后你会看到机器 从软盘启动时软驱的灯亮了。等一两分钟,软驱会停下来,表示default.exe程序 运行结束,再关闭机器电源。再次启动时,可能你的显式器就又工作正常了,这 时就可以把CMOS设置改回去,并把网卡EEPROM设置改回到希望的值。 注意,如果手头没有DOS,你可以用一张自动运行Donald的atlantic程序(使用正 确的命令行开关)的Linux启动软盘来完成上面的工作,代替自动运 行default.exe程序的DOS启动软盘。 3Com网卡 3Com的Etherlink III系列网卡(如3c5x9)可以用Donald的另一个配置工具进行 配置。你可以从Donald的FTP服务器www.scyld.com上获取文 件/pub/linux/setup/3c5x9setup.c来配置这些网卡。(注意,DOS下的3c5x9B配 置工具可能有一些属于Etherlink III的新“B”系列的额外选项。) 6.2 以太网卡的诊断程序 Donald编写的诊断程序都可以从以下URL获取。 [99]Ethercard Diagnostics Allied Telesis AT1700——at1700.c Cabletron E21XX——e21.c HP PCLAN+——hp+.c Intel EtherExpress——eexpress.c PCI NE2000网卡——ne2k-pci-diag.c ISA NE2000网卡——ne2k.c RealTek (ATP)袖珍适配器——atp-diag.c 所有其它网卡——试著用cat /proc/net/dev和dmesg来看看内核里有关所说网卡 的有用信息。 7. 技术信息 对于那些想了解更多有关网卡如何工作、或如何使用现有驱动程序,以及试图为 目前不支持的网卡编写自己的驱动程序的人来说,这些信息应该会有用。如果你 没有这种想法,那么最好跳过这一节。 7.1 可编程I/O、共享内存与DMA 如果已经可以发送接收背靠背数据包,就无法把更多的数据放到网络上。每一个 现代以太网卡都可以接收背靠背数据包。Linux的DP8390驱动程序(wd80x3 、SMC-Ultra、3c503、ne2000,等等)非常接近于发送背靠背数据包(依赖于当 前的中断延迟),3c509和AT1500的硬件在自动发送背靠背数据包上没有一点问题 。 可编程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,等等。) 7.2 涉及总线带宽的性能 ISA总线能达到5.3MB/sec (42Mb/sec),听起来对10Mbps以太网是足够了。对 于100Mbps网卡,显然需要更快的总线以利用网络带宽。 8比特ISA网卡与16比特ISA网卡 你可能不会再买一个新的8比特ISA以太网卡了,但在随后几年间你会在计算机物 物交换市场一类的地方发现很多很便宜的这种卡。这使得它们在“家用以太网” 系统中很常见。对于16比特的ISA网卡来说也是一样的,因为现在PCI卡已经很普 遍了。 对于较低或平均的应用,一些可以提供足够性能的8比特网卡是wd8003、3c503 和ne1000。3c501的性能较差,而且要避免使用那些12年前XT时代的低性能纪念品 。(可以把它们送给Alan,他在收集这种网卡......) 8比特的数据通道不会对性能造成太大损害,你依然可以从一个较快主机上的8比 特wd8003网卡(使用快的ISA总线)上获得大约500到800kB/s的ftp下载速度。如 果你的所有网络流量几乎都是来自远端站点,那么数据通道上的瓶颈将发生在其 它地方,只有在进行本地子网操作时你才会注意到不同网卡间的速度差别。 7.3 32比特(VLB/EISA/PCI)以太网卡 注意,10Mbs网络通常并不一定要求32比特的接口。参见 [100]可编程I/O、共享 内存与DMA以了解为什么8MHz的ISA总线上的10Mbps以太网卡并非真正的瓶颈。尽 管使用快的总线的以太网卡并不一定带来更快的数据传输,但会减少CPU负载,这 对多用户系统来说是件好事。当然,对于现在普通的100Mbps网络,32比特接口是 充分使用全部带宽的必要条件。 7.4 编写驱动程序 在Linux下使用以太网卡所必需的只不过是相应的驱动程序。因此,关键是制造商 要向公众公开编程的技术资料,而无需你(或其他什么人)签署什么协议。关于 获取资料的可能性(也许你不编写代码,那么就是其他人编写你确实需要的驱动 程序的可能性),一个较好的指南是Crynwr (昵称Clarkson)的包驱动程序的可用 性。Russ Nelson在干这些事,对开发Linux驱动程序很有帮助。网上冲浪者可以 试著用下面的URL看一下Russ的软件。 [101]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。在2.4.x(或更新的)内核里已 经把它重新命名为isa-skeleton.c。也可以看看如下URL的Kernel Hackers Guide: [102]KHG 7.5 内核的驱动程序接口 下面对编写一个新驱动程序所必需的函数进行了若干说明。和上面提到的驱动程 序框架一起阅读可以更清楚一些。 Probe 在启动时调用以检查网卡存在与否。如果可以通过读取内存等非强制手段进行检 查最好。也可以从I/O端口读取。在探测开始向I/O端口写不好,因为这样可能会 损害另一个设备。通常在这里还进行一些设备初始化(分配I/O空间、IRQ、填 充dev->???域等等)。必须了解网卡可以配置到哪些I/O端口/内存、如何启用共 享内存(如果用了的话)以及如何选择/启用中断产生,等等。 Interrupt handler 在网卡发出一个中断时内核调用的程序。它需要确定网卡发出中断的原因并进行 相应的操作。一般的中断条件是接收到数据、发送完成、报告出错状况。需要了 解相关的中断状态位以进行相应的操作。 Transmit function 与dev->hard_start_xmit()链接,在内核想通过设备传送数据时调用它。该函数 把数据放入网卡并触发传送。需要了解如何把数据打包并传给网卡(共享内存拷 贝、PIO传送、DMA?),以及放入网卡正确的位置。然后需要了解如何通知网卡 把数据发送到线路上,(可能)在发送完成后发出一个中断。在硬件无法接收更 多数据包时需要设置dev->tbusy标志。在网卡有空间可用时,一般这发生在传送 完成中断过程中,清除dev->tbusy标志并用mark_bh(INET_BH)通知上一层。 Receive function 在网卡报告有数据时由内核中断处理程序调用。它把数据从网卡上移出,放入一 个sk_buff并通过执行netif_rx(sk_buff)告诉内核数据所在位置。需要了解如何 在接收数据时启用中断生成,如何检查相关的接收状态位,以及如何从网卡获取 数据(通过共享内存拷贝、PIO、DMA,等等)。 Open function 与dev->open链接,在有人使用ifconfig eth0 up时网络层调用它——把设备连到 线路上并启用来接收/发送数据。任何在探测过程中(启用IRQ生成函数等)没有 完成的特别的初始化操作都在这里进行。 Close function (可选) 在有人使用ifconfig eth0 down时使网卡进入一个清醒的状态。如果硬件许可的 话它会释放中断和DMA通道,并完全关闭以节约能源(象收发器一样)。 Miscellaneous functions 如同一个重新设置函数,如果事情变得很糟,驱动程序可以试图重新设置网卡作 为最后防线。一般在发送超时或类似情况下如此进行。也是一个读取网卡统计寄 存器的函数,如果是这样配备的话。 7.6 3Com的技术信息 如果对3Com网卡驱动程序的工作感兴趣,可以从3Com公司获取技术资料 。Cameron在下面友好地告诉了我们该如何去做: 在我们的“技术参考文献”(TRs)里给出了3Com的以太网适配器驱动程序程序员 需要了解的资料。这些手册描述了板上的程序员接口,但没有提及诊断、安装程 序等终端用户所看到的东西。 网络适配器分部的市场部有技术参考资料分发。为了使这个计划更有效,我们把 它集中到一个称作“CardFacts”的自动电话系统里。你可以打电话来,然后它把 资料传真给你。要索取技术参考资料,打电话到408-727-7021。索取开发人员的 订单,资料号是9070。在打电话前准备好你的传真号码。填完订单后把它传真 到408-764-5004。手册会由联邦速递的次日服务送到。 有人认为我们的手册不该免费,他们也在寻找此系统过于昂贵或占用的时间和努 力太多的证据。到目前为止,3Com的顾客确实不错,向我们提出的要求也很合理 。我们需要你们的继续合作并把这样的服务维持下去。 7.7 基于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。这是免费的。 要迅速了解一块网卡是否“标准”网卡只需要看一下。如果是标准的,网卡上只 有一块大的芯片、一块晶振、一块小的IEEE地址PROM、可能还有一个启动ROM的插 座和一个连接器(依照提供的媒介选项可能是1、2或3)。注意,如果是同轴电缆 网卡,卡上就应该有一些收发器缓存,它们靠近连接器,远离PCnet-ISA。” 一个可能的网卡黑客需要注意,不同的LANCE产品采用不同的“重起”方法。有些 恢复到上次离开网络环路的地方,另一些则从环路的开头开始,就象刚被初始化 一样。 7.8 广播与混杂模式 Donald所做的另一个工作是实现广播与混杂模式的钩子函数。所有发布的(即不 是ALPHA版本的)ISA驱动程序现在都支持混杂模式。 Donald写道:“我准备从讨论混杂模式开始,它从概念上来说很容易实现。对大 多数硬件,你只需要设置一个寄存器位,然后就可以接收到线路上的每一个数据 包。对,差不多就这么简单;对有些硬件,你必须先关闭板卡(可能会丢失若干 数据包),重新配置它,然后重新启用以太网卡。对吧,就这么简单,下面要讨 论的就不是这么明显了:广播模式。它可以用两种方式实现: 1. 使用混杂模式和一个如Berkeley包过滤器(BPF)的数据包过滤器。BPF是一 个模式匹配指令语言,可以编写一个程序挑出感兴趣的地址。它的优点在于 它很普遍和可编程。其缺点是没有一个一般性的方法可以让内核避免打开混 杂模式和通过每一个注册的包过滤器运行每一个线路上的数据包。参见 [103]Berkeley包过滤器以了解更多信息。 2. 使用绝大多数以太网芯片内建的广播包过滤器。 我想应该列出几个以太网卡/芯片提供的广播包过滤器: 芯片/网卡 混杂模式 广播包过滤器 ------------- ------------ --------------- Seeq8001/3c501 Yes Binary filter (1) 3Com/3c509 Yes Binary filter (1) 8390 Yes Autodin II six bit hash (2) (3) LANCE Yes Autodin II six bit hash (2) (3) i82586 Yes Hidden Autodin II six b it hash (2) (4) 1. 这些网卡声称有一个过滤器,但只是简单地对“accept all multicast packets”或“accept no multicast packets”回答yes/no。 2. AUTODIN II是标准的以太网CRC校验多项式。在这种方式下,广播地址被哈希 运算后在哈希表里进行查找。如果启用了相应的比特位,则数据包被接收。 以太网数据包的设计使得硬件在如此处理时的开销很小——(通常)只要在 前6个八进制数(目标地址)之后锁定CRC电路(用来进行错误检查)的6个比 特位,把它们作为哈希表的索引(6比特——一个64比特的表)。 3. 这些芯片使用6比特哈希,必须由主机计算并载入哈希表。这也就是说内核必 须包含CRC代码。 4. 82586内部使用6比特哈希,但是由自己从接受的广播地址列表计算出哈希表 。 注意,这些芯片的过滤效果都不好,还需要一个中间层次的模块完成最后的过滤 。同时还要注意,在每种情况下都必须保持一个完整的接受广播地址列表,在出 现变化时以重新计算哈希表。 7.9 Berkeley包过滤器(BPF) 开发者普遍认为BPF的功能不该由内核提供,而是放在一个(希望很少用到的)兼 容库里。 对不了解的人来说:BPF(Berkeley包过滤器)是一种向内核网络层说明对哪些数 据包感兴趣的机制。它是用一种建立在底层网络代码中的特殊指令语言解释器实 现的。应用程序把一个用这种语言编写的程序传递给内核,然后内核对每一个接 收到的数据包执行该程序。如果内核有多个BPF应用程序,对每个数据包都要运行 这个程序。 问题在于很难从数据包过滤器程序推断出应用程序实际上对哪一种数据包感兴趣 ,所以一般的解决方法就是始终运行过滤器。假设一个应用程序注册的BPF程序是 获取发往某个广播地址的低速数据流。绝大多数以太网卡有一个64个入口的哈希 表的硬件实现的广播地址过滤器,用来忽略大多数不想要的广播数据包,所以有 可能以极低的开销完成这一操作。但是由于有了BPF,内核必须把接口设置为混杂 模式,接收所有数据包,并对它们运行过滤器。不管怎样,这样确实可以工作, 但考虑到对所要求的数据包进行的处理,就已经变得过于麻烦了。 8. 便携式/笔记本电脑联网 有几种方法把笔记本电脑联上网。可以使用SLIP代码(并以串行线速率运行); 可以使用一个有内建支持PCMCIA插槽的笔记本电脑;可以使用一个有插座并插入 了一块ISA网卡的笔记本电脑;或者使用并口以太网适配器。 8.1 使用SLIP 这是最便宜的解决方案,但最麻烦。另外,无法获得很高的传输速率。因为SLIP 实际上与以太网卡无关,这里就不多说了。参见NET-2 Howto。 8.2 PCMCIA支持 设法完全确定硬件的情况(即网卡制造商、PCMCIA芯片控制器的制造商),然后 在笔记本电脑讨论组里询问。不管怎样,不要把事情想得这么简单。预料会花费 一些时间、给内核打补丁等。可能有一天只需要键入“make config”。8-) 目前所支持的两个PCMCIA芯片组是Databook的TCIC/2和Intel的i82365。 在tsx-11.mit.edu的/pub/linux/packages/laptops/下有一些程序可能会有用。 它们包括从PCMCIA以太网卡驱动程序到与PCMCIA控制器芯片进行通信的程序。注 意,这些程序一般与某个特定的PCMCIA芯片(即intel 82365或TCIC/2)相关。 对于NE2000兼容卡,有人通过在DOS下配置网卡,然后在DOS命令提示符下执 行loadlin启动Linux,成功地实现了对PCMCIA的支持。 目前一直在获得实质性的进展,对于希望PCMCIA支持的Linux用户,情况正在好转 。这一努力的先驱是David Hinds。他的最新PCMCIA支持软件包可以从下面得到: [104]PCMCIA Package 寻找一个类似pcmcia-cs-X.Y.Z.tgz的文件,其中X.Y.Z是最近的版本号。很有可 能它也被上载到了FTP站点tsx-11.mit.edu。 注意,Donald的PCMCIA启用程序是一个用户级的程序,而David Hinds的程序是运 行在内核级。最好使用David的软件包,因为它的使用很广泛,并在持续开发过程 中。 8.3 对接座内的ISA以太网卡。 笔记本电脑的对接座一般要花$250,提供两个全尺寸的ISA插槽、两个串口和一个 并口。大多数对接座使用笔记本电脑的电池供电,如果使用短的ISA卡,有若干对 接座可以使用对接座里附加的额外电池供电。你可以加一个便宜的以太网卡,并 享受全速的以太网性能。 8.4 袖珍/并口适配器。 “袖珍”以太网适配器也可以满足需要。注意,由于并口的接口限制,传输速率 不够好(可能最高是200kB/s?)。 还有一个约束是墙砖一样的电源。你可以购买/制作一个从笔记本电脑的键盘端口 引出电源的电缆,摆脱与适配器连在一起的墙砖。(参见 [105]键盘电源) 参见 [106]DE-600 / DE-620和 [107]RealTek以了解支持的两款袖珍适配器。 9. 杂项 所有不适合放在别处的相关信息都堆在这里。可能不相干,也可能大家不感兴趣 ,但还是放在这儿了。 9.1 向内核传递以太网参数 有两个通用的内核命令可以在启动时向内核传递以太网参数(ether 和reserve) 。可以用LILO、loadlin或其它接受可选参数的启动工具完成该操作。 例如,如果命令为“blah”,希望接收3个参数(假定为123、456和789),那么 在使用LILO时就应该如下: LILO: linux blah=123,456,789 要了解启动时参数的更多信息(和完全的列表),请参见 [108]BootPrompt-HOWTO ether命令 ether=参数与直接构建在内核的驱动程序一起使用。ether=参数对一个模块化的 驱动程序完全不起作用。它的最通用形式如下: ether=IRQ,BASE_ADDR,PARAM_1,PARAM_2,NAME 所有的参数都是可选的。第一个非数字的参数被用做NAME。 IRQ: 很明显。为“0”的IRQ值(一般为缺省值)意味著autoIRQ。首先设置IRQ而 不是base_addr是一个历史性的巧合——无论在改变别的什么时都可以顺便改正这 一点。 BASE_ADDR: 也很明显。值为“0”(一般为缺省值)意味著探测以太网卡的网卡 类型特定的地址列表。 PARAM_1: 这开始是用来覆盖WD80*3这样的共享内存网卡的起始内存的值。有些驱 动程序使用该值的低4位来设置诊断信息级别。0——缺省值,1-7——级别1..7, (7是最完全的信息)8——级别0(没有信息)。另外,LANCE驱动程序使用该值 的低4位来选择DMA通道。否则就使用auto-DMA。 PARAM_2: 3c503驱动程序使用它来选择内部还是外部收发器。0——缺省/内部 ,1——外部AUI。Cabletron的E21XX网卡还使用PARAM_2的低4位来选择输出媒介 。否则就自动检测。 NAME: 选择该值所指的网络设备。标准内核对附属于总线的以太网卡使用名称 “eth0”、“eth1”、“eth2”和“eth3”,对并口“袖珍”以太网适配器使用 “atp0”。arcnet驱动程序使用名称“arc0”。可以使用这些LILO参数明确设置 基址来启用多块网卡。1.0内核把基于LANCE的以太网卡作为特殊情况进行处理 :LILO参数被忽略,LANCE网卡总是被分配为从“eth0”开始的名称“eth”。 附加的非LANCE网卡必须被明确指定为“eth”,并用诸如 “ether=0,-1,eth0”的方式禁止通常的“eth0”探测。(对,这是个Bug。) reserve命令 这个紧接著的LILO命令用法与上面的“ether=”一样,即附加在lilo.conf里指定 的启动选择名称后面。 reserve=IO-base,extent{,IO-base,extent...} 在某些机器上,可能需要防止设备驱动程序在某个特定区域里检查设备(自动探 测)。其原因可能是由于设计低劣的硬件使启动冻结(如某些以太网卡)、被错 误识别的硬件、在较早的探测中状态被改变的硬件、或者仅仅是不想让内核初始 化硬件。 启动时的参数reserve通过指定无需探测的I/O端口区域来解决这个问题。该区域 保留在内核的端口注册表里,就象该区域里已经发现了一个设备一样。注意,这 一机制在大多数机器上是不必要的。只有在有问题或特定的情况下才有必要使用 它。 指定区域里的I/O端口受到保护,不被设备探测影响。在某些驱动程序被NE2000挂 起,或其它设备被错误地识别为NE2000时使用这一方法。正确的设备驱动程序不 该探测一个保留区域,除非另一个启动参数明确指定它这么做。这隐含 了reserve经常与其它启动参数一起使用。因此,如果指定了一个reserve区域来 保护某个特定设备,通常就必须明确指定对该设备的探测。大多数驱动程序在给 定了明确地址后就忽略了端口注册表。 例如,启动行 LILO: linux reserve=0x300,32 ether=0,0x300,eth0 使以太网卡驱动程序以外的所有设备驱动程序都不探测0x300-0x31f。 一般启动时的参数限制是11个,因此每个reserve关键词只能指定5个保留区域。 如果请求很复杂,可以使用多个reserve指令。 9.2 把以太网驱动程序作为模块使用 现在大多数Linux发行版里的内核都只包含很少几个内建的驱动程序。驱动程序都 采用独立的动态可加载模块的形式提供。这些模块化驱动程序通常由管理员使 用modprobe(8)命令载入,或者在某些情况下由内核通过“kerneld”(在2.0版) 或“kmod”(在2.1版)自动载入,然后调用modprobe。 你所用的发行版可能会提供良好的图形配置工具来设置以太网模块。如果可能就 先使用它们。下面描述了在这些花俏的配置程序下的信息,以及这些程序改变了 哪些东西。 控制使用哪些模块和每个模块提供哪些选项的信息一般保存在文 件/etc/conf.modules里。在这个文件里使用的两个感兴趣的主要选项(对以太网 卡而言)是alias和options。modprobe命令查阅该文件以了解模块信息。 实际的模块本身一般保存在名为/lib/modules/`uname -r`/net的目录下,其 中uname -r命令给出内核的版本(如2.0.34)。你可以在这里看看哪一个模块与 你的网卡匹配。 在你的conf.modules文件里首先需要的是告诉modprobe对于eth0(和eth1以 及......)网络接口使用什么驱动程序。为此要使用 _________________________________________________________________ alias _________________________________________________________________ 命令。例如,有一块使用smc-ultra.o驱动程序模块的ISA SMC EtherEZ网卡,需 要增加如下一行把该驱动程序alias到eth0上: alias eth0 smc-ultra 其次,可能需要一个options行来指出与某个特定模块(或模块别名)一起使用哪 些选项。还采用上面那个例子,如果只有一行alias而没有options行,内核会警 告(参见dmesg)说自动探测ISA网卡不好。要消除这个警告,需要增加另一行来 告诉模块网卡被配置在哪个I/O基址上,比方说是16进制地址0x280。 options smc-ultra io=0x280 大多数ISA模块在insmod命令行接受io=0x340和irq=12这样的参数。提供这些参数 以避免探测该网卡是必须的或至少是强烈建议的。与PCI和EISA设备不同,对大多 数ISA设备而言没有真正安全的自动探测方法,所以在把驱动程序作为模块使用时 应当避免自动探测。 每个模块所接受的所有选项列表可以在以下文件中找到: /usr/src/linux/Documentation/networking/net-modules.txt 推荐阅读该文件以了解对你的特定网卡可以使用哪些选项。注意,对于单个模块 能够处理多个设备的模块,有些支持用逗号分开的值列表,如所有基于8390的驱 动程序和PLIP驱动程序。例如: _________________________________________________________________ options 3c503 io=0x280,0x300,0x330,0x350 xcvr=0,1,0,1 _________________________________________________________________ 上面就是一个模块控制四块3c503网卡,其中网卡2和4使用外部收发器。不要在 “=”或逗号周围使用空格。 还要注意,一个忙的模块不能被删除。这也就是说在删除模块前需要使 用ifconfig eth0 down(关闭以太网卡)。 命令lsmod可以显示哪些模块被载入、它们是否正在被使用,而rmmod可以删除这 些模块。 9.3 相关文档 本文档的很多信息来自comp.os.linux新闻组保存的帖子,这表明该新闻组是一个 有价值的信息源。其它的有用信息来自Donald自己的一大堆小文件。当然,如果 你正在设置一块以太网卡,你还要读一下NET-2 Howto才能真正配置好你要用的软 件。另外,如果你想做个黑客,你总能从驱动程序的源码里找到些有用的信息。 在开始实际代码之前,总有一到两段描述关键点的文字。 对于那些寻找不是Linux特有信息(如什么是10BaseT、什么是AUI、Hub是干什么 的等等)的人,我强烈推荐使用新闻组comp.dcom.lans.ethernet 或comp.sys.ibm.pc.hardware.networking。那些在dejanews.com上的新闻组档案 也是很有价值的信息源。你可以从以下URL的RTFM(保存所有新闻组的FAQ)获取 新闻组的FAQ: [109]Usenet FAQs 你还可以在以下URL看一下可以说是“Ethernet-HomePage”的主页: [110]Ethernet-HomePage 9.4 声明与版权 本文档不是福音书。它可能是你所找到的最新的资料。除了你自己,没人会对你 的硬件出现的问题负责。如果你的以太网卡或其它的硬件冒烟的话(几乎不可能 !),我们也不承担任何责任。也就是说,本文作者不对任何使用本文信息采取 行动造成的损失负责。 Copyright (c) 1993-1999 本文的版权所有人为Paul Gortmaker。在保留版权信 息和本许可内容的条件下,本文档允许任意复制和传播。 在保留原始版权信息的条件下,允许复制和传播本文档修改后的版本;在本许可 内容不变的条件下,允许传播所有依据本文档推导出的结果。 在上述针对修改版本的条件下,允许复制和传播本文档的其它语言翻译版本。 对翻译者的提示。首先,翻译SGML源文件(可以用FTP从HowTo主站点获得),这 样可以生成其它的输出格式。请注意保留一份翻译的原始英文SGML源文件!在发 布更新后的HowTo时,获取该版本的新SGML源文件,简单地使用diff -u old.sgml new.sgml就可以知道何处有变动,并把这些变动放入你的翻译版本,无 需重新阅读或重新翻译全部内容。 如果你想在公开出版物中使用本文档,请联系本文作者(通过e-mail),这样可 以获得最新的资料。以前有些Linux HowTo的过时版本被公开出版,使得开发者为 一些在更新版本中已经回答过的问题饱受折磨。 This document is not gospel. However, it is probably the most up to date info that you will be able to find. Nobody is responsible for what happens to your hardware but yourself. If your ethercard or any other hardware goes up in smoke (...nearly impossible!) we take no responsibility. ie. THE AUTHORS ARE NOT RESPONSIBLE FOR ANY DAMAGES INCURRED DUE TO ACTIONS TAKEN BASED ON THE INFORMATION INCLUDED IN THIS DOCUMENT. This document is Copyright (c) 1993-1999 by Paul Gortmaker. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this document under the conditions for verbatim copying, provided that this copyright notice is included exactly as in the original, and that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this document into another language, under the above conditions for modified versions. A hint to people considering doing a translation. First, translate the SGML source (available via FTP from the HowTo main site) so that you can then generate other output formats. Be sure to keep a copy of the original English SGML source that you translated from! When an updated HowTo is released, get the new SGML source for that version, and then a simple diff -u old.sgml new.sgml will show you exactly what has changed so that you can easily incorporate those changes into your translated SMGL source without having to re-read or re-translate everything. If you are intending to incorporate this document into a published work, please make contact (via e-mail) so that you can be supplied with the most up to date information available. In the past, out of date versions of the Linux HowTo documents have been published, which caused the developers undue grief from being plagued with questions that were already answered in the up to date versions. 9.5 结束语 如果你在本文档中发现有错别字或过时信息,请给我发e-mail。本文档比较大, 所以很容易出现疏漏。如果你曾发e-mail要求改正,而在新版本中依然没改过来 ,请把改正要求再发一遍,可能你的上一封e-mail被我平时收到的大量垃圾信件 掩盖了。 谢谢! Paul Gortmaker, p_gortmaker@yahoo.com (戈绍男,isaac_ge@yahoo.com) References 1. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#copyright 2. http://metalab.unc.edu/mdw/HOWTO/Ethernet-HOWTO.html 3. ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/ 4. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#help 5. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#faq 6. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#what-card 7. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#card-intro 8. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#tech-intro 9. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#mystery 10. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#card-intro 11. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#modules 12. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#faq 13. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#cable 14. http://www.dejanews.com/ 15. http://cesdis.gsfc.nasa.gov/linux/ 16. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#lilo 17. http://www.roestock.demon.co.uk/isapnptools/ 18. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#lilo 19. http://www.efficient.com/ 20. http://www.zeitnet.com/ 21. http://lrcwww.epfl.ch/linux-atm/ 22. http://www.geog.ubc.ca/sparc 23. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#utp 24. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#3com-tech 25. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#3com-probs 26. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#modules 27. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#alfa 28. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#alfa 29. http://www.scyld.com/linux/drivers/vortex.html 30. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#pcmcia 31. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#pcmcia 32. http://www.scyld.com/linux/drivers/vortex.html 33. http://www.scyld.com/network 34. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#lance 35. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#amd-notes 36. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#lance 37. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#amd-notes 38. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#rtl8139 39. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#at-1500 40. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#ne1500 41. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#ether 42. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#amd-notes 43. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#alfa 44. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#modules 45. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#lance 46. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#amd-notes 47. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#ether 48. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#modules 49. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#lance 50. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#dec-21040 51. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#lance 52. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#tlan 53. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#dec-21040 54. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#lance 55. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#amd-notes 56. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#dec-21040 57. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#pcmcia 58. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#rhine 59. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#rtl8139 60. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#lance 61. http://www.scyld.com/network 62. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#modules 63. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#modules 64. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#amd-notes 65. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#lance 66. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#amd-notes 67. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#z-note 68. http://peipa.essex.ac.uk/html/linux-thinkpad.html 69. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#pcmcia 70. http://www.ultranet.com/~stalba/eep10pci.html 71. http://www.scyld.com/network 72. http://www.kingston.com/ 73. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#de-620 74. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#de-650 75. http://www.mylex.com/ 76. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#dec-21040 77. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#ne2k-probs 78. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#diag 79. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#modules 80. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#lance 81. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#amd-notes 82. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#lance 83. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#dec-21040 84. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#alfa 85. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#alfa 86. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#ne2k-pci 87. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#3c501 88. http://www.smc.com/ 89. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#8013-probs 90. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#modules 91. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#modules 92. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#dec-21040 93. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#dec-21040 94. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#smc 95. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#dec-21040 96. http://www.slug.org.au/NIC/ 97. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#cable-intro 98. http://www.kingston.com/download/etherx/etherx.htm 99. http://www.scyld.com/network 100. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#data-xfer 101. http://www.crynwr.com/ 102. http://www.redhat.com:8080/HyperNews/get/khg.html 103. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#bpf 104. ftp://cb-iris.stanford.edu/pub/pcmcia 105. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#aep-100 106. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#de-600 107. file://localhost/tmp/zh-sgmltools.16960/Ethernet-HOWTO.txt.html#aep-100 108. http://metalab.unc.edu/mdw/HOWTO/BootPrompt-HOWTO.html 109. ftp://rtfm.mit.edu/pub/usenet-by-hierarchy/ 110. http://wwwhost.ots.utexas.edu/ethernet/ethernet-home.html