Linux 和 3Com EtherLink III 系列以太网卡(驱动程序 v1.18c 及更高版本)¶
此文件包含关于 3c509 驱动程序 v1.18c 及更高版本的说明和注意事项。在阅读此文件之前,请勿使用该驱动程序。
版本 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 Web 服务器上: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。请注意,无论网卡检测到的 EEPROM 设置如何,新的收发器代码 8 和 12 都是唯一能启用全双工模式的代码。这确保了仅仅将驱动程序从早期版本升级永远不会在现有安装中自动启用全双工模式;它必须始终通过这些代码之一显式启用才能激活。
可以使用“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 文档