Linux以太网-HOWTO by Paul Gortmaker v2.7, 5 May 1999 _________________________________________________________________ 本文为以太网-HOWTO,汇集了哪些以太网装置可以用在Linux上,以及如何 进行 设置的信息。请注意本文侧重于以太网卡的硬件与底层驱动方面的内 容,并未涵 盖诸如ifconfig和route等软件方面的问题。对于那 些问题,请参 阅Network-HOWTO。 _________________________________________________________________ 1. 导言 * 1.1 本文档的新版本 * 1.2 以太网-HOWTO的用法 * 1.3 帮帮我 - 网卡没反应! 2. 该为Linux买什么网卡? * 2.1 哪些驱动程序是稳定的? * 2.2 8比特卡与16比特网卡 * 2.3 32比特(VLB/EISA/PCI)以太网卡 * 2.4 可用的100Mbs网卡及其驱动程序 * 2.5 100VG与100BaseT * 2.6 网卡应当支持的线缆类型 3. 常见问题 * 3.1 Alpha驱动程序——获取与使用 * 3.2 一台机器使用多个以太网卡 * 3.3 这个以太东东不干活。为什么? * 3.4 NE1000/NE2000网卡(及其兼容卡)的问题 * 3.5 SMC Ultra/EtherEZ和WD80*3网卡的问题 * 3.6 3Com网卡的问题 * 3.7 非特定网卡的FAQs 4. 性能小技巧 * 4.1 一般概念 * 4.2 ISA网卡和ISA总线速度 * 4.3 设置TCP的Rx窗口 * 4.4 增强NFS性能 5. 有关销售商/制造厂家/型号的信息 * 5.1 3Com * 5.2 Accton * 5.3 Allied Telesyn/Telesis * 5.4 AMD / Advanced Micro Devices * 5.5 Ansel Communications * 5.6 Apricot * 5.7 Arcnet * 5.8 AT&T * 5.9 Boca Research * 5.10 Cabletron * 5.11 Cogent * 5.12 Compaq * 5.13 Danpex * 5.14 D-Link * 5.15 DFI * 5.16 Digital / DEC * 5.17 Farallon * 5.18 Fujitsu * 5.19 Hewlett Packard * 5.20 IBM / International Business Machines * 5.21 ICL Ethernet Cards * 5.22 Intel Ethernet Cards * 5.23 Kingston * 5.24 LinkSys * 5.25 Microdyne * 5.26 Mylex * 5.27 Novell Ethernet, NExxxx及其相关兼容卡。 * 5.28 Proteon * 5.29 Pure Data * 5.30 Racal-Interlan * 5.31 RealTek * 5.32 Sager * 5.33 Schneider & Koch * 5.34 SEEQ * 5.35 SMC (Standard Microsystems Corp.) * 5.36 Texas Instruments * 5.37 Thomas Conrad * 5.38 VIA * 5.39 Western Digital * 5.40 Winbond * 5.41 Xircom * 5.42 Zenith * 5.43 Znyx * 5.44 识别未知网卡 * 5.45 非以太网设备的驱动程序 6. 电缆、同轴电缆、双绞线 * 6.1 细缆以太网(thinnet) * 6.2 双绞线 * 6.3 粗缆以太网 7. 软件设置与网卡诊断 * 7.1 以太网卡的配置程序 * 7.2 以太网卡的诊断程序 8. 技术信息 * 8.1 可编程I/O、共享内存与DMA * 8.2 编写驱动程序 * 8.3 内核的驱动程序接口 * 8.4 3Com的技术信息 * 8.5 基于AMD PCnet/LANCE的网卡的注意事项 * 8.6 广播与混杂模式 * 8.7 Berkeley包过滤器(BPF) 9. 便携式/笔记本电脑联网 * 9.1 使用SLIP * 9.2 PCMCIA支持 * 9.3 插座内的ISA以太网卡。 * 9.4 袖珍/并口适配器。 10. 杂项 * 10.1 向内核传递以太网参数 * 10.2 把以太网驱动程序作为模块使用 * 10.3 相关文档 * 10.4 声明与版权 * 10.5 结束语 _________________________________________________________________ 1. 导言 以太网-HOWTO包括了该买什么网卡与不该买什么网卡;如何设置网卡,怎 样运行 多个网卡,以及其它常见错误和问题。它包含了目前所有最常见网 卡能够得到支 持的细节资料。 它不包含有关软件方面的内容,因为NET-3 Howto中包含了这些内容。 还要注意 这里不包括(或者至少不应当包括)那些非Linux特有的有关以太 网的一般问题 的解答。对于那些问题,可以参考comp.dcom.lans.ethernet 的FAQ中的大量资料 ,与所有其它新闻组FAQs一样通过FTP到rtfm.mit.edu 获取。 本修订版覆盖了Linux 2.2.7及其之前的内核发行版本。 以太网-HOWTO的作者为: Paul Gortmaker, p_gortmaker@yahoo.com 原始的ASCII版本的以太网-HOWTO的主要资料来源为: Donald J. Becker, becker@cesdis.gsfc.nasa.gov 感谢他编写了Linux目前使用的绝大多数以太网卡驱动程序。他也是最初的 NFS服 务器的作者。谢谢Donald! Copyright (c) 1993-1999 本文的版权所有人为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大拿”立即指 出你的问 题所在。 2. 该为Linux买什么网卡? 这个问题的答案很大程度取决于你希望用网络连接干些什么,以及会遇到 多大的 数据流量。 如果你只想作为一个用户偶尔使用一下FTP或WWW,那么即使是8比特的老ISA 网卡 都能满足你的需要。 如果你想建立一个服务器,并要求接收或发送网络数据给CPU带来的负载最 小, 那么你可能需要看一下使用具有总线控制能力的芯片的PCI网卡,比如 DEC tulip (21xxx)芯片,或者AMD PCnet-PCI芯片。 如果你的需求在这二者之间,那么使用有稳定的驱动程序的便宜的PCI网卡 或16 比特的ISA网卡就可以了。 2.1 哪些驱动程序是稳定的? 对于16比特的ISA网卡,下面的驱动程序非常成熟,如果你买的网卡使用这 些驱 动程序,那么你应该不会遇到任何问题。 SMC-Ultra/EtherEZ, SMC-Elite (WD80x3), 3c509, Lance, NE2000. 这并不是说所有其它的驱动程序都不稳定,而是因为这些是Linux驱动程序 中最 老最常用的,也是最安全的选择。 注意:某些蹩脚的主板在ISA Lance网卡进行总线控制时会出问题,某些蹩 脚 的NE2000系列网卡在启动检测时会引起麻烦。 最常用的Linux PCI驱动程序大概是3Com Vortex/Boomerang (3c59x/3c9xx)、 DEC tulip (21xxx)和Intel EtherExpressPro 100。各种PCI-NE2000系列 网卡也 很普遍,但不推荐购买这类网卡,除非你认为价格低廉比拥有现代 高性能设计的 网卡更重要。 2.2 8比特卡与16比特网卡 你可能不会再买一个新的8比特ISA以太网卡了,但在几年之内你会发现计 算机物 物交换市场一类的地方有很多很便宜的这种卡。这使得它们在“家 用以太网”系 统中很常见。对于16比特的ISA网卡来说也是一样的,因为现 在PCI卡已经很普遍 了。 对于较低的或平均的应用,一些可以提供足够性能的8比特网卡是wd8003、 3c503和ne1000。3c501的性能较差,而且要避免使用那些12年前的XT时代 的低性 能纪念品。(可以把它们送给Alan,他在收集......) 8比特的数据通道不会对性能造成太大损害,你依然可以从一个快的主机上 的8比 特wd8003网卡(使用快的ISA总线)获得大约500到800kB/s的ftp下载 速度。如果 你的所有网络流量几乎都是来自远端站点,那么数据通道上的 瓶颈将发生在其它 地方,只有在进行本地子网操作时你才会注意到不同网 卡间的速度差别。 2.3 32比特(VLB/EISA/PCI)以太网卡 注意,10Mbs网络并不一定要求32比特的接口。参考 [13]可编程I/O、共享内存 与DMA以了解为什么 8MHz的ISA总线上10Mbps的以太网卡并非真正的瓶颈。尽管使 用快的总线的 以太网卡并不一定带来更快的数据传输,但会减少CPU负载,这对 多用户系 统来说是件好事。 当然,对于现在普通的100Mbps网络,32比特接口是充分使用所有带宽的必 要条 件。AMD有32比特的PCnet-VLB和PCnet-PCI芯片。参考 [14]AMD PCnet-32以了 解LANCE/PCnet-ISA芯片 的32比特版本的有关信息。 有能力的用户也可以选择DEC的21xxx PCI“tulip”芯片(参考 [15]DEC 21040) 。许多制造厂家生产使用这种 芯片的网卡,这样的无名网卡的价格一般也相当便 宜。 3Com的“Vortex”和“Boomerang”PCI网卡也可以选择使用,如果你善于 砍价的 话,其价格也是相当便宜的。(参考 [16]3c590/3c595) Intel的EtherExpress Pro 10/100 PCI网卡据说在Linux上也运行得很好。 (参 考 [17]EtherExpress) 许多兼容卡的制造厂家开始制造基于RealTek或Winbond芯片的PCI NE2000 兼容卡 。据说v2.0.31及更新版本内核Linux的ne2000驱动程序也支持这些 网卡。但你只 从更快的总线接口中获益,因为这种网卡依然使用老式的 ne2000驱动程序接口。 由于在v2.0.34(及更新版本)中也为这些网卡提供 了独立的PCI专用驱动程 序ne2k-pci.c,其效果要比ISA的ne.c 驱动程序有显著提高。 2.4 可用的100Mbs网卡及其驱动程序 目前支持的100Mbs硬件如下:使用DEC的21140芯片的网卡;3c595/3c90x Vortex 网卡;EtherExpressPro10/100B;PCnet-FAST;SMC的83c170 (epic100)和HP 的100VG ANY-LAN。 看一下本文档里有关每一种产品的销售商的相关信息。也可以访问以下网址: [18]Linux and 100Mbs Ethernet [19]Donald's 100VG Page [20]Dan Kegel's Fast Ethernet Page 2.5 100VG与100BaseT 100BaseT远比100VG有名,下面的简介出自Donald的comp.os.linux上 的信件,它 很好地总结了这一情况: “对于不了解的人来说,有两种竞争的100Mbs以太网标准:100VG(所谓的 100baseVG和100VG-AnyLAN)和100baseT(线缆类型分为100baseTx、 100baseT4 和100baseFx)。 100VG先出现在市场上,而且我觉得它的设计要比100baseTx强。我曾经认 为它会 胜出,但明显它不会获胜了。HP等公司犯了几个错误: 1) 推迟发布标准以适应IBM并支持令牌环帧。这“在当时看起来是个好主 意”, 因为它可以使令牌环用户升级,而管理者不用承认自己犯了一个代 价高昂的错误 :使用错误的技术。但这没有带来任何好处,因为两种帧的 类型无法在一个网络 里共存,令牌环错综复杂,IBM则转而支持100baseT。 2) 只生产ISA和EISA网卡。(仅在不久前才宣布了一个PCI型号。)ISA总 线对 于100mbs来说太慢了,而EISA机器几乎不存在了。那时VLB已是使用 PCI的普通、 快速和廉价的选择,但“老经验”则认为服务器还会继续使用 更昂贵的EISA总线 。 3) 没有送给我一本数据手册。没错,这才是100VGs没落的真正原因 :-)。 我到 处打电话索要编程资料,只拿到几页AT&T的描述Regatta芯片组如 何神奇的彩色 宣传手册。” 2.6 网卡应当支持的线缆类型 如果你要建立一个小的“个人”网络,那么可能你想使用细缆以太网。这 是使用 标准BNC连接器的典型情况。使用BNC(金属的推进和旋转锁定)连 接器的细缆以 太网(RG-58同轴电缆)从技术上来说叫做10Base2。 大多数以太网卡都有价格高$10-$20的“Combo”版本。它们同时提供双绞 线和细 缆以太网收发器,可以让你以后改变主意。 使用RJ-45(大的电话插头)连接器的双绞线从技术上来说叫做10BaseT。 你可能 听到过它被称为UTP(无屏蔽双绞线)。 只会在早期的装置上发现的老式粗缆以太网(10mm同轴电缆)被称为 10Base5。 在某些以太网卡上使用的15针D形插座是用来连接粗缆以太网和 外部收发器的。 大的社区装置大多使用10BaseT,而不是10Base2。因为10Base2无法升级为 100Base之类的网络。 参考 [21]电缆、同轴电缆......以了解有关以太网 线缆不同类型的情况。 3. 常见问题 这里是一些有关使用Linux进行以太网连接的常见问题。某些特定问题按照 制造 商进行分类。可能你想问的问题别人已经问过(而且被回答了!), 所以即使没 有在这里找到你的答案,还可能在诸如 [22]Dejanews之类的新闻档案 中找到你 所要的。 3.1 Alpha驱动程序——获取与使用 我听说我的网卡有一个更新的或初步的/alpha驱动程序。从哪儿得到它呢? 最新的“新”驱动程序可以在Donald的FTP站点: cesdis.gsfc.nasa.gov里面 的/pub/linux/下找到。因为事 情变化很频繁,可能需要四处找一找。或者使 用WWW浏览器去: [23]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/实 验性驱动程序。 3.2 一台机器使用多个以太网卡 做些什么才能让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。 请参看 [24]传递以太网参数......以了解全部的句法、 网卡特定参数和LILO使用技巧。 这些启动参数可以固定,这样就不用每次都必须重新敲一遍。参看LILO手 册中有 关LILO的配置选项“append”。 第二种方法(不建议使用)是编辑文件Space.c并用零替换I/O地址中 的0xffe0入 口。0xffe0入口是用来告诉内核不要检测该设备 -- 把它替换为零就启动了对该 设备的自动检测。 注意,如果想用Linux作为两个网络间的路由,你需要启动IP转发并重新编 译内 核。一般在一台老式的AT/286上运行“kbridge”一类的软件就相当不 错了。 如果你是一边在网络冲浪,一边看本文档,最好去阅读Donald的WWW 站点上 的mini-howto。看一下 [25]Multiple Ethercards. 3.3 这个以太东东不干活。为什么? 如上所述,ether=命令只对编译进了内核的驱动程序起作用。 现在大多数的发行 版本都用模块的方式使用驱动程序,所以很少再使用 ether=命令了。(某些早期 文档需要更新以反映这一变化。)如果你 想使用模块化的以太网驱动程序的选项 ,必须修改 /etc/conf.modules文件。 如果你是使用编译的驱动程序,而且已经把ether=加进了LILO 配置文件,需要重 新运行lilo使更新后的配置文件生效。 3.4 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),使你的网卡可用。 Probem: 没检测到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看看它 是否已经 安装在你的系统上了。如果没有,浏览一下下面的连接: [26]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地址改为0x340一类的地址。此外,你可以在和 “ether=” 参数一起使用“reserve=”启动参数,保护网卡不受其它设备驱动程 序检 测的影响。 原因: 你的NE2000兼容网卡兼容性不好。一个激活的NE2000是个无底洞,会使其 它的驱动程序陷在其空间内进行自动检测。把NE2000改到一个不常用的地 址就可 以从其它的自动检测中消除这一陷阱,机器也就可以启动了。 问题: 机器启动时在进行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以上了。 3.5 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模块就行了。 3.6 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 值的那一行就行了。 3.7 非特定网卡的FAQs 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地址。 启动时没有检测到以太网卡。 出现这个问题的常见原因是人们使用的内核不支持特定的网卡。对于模块 化的内 核,这一般说明要求的模块尚未被载入,或者需要用模块选项指定 其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= 命令提供(对内建 驱动程序),参见 [27]传递以太网参数...。模块化的驱动程序可以在 /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板( [28]Efficient Networks)和Zeitnet的ZN1221板 ( [29]Zeitnet)。 Werner说ENI155p的驱动程序已经很稳定了,而ZN1221的驱动程序还没有完 成。 去下面的连接查看一下最新的进展: [30]Linux ATM Support 吉比特以太网支持 Linux支持吉比特以太网吗? 是的,目前至少已经有了两个驱动程序。在v2.0和v2.2内核里有一个Packet Engines G-NIC PCI吉比特以太网适配器的驱动程序。驱动程序的更多细节、 支 持和更新可访问: http://cesdis.gsfc.nasa.gov/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: [31]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)的系统吗? 如果不使用额外的设备或机械装置,可以很容易地连接两台这样的机器, 但不可 能再多。参阅 [32]双绞线 ——解释了如何做到这一点。而且你不可能简单地交 叉几根线或其它什么 就弄出一个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来 “再试一下”了。 使用“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的权限 。 4. 性能小技巧 如果你的以太网吞吐量太小,或者想提高ftp传输的速度,可以使用这里的 一些 小技巧。 程序ttcp.c是测试原始吞吐量大小的好实验。另一个普通的技巧是把 一个大 于1MB的large_file驻留在发送机器的缓冲内存里,然后执行 ftp> get large_file /dev/null。(至少要“get”两次,因为 第一次是把文件驻留在发 送机器的缓冲内存中。)把文件驻留在缓冲内存 的原因是你对测量里混进从磁盘 存取文件的速度不感兴趣。这也是把输入 数据发送到/dev/null而不是磁盘上的 原因。 4.1 一般概念 即使一个8比特的网卡在接收背靠背的数据包时也没有问题。但在计算机无 法迅 速地从网卡接收数据包为更多进来的数据包腾出空间时,困难就出现 了。如果计 算机不能迅速地清除已经接收到的数据包占据的网卡内存,网 卡就没有空间存放 新的数据包了。 在这种情况下,网卡或者丢弃新的数据包,或者把它放在以前接收的数据 包位置 上。任何一个都会引起重新传送而严重地中断平滑的数据传输流, 并使性能被严 重降低,其降级因子甚至可以达到5! 拥有更多板上内存的网卡可以“缓冲”更多的数据包,因此可以无需丢弃 就处理 更大量的突发背靠背数据包。这也就意味著网卡不需要主机响应从 缓存读取数据 包的延迟更小以避免丢弃数据包。 大多数8比特网卡有8kB缓存,而大多数16比特网卡有16kB缓存。大多数的 Linux 驱动程序要保留3kB的缓存(作为两个Tx缓存),这样就只给8比特网 卡剩下5kB 作为接收的空间。它只够存放三个完全大小(1500字节)的以太 网数据包。 4.2 ISA网卡和ISA总线速度 在上面提到,如果从网卡移走数据包的速度足够快,即使Rx数据包缓冲内 存的数 量小,丢弃/覆盖的情况也不会出现。设置数据包从网卡移到计算机 内存的速率 的因子是连接这二者的数据通道的速度——即ISA总线的速度。 (如果CPU是很慢 的386sx-16,它也会起一定的作用。) 推荐的ISA总线时钟为8MHz,但很多主板和周边设备可以运行在更高的频率 上。 一般通过在CMOS设置里选择主板/CPU时钟频率因子,可以设置ISA总线 的时钟频 率。有些ISA和PCI/ISA主板可能没有这一选项,那么就只能使用 制造商的缺省值 了。 例如,下面是在一台40MHz的486上,不同ISA总线速度下,8比特WD8003EP 网卡 用TTCP程序测量得到的一些接收速度。 _________________________________________________________________ ISA Bus Speed (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周边设备是否工作正常。 4.3 设置TCP的Rx窗口 再说一遍,网卡的板上RAM小以及网卡与计算机内存间的数据通道相对较慢 会引 起麻烦。TCP缺省的Rx窗口设置为32kB,也就是说与你在同一子网的一 台较快的 计算机会一下子发给你32kB的数据,而不会停下来看看你是否正 常地接收到了它 们。 最近版本的route命令能够在运行过程中设置这个窗口的大小。一般 它只用在需 要减小该窗口的局域网,因为在若干路由器或网关后面的计算 机会得到足够的“ 缓冲”而不造成问题。下例为一个可能的用法: _________________________________________________________________ route add ... window _________________________________________________________________ 其中的win_size是你希望使用的窗口大小(以字节计算)。一个运行 在8MHz或更 低速度下的ISA总线上的8比特3c503网卡,可以在4kB大小的窗 口下很好地工作。 太大的窗口会导致覆盖和丢弃数据包,并严重降低以太 网的吞吐量。你可以 用cat /proc/net/dev检查操作状态,它会 显示出现的丢弃或覆盖状况。 4.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)会使性能显著提高。 5. 有关销售商/制造厂家/型号的信息 下面按照销售商名称和产品标识的字母顺序列出了许多网卡。在每个产品 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一行所使用的驱动 程序模块的名称。 5.1 3Com 如果你确定不了你的网卡是什么,但认为它是3Com网卡,你可以通过集成 块编号 来识别它。3Com有一本资料“通过集成块编号识别适配器”(ref 24500002), 它应该能让你弄明白。参见 [33]3Com的技术信息 以了解如何从3Com索取该资料 。 注意,3Com还有一个FTP站点:ftp.3Com.com,你也许想去看看。 对使用WWW浏览器阅读本文档的读者而言,也可以试试3Com的WWW站点。 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会遇到的常见问题在 [34]3Com网卡的问题中进行了讨论。 如果你想把该驱动程序作为一个可载入的模块,应该阅读 [35]把以太网驱动程序 作为模块使用 以了解有关模块的信息。 注意,一些旧的无盘386工作站有一个板上的3c503(3Com制造,但用其它 名称销 售,如“Bull”),但销售商ID不是3Com的ID,所以检测不出来。 更多的资料可 以在Etherboot软件包里找到,要启动这些无盘工作站你一定 得有这些东西。 Etherlink Plus 3c505 状态:半支持,驱动程序名称:3c505 这个驱动程序是Craig Southeren geoffw@extro.ucc.su.oz.au编写 的。这些网 卡使用i82586芯片。没有太多的有关这些网卡的资料。标准内 核包含该驱动程序 ,但它被归为alpha版本的驱动程序。参见 [36]Alpha驱动程序以了解在Linux下 使用alpha/测试 版本以太网驱动程序的重要信息。 如果你要使用这样的网卡,还应该读一下 /usr/src/linux/drivers/net/README.3c505文件。它包含了你 可以使用/禁止的 各种选项。 Etherlink-16 3c507 状态:半支持,驱动程序名称:3c507 该网卡使用了一块Intel芯片,其驱动程序的开发与Intel的Ether Express 驱动 程序开发关系很密切。在标准的内核发行版本中包含了其驱动程序, 但是是作为 一个alpha版本的驱动程序。参见 [37]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的主页: [38]Vortex 3c523 状态:半支持,驱动程序名称:3c523 这个MCA总线的网卡使用i82586,Chris Beauregard修改了ni52驱动程序用 于这 些网卡。在v2.2内核源码树里可以找到它的驱动程序。 更多的细节可以在MCA-Linux主页上找到 MCA-Linux page at 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软 件包里寻找支持。 参见 [39]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控制器的芯片组。参见 [40]PCMCIA支持以了解更多的有 关PCMCIA芯片组、 socket启用软件等信息。 3c590 / 3c595 状态:支持,驱动程序名称:3c59x 这些“Vortex”网卡是用在PCI总线机器上的,'590是10Mbps的产品,'595 是3Com的100Mbs产品。注意'595也可以象'590一样运行(即使用10Mbps模 式)。 驱动程序包含在v2.0内核源码中,但还在不断升级。如果在使用 v2.0内核里的驱 动程序时遇到问题,可以从下面的URL获取一个更新的驱动 程序: [41]Vortex 注意,现在有两种不同的3c590网卡,较早的型号有32kB的板上内存,后来 的型 号只有8kB的板上内存。可能你买一个新的3c59x还没有多久,它就正 在被3c90x 所取代。如果你是买别人的二手货,想法弄到一个32kB的型号。 3c595网卡 有64kB板上内存,因为无法只用8kB的RAM就能达到100Mbps! 感谢Cameron Spitzer和3Com的Terry Murphy给Donald提供网卡和资料,使 Donald能写出驱动程序来。 Donald为Vortex的驱动程序支持建立了一个邮件列表。要加入该列表,只 需如下 操作: echo subscribe | /bin/mail linux-vortex-request@cesdis.gsfc.nasa.gov 3c592 / 3c597 状态:支持,驱动程序名称:3c59x 这些是EISA版本的3c59x系列网卡。3c592/3c597(又名为Demon)可以使用 上面 讨论的vortex驱动程序。 3c900 / 3c905 / 3c905B 状态:支持,驱动程序名称:3c59x 这些网卡(又名为“Boomerang”,或EtherLink III XL)是用来取代 3c590/3c595网卡的。 对Cyclone的“B”版本的支持最近才加进来。要在v2.0之前的内核使用该 网卡, 必须从如下的Donald站点获取更新后的3c59x.c驱动程序: [42]Vortex-Page 如果有问题,去上述的WWW主页查一下。Donald为Vortex驱动程序的支持文 档等 建立了一个邮件列表。要加入该列表,只需如下操作: echo subscribe | /bin/mail linux-vortex-request@cesdis.gsfc.nasa.gov 3c985 状态:支持,驱动程序名称:acenic Jes Sorensen提供的驱动程序在v2.2内核里能找到。除了3Com的型号,它 还支持 几种其它的吉比特网卡。 5.2 Accton Accton MPX 状态:支持,驱动程序名称:ne (+8390) 不要被它的名字骗了。它还是NE2000兼容网卡,可以使用ne2000驱动程序。 Accton EN1203, EN1207, EtherDuo-PCI 状态:支持,驱动程序名称:de4x5, tulip 这是DEC的21040 PCI芯片的另一种实现。EN1207网卡上有21140,还有一个 10Base-2连接器,这在选择媒介时会把人弄糊涂。虽然该网卡使用10Base-T 和100Base-T也可以工作,但在购买时要确定如果出问题可以退回。 参见 [43]DEC 21040 以了解这些网卡的更多信息和目前的驱动程序状况。 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软件包以 了解 目前的状态。 5.3 Allied Telesyn/Telesis AT1500 状态:支持,驱动程序名称:lance 这些是使用79C960版本的AMD LANCE的系列低成本以太网卡。它们是可以控 制总 线的网卡,因此是一种可用的较快的ISA总线以太网卡。 DMA选择和芯片号码信息可以在 [44]AMD LANCE找到。 更多有关基于AMD LANCE的以太网卡的技术信息可以在 [45]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有问题时关机器重起。 AT2450 状态:支持,驱动程序名称:pcnet32 这是PCI版本的AT1500,而且没有Boca的79c970 PCI网卡那样的问题。 DMA选择和 芯片号码信息可以在 [46]AMD LANCE找到。 更多有关基于AMD LANCE的以太网卡的技术信息可以在 [47]Notes on AMD...找到 。 AT2500 状态:半支持,驱动程序名称:rtl8139 该网卡使用RealTek的8139芯片——参见 [48]RealTek 8139一节。 AT2540FX 状态:半支持,驱动程序名称:eepro100 该网卡使用i82557芯片,因此可以用eepro100的驱动程序。如果你试用过, 请发 给我一份报告以更新本信息。 5.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(参见 [49]AT1500)和 NE1500/2100(参见 [50]NE1500)就使 用了这些芯片。 7990/79c90早已被新版本所取代。79C960(a.k.a. 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)。(参见 [51]PARAM_1)如果没有设 置,那么按次序启用每个空闲 的DMA通道并检查是否初始化成功来进行探测。 HP-J2405A板是个例外:在该板上很容易读出EEPROM设置的IRQ和DMA的值。 参见 [52]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。 5.5 Ansel Communications AC3200 EISA 状态:半支持,驱动程序名称:ac3200 注意,要在make config时访问该驱动程序依然需要先在回答“Prompt for development and/or incomplete code/drivers?”时回答“Y”。这 只是因为这 种网卡很少见,导致驱动程序稳定性的反馈太少。 其驱动程序作为alpha测试驱动程序被包含在目前的内核里。该网卡是基于 ne2000和wd80x3网卡上使用的普通的NS8390芯片。请参见 [53]Alpha驱动程序以 了解在Linux下使用alpha/测试 版本以太网驱动程序的重要信息。 如果你在使用该网卡,请让我知道它的工作情况,虽然在v1.1.25内核里就 包含 了其驱动程序,但反馈信息很少。 如果你想把该驱动程序作为一个可载入的模块,应该阅读 [54]把以太网驱动程序 作为模块使用 以了解有关模块的信息。 5.6 Apricot Apricot Xen-II On Board Ethernet 状态:半支持,驱动程序名称:apricot 这是使用i82596总线控制芯片的板上以太网卡。它的I/O地址只能是 0x300。从驱 动程序的源码上得知,其IRQ也被硬件固定为10。 早期版本的驱动程序倾向于认为0x300处的一定是apricot NIC。后来 才对硬件地 址进行检查以避免错误的检测。 5.7 Arcnet 状态:支持,驱动程序名称:arcnet (arc-rimi, com90xx, com20020) 由于该网卡的价格非常低廉而且以太网性能很好,可能人们会有很多机会 捐献出 他们的Arcnet硬件,使得很多家用系统都使用Arcnet。 Arcnet的一个优点在于所有的网卡接口都一样,所以只需要一个驱动程序。 它还 内建了错误处理机制,据信不会丢失数据包。(对UDP来说这可太棒了!) 从1.1.80起,Avery Pennarun的arcnet驱动程序就被包含在缺省的内核源 码里了 。arcnet驱动程序使用“arc0”作为自己的名字,而不是通常的以 太网设备名 “eth0”。Bug报告和成功的故事可以寄到: apenwarr@foxnet.net 在标准内核里有一些设置跳线和一般提示的信息文件。 据信100Mbs的ARCnet网卡也可以同样使用该驱动程序! 5.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的驱动程序, 好象差不多 可以工作了。但从那之后就再没听过多少消息了。 5.9 Boca Research 不错,他们不光是制造多口串行卡。:-) Boca BEN (ISA, VLB, PCI) 状态:支持,驱动程序名称:lance, pcnet32 这些网卡都是基于AMD的PCnet芯片。需要警告一下潜在的买家,许多用户 在使用 这些VLB/PCI网卡时遇到了没完没了的麻烦。快的奔腾系统用户受到 了特别的打 击。注意这并不是驱动程序的问题,因为DOS/Win/NT用户也一 样遇到麻烦 。Boca的技术支持电话号码是(407) 241-8088,也可以通过 75300.2672@compuserve.com找到他们。老式的ISA网卡看来没遇到这 种问题。 Donald做了一个Boca的PCI网卡与相似的Allied Telsyn的PCnet/PCI网卡的 比较 测试,结果显示问题出在Boca的PCnet/PCI芯片。测试结果可以在Don 的WWW服务 器上找到。 [55]Linux at CESDIS Boca对受影响的使用者提供“包修”服务,需要增加一个缺少的电容,虽 然可以 解决一些问题,但对大多数人来说并非百分之百奏效。 如果您仍然想买这种网卡,至少试著得到一个7天无条件退货的条款, 这样一旦 出问题你就可以退货。 有关AMD芯片更一般的信息可以在 [56]AMD LANCE找到。 基于AMD LANCE的以太网卡的更多技术信息可以在 [57]Notes on AMD...找到。 5.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参数的低位来覆盖。参 见 [58]PARAM_2。模块用户可以在 /etc/conf.modules文件里指定xcvr=N值作 为option。 同样,不要把E2100当成NE2100的兼容网卡。E2100是采用NatSemi的DP8390 的共 享内存设计,大致与伤脑筋的WD8013相似,而NE2100(和NE1500)是 用总线控制 的AMD的LANCE设计的。 在标准内核里包含了E2100的驱动程序。但是,无法看到其编程资料,不要 指望 有Bug修复。除非你已经买了该网卡,不要用它。 如果你想把该驱动程序作为一个可载入的模块,应该阅读 [59]把以太网驱动程序 作为模块使用 以了解有关模块的信息。 E22** 状态:半支持,驱动程序名称:lance According to information in a Cabletron Tech Bulletin, these cards use the standard AMD PC-Net chipset (see [60]AMD PC-Net) and should work with the generic lance driver. 按照Cabletron技术公告牌上的资料,这些网 卡使用标准AMD的PC-Net芯片 组(参见 [61]AMD PC-Net)而且可以使用普通的 lance驱动程序。 5.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. Technical Support: 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 这些是但愿可以使用标准21040驱动程序很好地工作的另一种DEC的21040网 卡。 EM400和EM964是使用DEC的21050桥接器和4片21040芯片的4端口网卡。 参见 [62]DEC 21040 以了解这些网卡的更多信息和当前驱动程序的状况。 5.12 Compaq Compaq并不真正从事制造以太网卡,但他们的很多系统都在主板上嵌入了 以太网 控制器。 Compaq Deskpro / Compaq XL (嵌入AMD芯片) 状态:支持,驱动程序名称: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芯片的一般资料可以在 [63]AMD LANCE找到。 Compaq Nettelligent/NetFlex (嵌入ThunderLAN芯片) 状态:支持,驱动程序名称:tlan 这些系统使用Texas Instruments的ThunderLAN芯片。有关ThunderLAN驱动 程序 的资料可在 [64]ThunderLAN找到。 5.13 Danpex Danpex EN9400 状态:支持,驱动程序名称:de4x5, tulip 又一个基于DEC的21040芯片的网卡,据报告性能挺好,价格比较便宜。 参见 [65]DEC 21040 以了解这些网卡的更多信息和当前驱动程序的状况。 5.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选择和芯片号码信息可以 在 [66]AMD LANCE找到。 更多有关基于AMD LANCE的以太网卡的技术信息可以在 [67]Notes on AMD...找到 。 DE-528 状态:支持,驱动程序名称:ne, ne2k-pci (+8390) 很明显D-Link已经开始制造PCI NE2000兼容网卡了。 DE-530 状态:支持,驱动程序名称:de4x5, tulip 这是一款使用DEC的21040 PCI芯片的通用网卡,据报告可以使用普通的 21040 tulip驱动程序。 参见 [68]DEC 21040 以了解这些网卡的更多信息和当前驱动程序的状况。 DE-600 状态:支持,驱动程序名称:de600 笔记本电脑以及想让电脑快捷地联上以太网的用户可能用该网卡比较好。 在缺省 的内核源码树里有它的驱动程序,是Bjorn Ekwall bj0rn@blox.se编写的。通过 并口可以从该网卡获得180kb/s的传送速 度。请阅读内核源码树里 的README.DLINK文件。 注意,现在传递给ifconfig的设备名为eth0,而不是以前 用的dl0。 如果你的并口不是在标准的0x378,那么需要重新进行编译。 Bjorn写道:“由 于DE-620的驱动程序试图抓紧循环中的最后一个毫秒,我 就把中断和端口地址写 成了常量而不是变量。这样可以达到所需的速度, 也就意味著无法用lilo改变这 些设置;必须重新编译......”同样还要注 意,某些笔记本电脑主板上的并口位 于0x3bc,某些一体化板卡的并 口也是这样。 DE-620 状态:支持,驱动程序名称:de620 与DE-600一样,只是有两种输出格式。Bjorn为1.1以上版本内核里的这种 型号网 卡编写了驱动程序。参见上面有关DE-600的信息。 DE-650 状态:半支持,驱动程序名称:de650 (?) 这种PCMCIA网卡已经被有些人在他们的笔记本电脑上使用一段时间了。它 是个基 本的8390设计,与NE2000很相象。LinkSys的PCMCIA网卡和IC-Card 的Ethernet都 被认为是DE-650兼容网卡。注意,目前其驱动程序还不 是标准内核的一部分,所 以需要做一些打补丁的工作。 参见本文档的 [69]PCMCIA支持,如果可以的话,访 问一下: [70]Don's PCMCIA Stuff 5.15 DFI DFINET-300 and DFINET-400 状态:支持,驱动程序名称:ne (+8390) 感谢Eberhard Moenkeberg emoenke@gwdg.de指出这些网卡是在PROM 的前三个字 节使用“DFI”,而不是象所有NE1000和NE2000网卡那样在第14 和15字节使 用0x57,因此现在才能够检测到这些网卡。(300是8比特 的伪NE1000兼容卡 ,400是伪NE2000兼容卡。) 5.16 Digital / DEC DEPCA, DE100/1, DE200/1/2, DE210, DE422 状态:支持,驱动程序名称:depca 源文件“depca.c”里的说明包含了在一台机器里如何使用多块此类网卡。 注意 ,DE422是EISA网卡。这些网卡都是基于AMD的LANCE芯片。参见 [71]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总线结构特别设计的。SMC的新EtherPower PCI网卡也使 用这一 芯片。 对基于此芯片的网卡可以在两个驱动程序之间进行选择。上面讨论了 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-?,并使用21040芯片的Linux驱动程序。如 果要对 非DEC的网卡使用David的de4x5驱动程序,读一下 README.de4x5里的细节。 Donald是使用SMC的EtherPower-10/100网卡开发出“tulip”驱动程序。注 意, 标准内核树中的驱动程序不是最新的版本。如果有问题的话,请从 Donald 的ftp/WWW站点获取最新的驱动程序版本。 [72]Tulip Driver 上面的URL包含了一个各种使用21040芯片的网卡/销售商的(非完全)列表。 还要注意,目前tulip驱动程序依然被视为一个alpha驱动程序(参见 [73]Alpha 驱动程序),也应如此处理。要使用它的 话,需要编辑arch/i386/config.in, 并取消 CONFIG_DEC_ELCP支持那一行的注释。 Donald还为tulip驱动程序的支持声明等建立了一个邮件列表。要加入,只 需键 入: echo subscribe | /bin/mail linux-tulip-request@cesdis.gsfc.nasa.gov 5.17 Farallon Farallon销售EtherWave适配器和收发器。其设备可以把多个10baseT设备 构成菊 花链。 Farallon Etherwave 状态:支持,驱动程序名称:3c509 据说这是一个包含EtherWave收发器的3c509兼容网卡。可以成功地使用目 前 的3c509驱动程序。对于一般的应用,该网卡过于昂贵了,但在某些特殊 情况下 可以使用它。小Hub的价格在$125以上,Etherwave还要在板 卡的价格之上增 加$75-$100——如果你拉的线太少就物有 所值,如果是缺少两个网络就不值得这 么做了。 5.18 Fujitsu 与许多网络芯片制造商不同,Fujitsu还制造和销售一些基于自己芯片的网 卡。 Fujitsu FMV-181/182/183/184 状态:支持,驱动程序名称:fmv18x 从驱动程序来看,这些网卡就是Fujitsu的MB86965网卡的简单改进,这使 它们 与Allied Telesis的AT1700网卡很相似。 5.19 Hewlett Packard 272**网卡使用可编程I/O,与NE*000板卡类似,但是数据传输端口可以在 不访问 的时候“关闭”,以避免自动探测驱动程序时的麻烦。 感谢Glenn Talbott帮助澄清了本节有关HP硬件版本号的疑惑。 27245A 状态:支持,驱动程序名称:hp (+8390) 这是基于8比特8390的10BaseT网卡,由于所有8比特的缘故不推荐使用。几 年前 该网卡被重新设计为高度集成的,引起了一些只影响测试程序的初始 化时的变化 ,对LAN驱动程序没有影响。(新的网卡在切换进入/出环回模 式后不处于“准备 好”状态。) 如果你想把该驱动程序作为一个可载入的模块,应该阅读 [74]把以太网驱动程序 作为模块使用 以了解有关模块的信息。 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连接器的功能。 如果你想把该驱动程序作为一个可载入的模块,应该阅读 [75]把以太网驱动程序 作为模块使用 以了解有关模块的信息。 HP-J2405A 状态:支持,驱动程序名称:lance 这些网卡比27247/27252A便宜而且稍微快一点儿,但少了一些特性,如AUI、 ThinLAN连接与启动PROM插座。这是一个相当通用的LANCE设计,但设计时 的一个 不起眼的决定使它与通用的“NE2100”驱动程序不兼容。感谢HP的 Glenn Talbott提供的资料,使驱动程序能够特别地支持它(包括从板上读 取DMA通道) 。 更多有关基于LANCE的网卡信息可以在 [76]Notes on AMD...中找到。 HP-Vectra On Board Ethernet 状态:支持,驱动程序名称:lance HP-Vectra在主板上有一个AMD的PCnet芯片。 DMA选择和芯片号码信息可以在 [77]AMD LANCE找到。 更多有关基于AMD LANCE的以太网卡的技术信息可以在 [78]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一 节以了解更多信息。 5.20 IBM / International Business Machines IBM Thinkpad 300 状态:支持,驱动程序名称:znet 它与基于Intel的Zenith Z-note兼容。参见 [79]Z-note以了解更多信息。 据信下面这个站点有一个新版本Thinkpad的全面的有用资料数据库。我还 没有亲 自去查看过。 [80]Thinkpad-info 对不便于使用WWW浏览器的读者,可以试试 peipa.essex.ac.uk:/pub/tp750/ IBM Credit Card Adaptor for Ethernet 状态:半支持,驱动程序名称:?(独立发行) 该PCMCIA网卡也可以在Linux下使用。同样需要指出的是,笔记本电脑需要 有支 持PCMCIA的芯片组,而且要把支持PCMCIA的补丁加进标准内核。 参见本文档中的 [81]PCMCIA支持,如果可能的话, 请访问: [82]Don's PCMCIA Stuff IBM Token Ring 状态:半支持,驱动程序名称:ibmtr 要支持令牌环不仅仅是写一个设备驱动程序,还要为令牌环编写源路由例 程。源 路由是编写时花费时间最多的地方。 近来Peter De Schrijver在令牌环上花了些时间,处理IBM的ISA和MCA令牌 环网 卡。 目前的令牌环代码首先被包含进1.3.x系列内核中。 Peter说该驱动程序在MCA 16/4 Megabit令牌环板上进行过测试,但在其它 基 于Tropic的板上也可以工作。 5.21 ICL Ethernet Cards ICL EtherTeam 16i/32 状态:支持,驱动程序名称:eth16i Mika Kuoppala(miku@pupu.elt.icl.fi)编写了驱动程序,早在1.3.4x内 核中 就包含了它。该网卡使用了at1700网卡中使用的Fujitsu的MB86965芯 片。 5.22 Intel Ethernet Cards 注意,各种Intel网卡的命名是乱七八糟的。如果有问题,检查网卡上主要 芯片 的i8xxxx号码,对PCI网卡使用/proc目录下的PCI信息, 然后再与这里列出的数 字进行比较。 Ether Express 状态:支持,驱动程序名称:eexpress 该网卡使用intel的i82586芯片。驱动程序的早期版本(在v1.2内核里)是 alpha-测试驱动程序,大多数人在使用时会遇到麻烦。v2.0内核里的驱动 程序要 好得多,虽然其源码还被列为实验性的,而且在较快的机器上问题 更多。 在驱动程序源码开头的注释里列出了一些与这些网卡有关的问题(并进行 了修正 !)。至少有一个用户报告说有死锁,使得把驱动程序里所有的 outb替换 为outb_p的工作放慢下来。 Ether Express PRO/10 状态:支持,驱动程序名称:eepro Bao Chau Ha编写了这些网卡的驱动程序,早在1.3.x内核中就包含了它。 该驱动 程序也可以使用在一些基于i82595芯片的Compaq内建以太网系统上。 Ether Express PRO/10 PCI (EISA) 状态:半支持,驱动程序名称:?(独立发行) John Stalba(stalba@ultranet.com)编写了PCI版本的驱动程序。这些网 卡使 用PLX9036 PCI接口芯片和Intel的i82596 LAN控制器芯片。如果你的 网卡上 有i82557芯片,那么你的网卡就不是该类型网卡,而是下面要 讨论的版本,需 要EEPro100驱动程序。 可以从如下站点获得PRO/10 PCI网卡的alpha驱动程序及使用指导: [83]EEPro10 Driver 如果是EISA网卡,可能要改一下驱动程序在不同情况下(PCI与EISA)使用 的检 测机制。 Ether Express PRO 10/100B 状态:支持,驱动程序名称:eepro100 注意,该驱动程序不支持老式的100A网卡。驱动程序里列出的芯片号 码 是i82557/i82558。更新驱动程序或寻找支持,请访问: [84]EEPro-100B Page 订阅该驱动程序的邮件列表,请如下操作: echo subscribe | /bin/mail linux-eepro100-request@cesdis.gsfc.nasa.gov 目前Donald不得不签署了一个不得公开的协议,这表明他实际上可以公开 驱动程 序的源码!这件蠢事都是因为Intel吗? 5.23 Kingston Kingston制造各种网卡,包括NE2000+、基于AMD PCnet的网卡和基于DEC tulip的 网卡。大多数网卡都可以使用相应的驱动程序。参见 [85]Kingston Web Page 基于KNE40 DEC 21041 tulip的网卡据说用普通的tulip驱动程序工作得很 好。 5.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 网络接口控制 器,对它的支持被合并在标准的tulip驱动程序里(从0.83版 开始)。更多的有 关PNIC信息可在下面找到: http://cesdis.gsfc.nasa.gov/linux/drivers/pnic.html 有关这些网卡各种版本的进一步资料可以在上面提到过的LinkSys的WWW站 点得到 。 LinkSys Pocket Ethernet Adapter Plus (PEAEPP) 状态:支持,驱动程序名称:de620 据说这是DE-620兼容网卡,据说可以使用其驱动程序。参见 [86]DE-620以了解更 多信息。 LinkSys PCMCIA Adaptor 状态:支持,驱动程序名称:de650 (?) 我认为这是重新标记过的DE-650。参见 [87]DE-650以了解更多信息。 5.25 Microdyne Microdyne Exos 205T 状态:半支持,驱动程序名称:? 另一款基于i82586的网卡。Dirk Niggemann dirk-n@dircon.co.uk编 写了一个自 己认为属于“pre-alpha”的驱动程序,希望有人进行测试。要 了解细节请写信 给他。 5.26 Mylex 如果想询问有关Mylex的问题,请通过如下号码与他们联系。 MYLEX CORPORATION, Fremont Sales: 800-77-MYLEX, (510) 796-6100 FAX: (510) 745-8016. 他们也有一个WEB站点: [88]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芯片一节( [89]DEC 21040)以 了解更多信息。 Mylex LNP104 状态:半支持,驱动程序名称:de4x5, tulip LNP104使用DEC的21050芯片来处理四个独立的10BaseT端口。它应该 可以使用最 近的能处理共享中断的21040驱动程序,但(我觉察到)这一尝 试还没有人报告 使用过。 5.27 Novell Ethernet, NExxxx及其相关兼容卡。 前缀“NE”来自Novell Ethernet。Novell按照最便宜的NatSemi数据手册 设计并 把制造权卖(扔?)给了Eagle,就是为了向市场提供价格合理的以 太网卡。( 目前被广泛使用的NE2000网卡。) NE1000, NE2000 状态:支持,驱动程序名称:ne (+8390) ne2000是围绕NatSemi的8390芯片进行基本设计的通用名称。它们使用可编 程I/O,而不是共享内存,使得安装简单,但性能有一点降低,而且带来几 个问 题。有关NE2000网卡的一些普遍性问题列在 [90]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)。参见 [91]诊断 程序以了解更多信息。 如果你想把该驱动程序作为一个可载入的模块,应该阅读 [92]把以太网驱动程序 作为模块使用 以了解有关模块的信息。 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://cesdis.gsfc.nasa.gov/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选择和芯片号码信息可以在 [93]AMD LANCE找到。 更多有关基于AMD LANCE的以太网卡的技术信息可以在 [94]Notes on AMD...找到 。 NE/2 MCA 状态:半支持,驱动程序名称:ne2 若干公司生产了几种NE2000微通道网卡。v2.2内核里提供的这一驱动程序 可以检 测如下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 的网 卡信息可以在 [95]AMD LANCE找到。 5.28 Proteon Proteon P1370-EA 状态:支持,驱动程序名称:ne (+8390) 很明显这是一款NE2000兼容卡,在Linux下工作得挺好。 Proteon P1670-EA 状态:支持,驱动程序名称:de4x5, tulip 这是另一款基于DEC的Tulip芯片的PCI网卡。据说在Linux下工作得挺好。 参见有关21040芯片一节( [96]DEC 21040)以 了解更多信息。 5.29 Pure Data PDUC8028, PDI8023 状态:支持,驱动程序名称:wd (+8390) PureData的PDUC8028和PDI8023系列网卡据说可以正常工作,感谢Mike Jagdis jaggy@purplet.demon.co.uk提供特别的探测代码。对这些网卡的支 持已经被集 成在WD驱动程序里了。 5.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希望得到该网卡用户的 反馈。 参见 [97]Alpha驱动程序以了解在Linux下使用 alpha/测试版本以太网驱动程序 的重要信息。 NI6510(不是EB) 状态:半支持,驱动程序名称:ni65 也有一个基于LANCE的NI6510网卡的驱动程序,而且也是Michael Hipp编写 的。 它同样也是“alpha”驱动程序。出于某些原因,该网卡与通用的LANCE 驱动程序 不兼容。参见 [98]Alpha驱动程序以了解在Linux下使用alpha/测试 版本以太网 驱动程序的重要信息。 EtherBlaster(又名为NI6510EB) 状态:支持,驱动程序名称:lance 从1.3.23内核开始,通用的lance驱动程序里增加了对NI6510EB专有标识 0x52, 0x44进行的检查。但有人报告说所有NI6510EB网卡对于这一标 识并不一样,这会 导致lance驱动程序检测不出你的网卡。如果出现了这一 问题,可以把探测(大 约在lance.c的第322行)改为printk(),把你的网 卡上的值打印出来,然后用它 们来代替缺省的0x52, 0x44。 在使用lance驱动程序时,网卡可能运行在“高性能”模式下,而不是NI6510 兼 容模式。 5.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单芯片产品。现在各个销售商都在销售使用该芯 片的 网卡。参见 [99]NE2000-PCI以了解使用该网卡的有关信息。 注意,这依然是附 在PCI总线上的十多年前的老式设计。其性能并不比相应 的ISA型号好多少。 RealTek 8129/8139 状态:半支持,驱动程序名称:rtl8139 另一款RealTek的PCI单芯片以太网产品。基于该芯片的网卡的驱动程序被 包括 在Linux的v2.0.34发行版本中。目前在回答是否要使用v2.2内核里的 实验性驱动 程序时,依然要回答“Y”以获得使用其驱动程序的权利。要了 解更多信息,请 阅读: http://cesdis.gsfc.nasa.gov/linux/drivers/rtl8139.html 5.32 Sager Sager NP943 状态:半支持,驱动程序名称:3c501 这只不过是一款S.A. PROM前缀不同的3c501兼容网卡。我认为它跟原始的 3c501 一样伤脑筋。其驱动程序检查NP943 I.D.之后把它当成3c501来处理。 参见 [100]3Com 3c501以了解为什么实际上不需要使 用这些网卡。 5.33 Schneider & Koch SK G16 状态:支持,驱动程序名称:sk_g16 其驱动程序被包含在v1.1内核中,是PJD Weichmann和SWS Bern编写的。似 乎SK G16与NI6510相似,都是基于LANCE芯片的第一版(7990)。再重复一 次,似乎该 网卡无法使用通用的LANCE驱动程序。 5.34 SEEQ SEEQ 8005 状态:支持,驱动程序名称:seeq8005 其驱动程序早就被包含在1.3.x内核中了,是Hamish Coleman编写的。驱动 程序 里只包含了很少的网卡信息,所以这里也没有多少相关信息。如果有 问题的话, 最好发e-mail给hamish@zot.apana.org.au。 5.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. 电话技术支持:800-992-4762 (USA) or 800-433-5345 (Canada) or 516-435-6250 (Other Countries). 索取资料:800-SMC-4-YOU (USA) or 800-833-4-SMC (Canada) or 516-435-6255 (Other Countries). E-mail技术支 持: techsupt@ccmail.west.smc.com. FTP Site: ftp.smc.com. WWW Site: [101]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 网 卡已经面世十年了!)兼容卡一般使用的名称为“wd8003”,采用没有 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 _________________________________________________________________ 参见 [102]8013问题以了解某些常见问题。 如果你想把该驱动程序作为一个可载入的模块,应该阅读 [103]把以太网驱动程 序作为模块使用 以了解有关模块的信息。 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,否则就会出问题。 如果你想把该驱动程序作为一个可载入的模块,应该阅读 [104]把以太网驱动程 序作为模块使用 以了解有关模块的信息。 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驱 动程序时可能会有问题。如果遇到麻烦,请确定使用的是最新发布 的驱动程序, 它可能还没有被包含在目前的内核源码树里。 参见 [105]DEC 21040 以了解这些网卡的更多信息和当前驱动程序的状况。 很明显,EtherPower-II网卡的最新版本使用9432芯片。目前还不清楚它是 否可 以使用现在的驱动程序。同样,如果无法确信的话,在购买网卡 之前,先确定如 果不能使用Linux驱动程序就可以退货。 SMC EtherPower II PCI (9432) 状态:半支持,驱动程序名称:epic100 这些网卡是基于SMC 83c170芯片,与基于Tulip的网卡完全不同。在v2.0和 v2.2 内核里包含支持它的新驱动程序。更多的细节请访问: http://cesdis.gsfc.nasa.gov/linux/drivers/epic100.html 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也出现在若干其它品牌网卡上, 但相 当少见。Erik Stahlman (erik@vt.edu)编写了v2.0内核里的驱动程序, 但在较 早的v1.2内核里没有该驱动程序。把驱动程序放入v1.2内核源码树 没有多大困难 。 SMC 91c100 状态:半支持,驱动程序名称:smc9194 据说SMC 91c92驱动程序支持该款基于100Base-T芯片的网卡,但目前还未 得到证 实。 5.36 Texas Instruments ThunderLAN 状态:支持,驱动程序名称:tlan 该驱动程序覆盖了许多Compaq的内建以太网设备,包括NetFlex和Netelligent 系 列。它还支持Olicom的2183、2185、2325和2326产品。 5.37 Thomas Conrad Thomas Conrad TC-5048 这是基于DEC的21040芯片的另一款PCI网卡。 参见有关21040芯片一节( [106]DEC 21040)以 了解更多信息。 5.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的驱动程序 ne2k-pci.c。参见 PCI-NE2000一节以了解更多信息。 VIA 86C100A Rhine II (and 3043 Rhine I) Status 支持,驱动程序名称:via-rhine 这一相当新的驱动程序可以在目前的2.0和2.1内核里找到。它是在86C926 NE2000芯片上的改进,支持总线控制权传递,但严格的缓存32比特字节对 齐的要 求限制了从中得到的好处。要了解更多细节和驱动程序更新,参见: http://cesdis.gsfc.nasa.gov/linux/drivers/via-rhine.html 5.39 Western Digital 请参见 [107]SMC以了解有关SMC网卡的信息。(SMC在多 年前就收购了Western Digital的网卡部门。) 5.40 Winbond Winbond实际上并不制造和向大众销售完全的网卡——他们生产单片以太网 芯片 ,其它公司购买并在PCI板上印上自己的名字,然后通过零售店销售。 Winbond 89c840 状态:半支持,驱动程序名称:winbond-840 该驱动程序还没有与内核一起发行,因为它还处于测试阶段。可以从下面 获取: http://cesdis.gsfc.nasa.gov/linux/drivers/test/winbond-840.c Winbond 89c940 状态:支持,驱动程序名称:ne, ne2k-pci (+8390) 该芯片是很多制造商出售的低价PCI ne2000网卡上最常见的两个芯片之一。 注意 ,这依然是附在PCI总线上的十多年前的老式设计。其性能并不比相应 的ISA型号 好多少。 5.41 Xircom 在很长一段时间里,除非你签署文件放弃你的生命,Xircom不愿意发布编 写驱动 程序所需的编程信息。显然有足够多的Linux用户不断纠缠他们,要 得到驱动程 序支持(Xircom声称支持所有通用网络操作系统......),所 以他们改变了政策 ,无需再签署不公开协议,允许公开有关资料。有些人 说他们将要公开SCO驱动 程序的源码,另一些被告知他们不再提供象早期PE 型号那样“被废弃”的产品资 料。如果你感兴趣并想自己了解一下,可以 联系Xircom:1-800-874-7875, 1-800-438-4526 或 +1-818-878-7600。 Xircom PE1, PE2, PE3-10B* 状态:不支持。 不要抱太大希望,但如果你有一个这样的并口适配器,可以在DOS仿真器下 使 用Xircom提供的DOS驱动程序使用它。你需要允许DOSEMU访问并口,可能 还要 和SIG(DOSEMU的傻瓜中断生成器)一起使用。 Xircom PCMCIA Cards 状态:半支持,驱动程序名称:???? 在David Hinds的PCMCIA软件包里有一些Xircom的PCMCIA网卡驱动程序。查 看一 下以了解最新信息。 5.42 Zenith Z-Note 状态:支持,驱动程序名称:znet 内建的Z-Note网络适配器是基于使用两个DMA通道的Intel i82593。 在目前的内 核版本里有一个(alpha?)驱动程序。与所有笔记本电脑和袖 珍适配器一样,在 运行make config时它被放在“Pocket and portable adaptors”部分。同时还要 注意,IBM ThinkPad 300与Z-Note兼容。 5.43 Znyx Znyx ZX342 (DEC 21040 based) 状态:支持,驱动程序名称:de4x5, tulip 在使用基于该芯片的网卡时可以在两个驱动程序中进行选择。David 编写 了DE425驱动程序,Donald编写了通用的21040驱动程序。 注意,在1.1.91,David增加了一个编译选项,允许非DEC网卡(如Znyx网 卡)使 用其驱动程序。请阅读README.de4x5以了解其中细节。 参见 [108]DEC 21040 以了解这些网卡的更多信息和当前驱动程序的状况。 5.44 识别未知网卡 好吧,你叔叔的侄子的邻居的朋友有一个兄弟,在他给儿子的宠物大老鼠 做窝 的AT箱子里找到了一块老式ISA以太网卡。最后这块网卡落在你的手里, 想 在Linux下使用,但没人知道这块网卡是什么,也没有任何资料。 首先,寻找可以作为线索的任何明显的型号编码。如果型号里包含2000, 那么很 有可能是块NE2000兼容网卡。上面有8003和8013的网卡可能是 Western/Digital 的WD80x3网卡,或者是SMC Elite网卡,或者它们的兼容 网卡。 识别网络接口控制器 寻找网卡上最大的芯片。那就是网络控制器(NIC),大多数都可以从部分 编号 上识别出来。如果你知道网卡上是哪一种NIC,下文就能帮你弄清是哪 一种网卡 。 可能最常见的NIC还是National Semiconductor的DP8390,又名NS32490, 又 名DP83901,又名DP83902,又名DP83905,又名DP83907。这些不过是National 生 产的一部分芯片!其它一些公司,如Winbond和UMC,生产DP8390和DP83905 兼容 部分,如Winbond的89c904(与DP83905兼容)和UMC的9090。如果网卡 由8390构 成,那么它可能就是一个ne1000或ne2000兼容网卡。其次常用的 基于8390的网卡 是wd80x3网卡及其兼容卡。使用DP83905的网卡可以被认为 是ne2000或wd8013。 新版本的通用wd80x3和SMC Elite网卡在原来DP8390 的位置上用的是83c690 。SMC Ultra网卡采用83c790,使用与wd80x3网卡稍 有区别的驱动程序。SMC EtherEZ网卡采用83c795,使用的驱动程序与SMC Ultra网卡一样。所有基于某 种8390或8390兼容芯片的BNC网卡都有一片紧 靠BNC连接器的16针DIP芯片8392( 或83c692,又或???392)。 另一个在老式网卡上找到的常见NIC是Intel的i82586。使用该NIC的网卡包 括3c505、3c507、3c523、Intel的EtherExpress-ISA、Microdyne的Exos-205T 和Racal-Interlan的NI5210。 原始AMD LANCE NIC的编号为AM7990,较新的版本包括79c960、79c961、 79c965 、79c970和79c974。上面的大多数网卡都可以使用Linux的LANCE驱 动程序,有个 例外是使用自己的驱动程序的老式Racal-Interlan的NI6510 网卡。 使用DEC的21040、21041、21140或类似的编号NIC的较新的PCI网卡可以使 用Linux的tulip或de4x5驱动程序。 其它有一个印著RTL8029、89C940或86C926的大芯片的PCI网卡是ne2000兼 容网卡 ,v2.0以上版本Linux里的ne驱动程序在启动时可以自动检测这些网 卡。 识别以太网地址 每一个以太网卡都有一个唯一的6字节网卡地址。同一个制造商生产的每一 块网 卡的该地址的前三个字节都是一样的。例如,所有的SMC网卡都以 00:00:c0开始 。制造商分配的后三个字节对于自己生产的每一块网卡 都是唯一的。 如果你的网卡上有个标签给出了网卡地址的全部六个字节,就可以通过前 三个字 节查到它的销售商。但一般PROM插座上贴的标签上只打印了后三个 字节,没什么 用。 You can determine which vendors have which assigned addresses from RFC-1340. Apparently there is a more up to date listing available in various places as well. Try a WWW or FTP search for EtherNet-codes or Ethernet-codes and you will find something. 你可以从RFC-1340上找到分配 给销售商的地址。显然有很多地方可以找到 最新的地址列表。通过WWW或FTP查 找EtherNet-codes或 Ethernet-codes就可以找到它们。 使用未知网卡的技巧 如果还无法确定是哪一种网卡,但至少缩小了可能的范围,那么你可以构 建一个 包括全部可能驱动程序的内核,然后看看其中的哪一个可以在启动 时自动检测到 网卡。 如果内核没有检测到网卡,那么就是网卡没有被配置到一个驱动程序寻找 网卡时 探测的地址上。此时,需要从当地的Linux的FTP站点下载 scanport.tar.gz,看 看它能否定位出你的网卡跳线所设的地址。它 扫描从0x100到0x3ff的ISA I/O地 址以寻找 /proc/ioports里没有注册的设备。如果它在某个特定地址发现 了一个 未知设备,那么就可以用一个启动参数ether=把它明确设定为 以太网卡探测的地 址。 如果你设法检测到了网卡,那么一般可以依次改变未知跳线来了解跳线的 作用, 并查看被检测到的网卡所用I/O基址和中断。中断设置一般可以通过 查看跳线在 网卡背面所焊接的位置来得到。从网卡有金属插座的一端数背 面的“金手指”, 相应于金手指4、21、22、23、24、25、34、35、36、37、 38分别是中断9、7 、6、5、4、3、10、11、12、15、14。8比特网卡只用到 金手指31。 看起来没什么用的跳线一般是用来选择可选启动ROM的内存地址。靠近BNC 或RJ-45或AUI的其它跳线一般是用来选择输出媒介的。一般它们也在印著 YCL 、Valor或Fil-Mag的“黑盒子”变压器附近。 如下URL收集了很多各种网卡的跳线设置: [109]Ethercard Settings 5.45 非以太网设备的驱动程序 在Linux源码里有若干在网络程序看来是象以太网设备的其它驱动程 序,但实际 上不是以太网设备。为了本文档的完整性,把它们简要地列在 这里。 dummy.c -- 该驱动程序的目的是提供一个设备来指出路由,但并不 实际传输数 据。 eql.c -- 负荷均衡,控制多个设备(一般是modem)并在其中平衡发 送负载,对 网络程序表现为单个设备。 ibmtr.c -- IBM的令牌环,并非真正的以太网。令牌环要求源路由以 及其它一些 麻烦事。 loopback.c -- 环回设备,你的机器发出的所有数据包的目的地还是 你自己的机 器。从本质上说只是把数据包从发送队列移到接收队列。 pi2.c -- Ottawa业余无线电爱好者俱乐部PI和PI2的接口。 plip.c -- 并行线Internet协议,允许两台计算机通过并口的端到端 方式连接互 相发送数据包。 ppp.c -- 端到端协议(PPP,RFC1331),在端到端的连接(一般为 modem)上传 输多协议数据帧。 slip.c -- 串行线Internet协议,允许两台计算机通过串口(一般通 过modem) 的端到端方式连接互相发送数据包。 tunnel.c -- 提供一个IP通道,可以使网络数据流透明地穿过子网。 wavelan.c -- 由Intel的82586协处理器控制的类以太网无线电收发 器。82586也 被用在诸如Intel EtherExpress的其它以太网卡上。 6. 电缆、同轴电缆、双绞线 如果你是从头开始建网络,那么就必须决定是使用细缆以太网(使用BNC连 接器 的RG58同轴电缆)或10baseT(使用8线“电话”连接器RJ-45的电话线 样式的双 绞线电缆)。使用N连接器的RG-5电缆的老式粗缆以太网已经被废 弃,现在很少 见到了。 参见 [110]网卡应当支持的线缆类型以大致了 解一下线缆类型。还要注意 ,comp.dcom.lans.ethernet里的FAQ包括 了大量有关电缆方面的有用信息。FTP 到rtfm.mit.edu下的 /pub/usenet-by-hierarchy/以查看该新闻组的FAQ。 6.1 细缆以太网(thinnet) 细缆以太网相当便宜。如果自己制作电缆,实心的RG58A是$0.27/m, 分股 的RG58AU是$0.45/m。弯头的BNC连接器每个< $2, 其它各种器件也都挺便宜。重 要的是在每段电缆的末端需要装一个50欧姆 的终结器,所以每条电缆的预算大约 是$2。还有一个关键问题是电 缆中不能有“残桩”——“T”连接器必须直接连 到以太网卡上。 使用细缆以太网有两个主要缺点。首先它限制为10Mb/sec——100Mb/sec要 求使 用双绞线。其次,如果你是用一个大环路把机器连接起来,而某些笨 蛋把电缆从 自己的T形接头上拿开破坏了环路,整个网络就无法使用了,因 为出现了一个无 限大的阻抗(电路开路)而不是要求的50欧姆终结。注意, 只要不把电缆从T形 接头上移开,而是把T形接头从网卡上取下来,整个子 网就不会被破坏。当然, 从机器上拔出T形接头会干扰机器的工作。8-) 如 果只是两台机器的小网络,还 是需要T形接头和50欧姆终结器—— 不能用直接用电缆把它们连起来! 有一些有趣的电缆系统看起来象用一根导线连到网卡上,但实际上是 有两根并排 的导线包在外面的套子里,其截面为椭圆形。在环路的转折点, 用拼接的BNC连 接器连到网卡上。所以它等同于用两根电缆和一个BNC的T形 接头,但在这种情况 下,用户不可能从T形接头的一边移走电缆来干扰网络。 6.2 双绞线 双绞线网络需要主动态的Hub,每个Hub起码要$50,未加工的电缆 费用实际上比 细缆要高。你可以不理会那些声称可以使用已有电话线的说 法,因为这种安装情 况是很少见的。 另一方面,所有100Mb/sec以太网提议都使用双绞线,而且绝大多数新的商 业安 装使用的也是双绞线。此外,Russ Nelson进一步提出“新的布线应该 使用5类线 。使用其它的电缆都是在浪费安装者的时间,因为任一种100Base 都将要求使 用5类线。” 如果只是连接两台机器,可以通过交换接收与发送线(1-2和3-6)来避免 使 用Hub。 如果你拿著RJ-45连接头冲著自己(就象你要把它插到自己嘴里),锁扣朝 上, 那么从左到右各插脚的编号依次是1到8。各插脚的用途如下: 插脚编号 任务 ---------- ---------- 1 输出数据 (+) 2 输出数据 (-) 3 输入数据 (+) 4 保留为电话使用 5 保留为电话使用 6 输入数据 (-) 7 保留为电话使用 8 保留为电话使用 如果你想自己制作一条电缆,请认真阅读下文。一对差分信号必须使用同 一条双 绞线,以满足UTP电缆所要求的最小阻抗/损耗。如果看一下上面的 表格,就知 道1+2和3+6是两对差分信号。不是1+3和2+6!!!!在10MHz, 长度较短的情况 下,出这样的错还可以工作,但仅限于线路长度较短的情 况下。在100MHz时想都 不要想出错会怎么样。 对于末端为“A”和“B”的普通接插线,你要做一个插脚到插脚的映射, 输入和 输出分别使用一对双绞线(出于阻抗的原因)。这就意味著1A连到 1B,2A连 到2B,3A连到3B,6A连到6B。连接1A-1B和2A-2B的必须是一条双 绞线。同样,连 接3A-3B和6A-6B的必须是另一条双绞线。 如果目前没有Hub,想做一条“空电缆”,那么要做的就是把“B”的输出 作为 “A”的输入,把“A”的输出作为“B”的输入,同时不改变它们的极 性。也就 是说,把1A连到3B(A的输出+到B的输入+),把2A连到6B(A的输 出-到B的输 入-)。这两根线必须是一条双绞线。它们把网卡/插脚“A”作 为输出传送,把 网卡/插脚“B”作为输入传送。然后把3A连到1B(A的输入+ 到B的输出+), 把6A连到2B(A的输入-到B的输出-)。这两根线也必须是 一条双绞线。它们把网 卡/插脚“A”作为输入传送,把网卡/插脚“B”作 为输出传送。 因此,如果想使用普通接插线,需要砍掉它的一端,交换接收和发送双绞 线的位 置后插入新的插头,把它压紧,就得到一条“空”电缆了。一点也 不复杂。只不 过是把一块网卡的发送信号送到第二块网卡的接收端,如法 炮制就可以了。 注意,在10BaseT被批准为标准之前,就存在其它使用RJ-45连接头的网络 格式和 上述的连线安排。例如SynOptics的LattisNet和AT&T的StarLAN。 在某些情况下 ,(如使用早期的3C503网卡)可以设置网卡上的跳线使网卡 能够与不同类型 的Hub连接,但绝大多数情况下,为这些老式类型网络设计 的网卡无法工作在标 准10BaseT网络/Hub下。(注意,如果网卡还有一个AUI 端口,那么肯定可以 把AUI和10BaseT收发器混合在一起使用。) 6.3 粗缆以太网 粗缆以太网几乎全部被废弃了,一般只用在与一个已存在网络保持兼容。 可以放 松规定并使用被动的$3的N-to-BNC连接器把大量粗缆以太网和细缆 连接起来,这 通常是扩展已有粗缆以太网的最佳解决方案。对这种情况一 个正确(但代价昂贵 )的方案是使用转发器。 7. 软件设置与网卡诊断 大多数情况下,如果用软件进行配置并把配置保存在EEPROM里,一般需要 重新启 动DOS,使用销售商提供的DOS程序来设置网卡的中断IRQ、I/O、内 存地址和其它 东西。此外,希望这是只要设置一次的东西。如果没有网卡 的DOS软件,试著在 网卡制造商的WWW站点上找找。如果不知道站点名称, 可以猜一下,如 “www.my_vendor.com”,其中“my_vendor”是网卡制造 商的名称。这种方法 对SMC、3Com和许多许多其它制造商都有效。 有些网卡有Linux版本的配置工具,并在本文中列出。Donald编写了几个运 行 在Linux下的小的网卡诊断程序,其中大部分都是他在编写驱动程序时使 用的诊 错工具。不要指望有花哨的菜单驱动界面。在使用绝大部分工具时, 你需要阅读 源码。即使你所用的网卡没有相应的诊断工具,你还是可以通 过cat /proc/net/dev获得一些信息——假设至少在启动时你的 网卡被检测到了。 随便哪种情况下,都得在启动时运行这些程序(允许对端口进行I/O操作), 而 且可能在这么做之前要先用ifconfig eth0 down关闭以太网卡。 7.1 以太网卡的配置程序 WD80x3网卡 对于使用wd80x3网卡的人,在Linux的FTP站点上可以找到的 wdsetup-0.6a.tar.gz里有一个程序wdsetup。它的维护不是很 好,有一段时间没 有更新了。如果能用,那么很好;如果不行,那么只好 使用应当和网卡一起拿到 的DOS版本程序。如果没有这样的DOS版本程序, 还是可以很高兴地告诉你, 从SMC的FTP站点上可以获取设置/驱动程序磁盘。 当然,你必须有一个带EEPROM 的网卡才能使用该工具。很老很老 的wd8003网卡和一些wd8013兼容网卡使用跳线 来设置网卡。 Digital/DEC网卡 Digital的EtherWorks 3网卡可以用类似于DOS程序NICSETUP.EXE的方 式进行配置 。David C. Davies编写了这一工具以及和驱动程序在一起的其 它EtherWorks 3 工具。查看一下你本地的Linux FTP站点下的目录 /pub/linux/system/Network/management,寻找名为 ewrk3tools-X.XX.tar.gz的 文件。 NE2000+或AT/LANTIC网卡 有些Nat Semi的DP83905产品(如AT/LANTIC和NE2000+)是可以用软件配置 的。 (注意,这些网卡也可以仿真wd8013网卡!)你可以从Donald的FTP服 务 器cesdis.gsfc.nasa.gov下载文件 /pub/linux/setup/atlantic.c来配置此网卡 。另外,Kingston 的DP83905网卡配置程序看起来可以用在所有网卡上,因为在 允许使用网卡 前,它们并不检查销售商指定的地址。按照如下URL: [111]Kingston Software下载20XX12.EXE和INFOSET.EXE。 在配置NE2000+网卡时要格外小心,因为设定的值有错误会带来麻烦。一个 典型 的错误是启用EEPROM里的启动ROM(即使没有安装ROM)会与VGA卡发生 冲突。其 结果就是开机后屏幕没有显示,计算机只是发出一些叫声。 一般如下操作就可以解决问题:拔出机器里的卡,然后启动进入CMOS设置。 把 “Display Adapter”改为“Not Installed”并把缺省的启动驱动器改 为“A:” (软盘驱动器)。同时把“Wait for F1 if any Error”改为 “Disabled”。这 样,计算机就无需用户干预可以启动了。现在创建一个 可启动的DOS软盘( “format a: /s /u”),把上述档案文件 20XX12.EXE里的程序default.exe拷贝 到软盘上。再键入 echo default > a:autoexec.bat,这样在用这张软盘启动时 , 该程序会自动运行,把网卡设置为正常的缺省值。关闭机器,重新安装 ne2000+网卡,插入新的启动软盘,再开机。可能机器还会发出叫声,但最 后你 会看到机器从软盘启动时软驱的灯亮了。等一两分钟,软驱会停下来, 表 示default.exe程序运行结束,再关闭机器电源。再次启动时,可 能你的显式器 就又工作正常了,这时就可以把CMOS设置改回去,并把网卡 EEPROM设置改回到希 望的值。 注意,如果手头没有DOS,你可以用一张自动运行Donald的atlantic 程序(使用 正确的命令行开关)的Linux启动软盘来完成上面的工作,代替 自动运 行default.exe程序的DOS启动软盘。 3Com网卡 3Com的Etherlink III系列网卡(如3c5x9)可以用Donald的另一个配置工 具进行 配置。你可以从Donald的FTP服务器cesdis.gsfc.nasa.gov上 获取文 件/pub/linux/setup/3c5x9setup.c来配置这些网卡。 (注意,DOS下的3c5x9B配 置工具可能有一些属于Etherlink III的“B”系 列的额外选项。) 7.2 以太网卡的诊断程序 Donald编写的诊断程序都可以从以下URL获取。 [112]Ethercard Diagnostics Allied Telesis AT1700 -- 在cesdis.gsfc.nasa.gov下寻找文件 /pub/linux/diag/at1700.c。 Cabletron E21XX -- 在cesdis.gsfc.nasa.gov下寻找文件 /pub/linux/diag/e21.c。 HP PCLAN+ -- 在cesdis.gsfc.nasa.gov下寻找文件 /pub/linux/diag/hp+.c。 Intel EtherExpress -- 在cesdis.gsfc.nasa.gov下寻找文件 /pub/linux/diag/eexpress.c。 NE2000 cards -- 在cesdis.gsfc.nasa.gov下寻找文件 /pub/linux/diag/ne2k.c。对于现在常用的NE2000-PCI兼容网卡 还有一个PCI版 本的程序。 RealTek (ATP)袖珍适配器 -- 在cesdis.gsfc.nasa.gov下寻找文件 /pub/linux/diag/atp-diag.c。 所有其它网卡 -- 试著用cat /proc/net/dev和dmesg来看 看内核里有关想了解网 卡的有用信息。 8. 技术信息 对于那些想了解更多有关网卡如何工作、或如何使用现有驱动程序,以及 试图为 目前不支持的网卡编写自己的驱动程序的人来说,这些信息应该会 有用。如果你 没有这种想法,那么最好跳过这一节。 8.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,等等。) 8.2 编写驱动程序 在Linux下使用以太网卡所必需的只不过是相应的驱动程序。因此,关键是 制造 商要向公众公开编程的技术资料,而无需你(或其他什么人)签署什 么协议。关 于获取资料的可能性(也许你不编写代码,那么就是其他人编 写你确实需要的驱 动程序的可能性),一个较好的指南是Crynwr (昵称 Clarkson)的包驱动程序的 可用性。Russ Nelson在干这些事,对开发Linux 驱动程序很有帮助。网上冲浪者 可以试著看一下Russ的软件。 [113]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: [114]KHG 8.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通道,并完全关闭以节约能源(象收发器 一样)。 杂项函数 如同一个重新设置函数,如果事情变得很糟,驱动程序可以试图重新设置 网卡作 为最后防线。一般在发送超时或类似情况下如此进行。也是一个读 取网卡统计寄 存器的函数,如果是这样配备的话。 8.4 3Com的技术信息 如果对3Com网卡驱动程序的工作感兴趣,可以从3Com公司获取技术资料。 Cameron友好地告诉了我们该如何去做: 在我们的“技术参考文献”(TRs)里给出了3Com的以太网适配器驱动程序 程序 员需要了解的资料。这些手册描述了板上的程序员接口,但没有提及 诊断、安装 程序等终端用户所看到的东西。 网络适配器分部的市场部有技术参考资料分发。为了使这个计划更有效, 我们把 它集中到一个称作“CardFacts”的自动电话系统里。你可以打电话 来,然后它 把资料传真给你。要索取技术参考资料,打电话到408-727-7021。 索取开发人员 的订单,资料号是9070。在打电话前准备好你的传真号码。 填完订单后把它传真 到408-764-5004。手册会由联邦速递的次日服务送到。 有人认为我们的手册不该免费,他们也在寻找此系统过于昂贵或占用的时 间和努 力太多的证据。到目前为止,3Com的顾客确实不错,向我们提出的 要求也很合理 。我们需要你们的继续合作并把这样的服务维持下去。 8.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。这是免费的。 要迅速了解一块网卡是否“标准”网卡只需要看一下它。如果是标准的, 网卡上 只有一块大的芯片、一块晶振、一块小的IEEE地址PROM、可能还有 一个启动ROM 的插座和一个连接器(依照提供的媒介选项可能是1、2或3)。 注意,如果是同 轴电缆网卡,卡上就应该有一些收发器缓存,它们靠近连 接器,远离PCnet-ISA 。” 一个可能的网卡黑客需要注意,不同的LANCE产品采用不同的“重起”方法。 有 些恢复到上次离开网络环路的地方,另一些则从环路的开头开始,就象 刚被初始 化一样。 8.6 广播与混杂模式 Donald所做的另一个工作是实现广播与混杂模式的钩子。所有发布的 (即不 是ALPHA的)ISA驱动程序现在都支持混杂模式。 Donald写道:“我准备从讨论混杂模式开始,它从概念上来说很容易实现。 对大 多数硬件,你只需要设置一个寄存器位,然后就可以接收到线路上的 每一个数据 包。对,差不多就这么简单;对有些硬件,你必须先关闭板卡 (可能会丢失若干 数据包),重新配置它,然后重新启用以太网卡。对吧, 就这么简单,下面要讨 论的就不是这么明显了:广播模式。它可以用两种 方式实现: 1. 使用混杂模式和一个如Berkeley包过滤器(BPF)的数据包过滤器。 BPF是一 个模式匹配指令语言,可以编写一个程序挑出感兴趣的地址。它的 优点在于 它很普遍和可编程。其缺点是没有一个一般性的方法可以让内核 避免打开混 杂模式和通过每一个注册的包过滤器运行每一个线路上的数据 包。参见 [115]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 bit 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比特哈希,但是由自己从接受的广播地址列表计算出 哈希表 。 注意,这些芯片的过滤效果都不好,还需要一个中间层次的模块完成最后 的过滤 。同时还要注意,在每种情况下都必须保持一个完整的接受广播地 址列表,在出 现变化时以重新计算哈希表。 8.7 Berkeley包过滤器(BPF) 开发者普遍认为BPF的功能不该由内核提供,而是放在一个(但愿很少使用 的) 兼容库里。 对不了解的人来说:BPF(Berkeley包过滤器)是一种向内核网络层说明对 哪些 数据包感兴趣的机制。它是用一种建立在底层网络代码中的特殊指令 语言解释器 实现的。应用程序把一个用这种语言编写的程序传递给内核, 然后内核对每一个 接收到的数据包执行该程序。如果内核有多个BPF应用程 序,对每个数据包都要 运行这几个程序。 问题在于很难从数据包过滤器程序推断出应用程序实际上对哪一种数据包 感兴趣 ,所以一般的解决方法就是始终运行过滤器。假设一个应用程序注 册的BPF程序 是获取发往某个广播地址的低速数据流。绝大多数以太网卡有 一个64个入口的哈 希表的硬件实现的广播地址过滤器,用来忽略大多数不 想要的广播数据包,所以 有可能以极低的开销完成这一操作。但是由于有 了BPF,内核必须把接口设置为 混杂模式,接收所有数据包,并对它们运行 过滤器。不管怎样,这样确实可以工 作,但考虑到对所要求的数据包进行 的处理,就已经变得过于麻烦了。 9. 便携式/笔记本电脑联网 有几种方法把笔记本电脑联上网。可以使用SLIP代码(并以串行线速率运 行); 可以使用一个有内建支持PCMCIA插槽的笔记本电脑;可以使用一个 有插座并插入 了一块ISA网卡的笔记本电脑;或者使用并口以太网适配器。 9.1 使用SLIP 这是最便宜的解决方案,但最麻烦。另外,无法获得很高的传输速率。因 为SLIP实际上与以太网卡无关,这里就不多说了。参见NET-2 Howto。 9.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支持软件包可以 从下面得 到: [116]PCMCIA Package 寻找一个类似pcmcia-cs-X.Y.Z.tgz的文件,其中X.Y.Z是最近的版本 号。很有可 能它也被上载到了FTP站点tsx-11.mit.edu。 注意,Donald的PCMCIA启用程序是一个用户级的程序,而David Hinds的程 序是 运行在内核级。最好使用David的软件包,因为它的使用很广泛,并在 继续开发 过程中。 9.3 插座内的ISA以太网卡。 笔记本电脑的插座一般要花$250,提供两个全尺寸的ISA插槽、两个串口和 一个 并口。大多数插座使用笔记本电脑的电池供电,如果使用短的ISA卡, 有若干插 座可以使用插座里附加的额外电池供电。你可以加一个便宜的以 太网卡,并享受 全速的以太网性能。 9.4 袖珍/并口适配器。 “袖珍”以太网适配器也可以满足需要。注意,由于并口的接口限制,传 输速率 不够好(可能最高是200kB/s?)。 还有一个约束是墙砖一样的电源。你可以购买/制作一个从笔记本电脑的键 盘端 口引出电源的电缆,摆脱与适配器一起的墙砖。(参见 [117]键盘电源) 参见 [118]DE-600 / DE-620和 [119]RealTek以了解支持的两款袖珍适配器。 10. 杂项 所有不适合放在别处的相关信息都堆在这里。可能不相干,也可能大家不 感兴趣 ,但还是放在这儿了。 10.1 向内核传递以太网参数 有两个通用的内核命令可以在启动时向内核传递以太网参数(ether 和reserve) 。可以用LILO、loadlin或其它接受可选参数的启动工具 完成该操作。 例如,如果命令为“blah”,希望接收3个参数(假定为123、456和789), 那么 在使用LILO时就应该如下: LILO: linux blah=123,456,789 要了解启动时参数的更多信息(和完全的列表),请参见 [120]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指令。 10.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可以删除这 些模块。 10.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: [121]Usenet FAQs 你还可以在以下URL看一下可以说是“Ethernet-HomePage”的主页: [122]Ethernet-HomePage 10.4 声明与版权 本文档不是绝对真理。它可能是你所找到的最新的资料。除了你自己, 没人会对 你的硬件出现的问题负责。如果你的以太网卡或其它的硬件冒烟 的话(几乎不可 能!),我们也不承担任何责任。也就是说,本文作者不 对任何使用本文信息采 取行动造成的损失负责。 Copyright (c) 1993-1997 本文的版权所有人为Paul Gortmaker。在保留 版权信 息和本许可内容的条件下,本文档允许任意复制和传播。 在保留原始版权信息的条件下,允许复制和传播本文档修改后的版本;在 本许可 内容不变的条件下,允许传播所有依据本文档推导出的结果。 在上述针对修改版本的条件下,允许复制和传播本文档的其它语言翻译版 本。 对翻译者的提示。首先,翻译SGML源文件(可以用FTP从HowTo主站点获得), 这 样可以生成其它的输出格式。请注意保留一份翻译的原始英文SGML源文 件!在发 布更新后的HowTo时,获取该版本的新SGML源文件,简单地使用 diff -u old.sgml new.sgml就可以知道何处有变动,并把这些变动 放入你的翻译版本, 无需重新阅读或重新翻译全部内容。 如果你想在公开出版物中使用本文档,请联系本文作者(通过e-mail), 这样可 以获得最新的资料。以前有些Linux HowTo的过时版本被公开出版, 使得开发者 为一些在更新版本中已经回答过的问题饱受折磨。 10.5 结束语 如果你在本文档中发现有错别字或过时信息,请给我发e-mail。本文档比 较大, 所以很容易出现疏漏。如果你曾发e-mail要求改正,而在新版本中 依然没改过来 ,请把改正要求再发一遍,可能你的上一封e-mail被我平时 收到的大量垃圾信件 掩盖了。 谢谢! Paul Gortmaker, p_gortmaker@yahoo.com (戈绍男,isaac_ge@yahoo.com) References 1. file://localhost/tmp/zh-sgmltools.16605/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.16605/Ethernet-HOWTO.txt.html#help 5. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#faq 6. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#what-card 7. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#card-intro 8. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#tech-intro 9. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#mystery 10. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#card-intro 11. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#modules 12. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#faq 13. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#data-xfer 14. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#pcnet-32 15. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#dec-21040 16. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#vortex 17. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#eepro100 18. http://cesdis.gsfc.nasa.gov/linux/misc/100mbs.html 19. http://cesdis.gsfc.nasa.gov/linux/drivers/100vg.html 20. http://alumni.caltech.edu/~dank/fe/ 21. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#cable 22. http://www.dejanews.com/ 23. http://cesdis.gsfc.nasa.gov/linux/ 24. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#lilo 25. http://cesdis.gsfc.nasa.gov/linux/misc/multicard.html 26. http://www.roestock.demon.co.uk/isapnptools/ 27. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#lilo 28. http://www.efficient.com/ 29. http://www.zeitnet.com/ 30. http://lrcwww.epfl.ch/linux-atm/ 31. http://www.geog.ubc.ca/sparc 32. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#utp 33. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#3com-tech 34. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#3com-probs 35. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#modules 36. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#alfa 37. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#alfa 38. http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html 39. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#pcmcia 40. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#pcmcia 41. http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html 42. http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html 43. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#dec-21040 44. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#lance 45. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#amd-notes 46. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#lance 47. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#amd-notes 48. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#rtl8139 49. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#at-1500 50. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#ne1500 51. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#ether 52. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#amd-notes 53. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#alfa 54. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#modules 55. http://cesdis.gsfc.nasa.gov/linux/ 56. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#lance 57. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#amd-notes 58. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#ether 59. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#modules 60. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#lance 61. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#lance 62. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#dec-21040 63. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#lance 64. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#tlan 65. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#dec-21040 66. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#lance 67. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#amd-notes 68. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#dec-21040 69. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#pcmcia 70. http://cesdis.gsfc.nasa.gov/linux/pcmcia.html 71. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#lance 72. http://cesdis.gsfc.nasa.gov/linux/drivers/tulip.html 73. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#alfa 74. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#modules 75. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#modules 76. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#amd-notes 77. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#lance 78. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#amd-notes 79. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#z-note 80. http://peipa.essex.ac.uk/html/linux-thinkpad.html 81. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#pcmcia 82. http://cesdis.gsfc.nasa.gov/linux/pcmcia.html 83. http://www.ultranet.com/~stalba/eep10pci.html 84. http://cesdis.gsfc.nasa.gov/linux/drivers/eepro100.html 85. http://www.kingston.com/ 86. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#de-620 87. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#de-650 88. http://www.mylex.com/ 89. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#dec-21040 90. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#ne2k-probs 91. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#diag 92. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#modules 93. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#lance 94. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#amd-notes 95. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#lance 96. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#dec-21040 97. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#alfa 98. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#alfa 99. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#ne2k-pci 100. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#3c501 101. http://www.smc.com/ 102. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#8013-probs 103. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#modules 104. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#modules 105. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#dec-21040 106. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#dec-21040 107. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#smc 108. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#dec-21040 109. http://www.slug.org.au/NIC/ 110. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#cable-intro 111. http://www.kingston.com/download/etherx/etherx.htm 112. ftp://cesdis.gsfc.nasa.gov/pub/linux/diag/index.html 113. http://www.crynwr.com/crynwr/home.html 114. http://www.redhat.com:8080/HyperNews/get/khg.html 115. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#bpf 116. ftp://cb-iris.stanford.edu/pub/pcmcia 117. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#aep-100 118. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#de-600 119. file://localhost/tmp/zh-sgmltools.16605/Ethernet-HOWTO.txt.html#aep-100 120. http://metalab.unc.edu/mdw/HOWTO/BootPrompt-HOWTO.html 121. ftp://rtfm.mit.edu/pub/usenet-by-hierarchy/ 122. http://wwwhost.ots.utexas.edu/ethernet/ethernet-home.html