Linux 和 3Com EtherLink III 系列以太网卡(驱动程序 v1.18c 及更高版本)¶
本文档包含 v1.18c 及更高版本 3c509 驱动程序的使用说明和注意事项。在阅读本文档之前,请勿使用该驱动程序。
版本 1.0
2002 年 2 月 28 日
- 当前维护者(更正请联系)
David Ruggiero <jdr@farfalle.com>
简介¶
以下是关于在 Linux 中使用 3Com EtherLink III 系列以太网卡的说明和信息。这些网卡通常以最广泛使用的网卡的 3Com 型号 3c509 为人所知。它们都是 10mb/s ISA 总线网卡,不应(但有时会)与类似编号的 PCI 总线“3c905”(又名“Vortex”或“Boomerang”)系列混淆。内核对 3c509 系列的支持由模块 3c509.c 提供,该模块包含支持以下所有型号的代码
3c509(原始 ISA 网卡)
3c509B(ISA 网卡的后续版本;支持全双工)
3c589 (PCMCIA)
3c589B(3c589 的后续版本;支持全双工)
3c579 (EISA)
本文档的大部分内容大量借鉴了 3c509 驱动程序的原始作者 Donald Becker 编写的指南。该文档的主副本(包含旧版本驱动程序的说明)目前位于 Scyld 网络服务器上:http://www.scyld.com/。
特殊驱动程序功能¶
覆盖网卡设置
驱动程序允许在启动或加载时覆盖网卡检测到的 IOADDR、IRQ 和收发器设置,尽管通常不需要此功能,除非启用全双工模式(见下文)。以下是 LILO 参数的语法示例
ether=10,0x310,3,0x3c509,eth0
这会将找到的第一个 3c509 网卡配置为 IRQ 10、基本 I/O 0x310 和收发器类型 3 (10base2)。必须设置标志“0x3c509”,以避免覆盖 I/O 地址时与其他网卡类型冲突。当驱动程序作为模块加载时,只能覆盖 IRQ。例如,将两张网卡设置为 IRQ10 和 IRQ11 可以通过使用 irq 模块选项来完成
options 3c509 irq=10,11
全双工模式¶
v1.18c 驱动程序增加了对 3c509B 全双工功能的支持。为了启用并成功使用全双工模式,必须满足三个条件
(a) 您必须拥有硬件支持全双工操作的 Etherlink III 网卡型号。目前,已知肯定支持全双工的 3c509 系列成员只有 3c509B(ISA 总线)和 3c589B (PCMCIA) 网卡。没有“B”型号标识的网卡不支持全双工模式;这些包括原始 3c509(没有“B”),原始 3c589,3c529(MCA 总线)和 3c579 (EISA 总线)。
(b) 您必须使用网卡的 10baseT 收发器(即 RJ-45 连接器),而不是其 AUI(粗缆)或 10base2(细缆/同轴)接口。AUI 和 10base2 网络电缆在物理上无法进行全双工操作。
(c) 最重要的是,您的 3c509B 必须连接到本身支持全双工的链路伙伴。这几乎肯定是以下两种情况之一:支持全双工的以太网交换机(不是集线器),或者另一个系统上支持全双工的 NIC,该系统通过交叉电缆直接连接到 3c509B。
可以使用“ethtool”启用全双工模式。
警告
关于全双工模式的极其重要的注意事项
请理解,3c509B 硬件的全双工支持比更现代的网络接口卡提供的支持要有限得多。虽然在网络的物理层面上,它完全支持全双工操作,但该网卡是在当前以太网自动协商 (N-way) 规范编写之前设计的。这意味着 3c509B 系列*不能也不会在任何情况下与链路伙伴自动协商全双工连接,无论如何初始化*。如果启用了 3c509B 的全双工模式,其链路伙伴很可能也需要被独立地强制进入全双工模式;否则会发生各种可怕的故障——至少,您会看到大量的包冲突。这是极少数需要禁用自动协商并强制网络接口卡或交换机的双工模式的情况之一。
可用收发器类型¶
对于驱动程序 v1.18c 及更高版本,可用的收发器类型为
0 |
来自 EEPROM 配置的收发器类型(通常为 10baseT);强制半双工 |
1 |
AUI(粗缆 / DB15 连接器) |
2 |
(未定义) |
3 |
10base2(细缆 == 同轴 / BNC 连接器) |
4 |
10baseT (RJ-45 连接器);强制半双工模式 |
8 |
从网卡的 EEPROM 配置设置中获取收发器类型和双工模式 |
12 |
10baseT (RJ-45 连接器);强制全双工模式 |
在驱动程序版本 1.18c 之前,仅支持收发器代码 0-4。请注意,新的收发器代码 8 和 12 是唯一可以启用全双工模式的代码,无论网卡检测到的 EEPROM 设置如何。这确保了仅仅从早期版本升级驱动程序永远不会自动在现有安装中启用全双工模式;必须始终通过这些代码之一显式启用才能激活。
可以使用“ethtool”更改收发器类型。
错误消息的解释和常见问题¶
错误消息¶
eth0:中断中出现无限循环,状态 2011。这些是“基本无害”的消息,表明驱动程序在该中断周期中工作量太大。状态为 0x2011 时,您接收数据包的速度比从网卡中删除数据包的速度快。这在正常操作中应该很少见或不可能。导致此错误报告的可能原因包括
启用了“绿色”模式,在没有键盘活动时会降低处理器速度。
某些其他设备或设备驱动程序占用总线或禁用中断。检查 /proc/interrupts 是否有过度中断计数。定时器滴答中断应始终比其他中断增加更快。
未收到数据包¶
如果 3c509、3c562 或 3c589 可以成功发送数据包,但从未接收数据包(如 /proc/net/dev 或 'ifconfig' 报告),则您可能存在中断线路问题。检查 /proc/interrupts 以验证网卡是否实际生成中断。如果中断计数没有增加,则您可能与两个尝试使用同一 ISA IRQ 线路的设备发生物理冲突。常见的冲突是声卡在 IRQ10 或 IRQ5 上,最简单的解决方案是将 3c509 移动到不同的中断线路。如果设备正在接收数据包但“ping”不起作用,则您存在路由问题。
/proc/net/dev 中报告的 Tx 载波错误¶
如果 EtherLink III 似乎正在发送数据包,但 /proc/net/dev 中的“Tx 载波错误”字段的增量与 Tx 数据包计数一样快,则您可能有一个未端接的网络或选择了错误的媒体收发器。
在具有 ISA PnP BIOS 的计算机上未检测到 3c509B 网卡。¶
虽然更新的驱动程序适用于大多数 PnP BIOS 程序,但并非适用于所有程序。这可以通过使用 3Com 提供的设置程序禁用 PnP 支持来解决。
在超频的计算机上未检测到 3c509 网卡¶
将 id_read_eeprom() 中的延迟时间从当前值 500 增加到荒谬的高值,例如 5000。
解码状态和错误消息¶
主状态寄存器中的位是
值 |
描述 |
---|---|
0x01 |
中断锁存 |
0x02 |
Tx 过载,或 Rx 欠载 |
0x04 |
Tx 完成 |
0x08 |
Tx FIFO 空间可用 |
0x10 |
完整的 Rx 数据包已到达 |
0x20 |
Rx 数据包已开始到达 |
0x40 |
驱动程序已请求中断 |
0x80 |
统计计数器即将满 |
传输 (Tx) 状态字中的位是
值 |
描述 |
---|---|
0x02 |
窗口外冲突。 |
0x04 |
状态堆栈溢出(通常不可能)。 |
0x08 |
16 次冲突。 |
0x10 |
Tx 欠载(PCI 总线带宽不足)。 |
0x20 |
Tx 喋喋不休。 |
0x40 |
Tx 中断请求。 |
0x80 |
状态有效(应始终设置)。 |
发生传输错误时,驱动程序会生成一条状态消息,例如
eth0: Transmit error, Tx status register 82
此处通常看到的两个值是
0x82¶
窗口外冲突。当某些其他以太网主机在半双工网络上错误地设置为全双工时,通常会发生这种情况。
0x88¶
16 次冲突。当网络异常繁忙或另一个主机在发生冲突后未正确退避时,通常会发生这种情况。如果此错误与 0x82 错误混合在一起,则是主机错误地设置为全双工的结果(请参见上文)。
这两个错误都是网络问题导致的结果,应予以纠正。它们不代表驱动程序故障。
修订历史(此文件)¶
28Feb02 v1.0 DR 新增;主要部分基于 Becker 原始 3c509 文档