ARCnet¶
注意
如果您像我们中的许多人一样,没有得到 ARCnet 卡的手册,请参阅本目录中的 ARCnet 硬件 以获取跳线设置和电缆连接信息。
既然没有人听我的,也许一首诗会引起你的注意
This driver's getting fat and beefy,
But my cat is still named Fifi.
嗯,我想我可以称它为一首诗,即使只有两行。嘿,我是计算机科学专业的,不是英语专业的。饶了我吧。
关键是:如果你测试了这个并让它工作了,我真的真的真的真的真的想听到你的消息。或者如果你没有。或者任何事情。
ARCnet 0.32 ALPHA 首次进入 Linux 内核 1.1.80 - 这很好,但之后甚至更少的人开始写信给我,因为他们甚至不必安装补丁。 <叹息>
拜托,做一个绅士!给我发一份成功报告!
(嘿,这甚至比我原来的诗更好...这变得糟糕了!)
警告
如果你不尽快通过电子邮件告诉我你的成功/失败,我可能会被迫开始唱歌。我们不希望那样,对吧?
(你知道,可能会有人认为我过于强调这一点了。如果你这么认为,为什么不在一封简短的电子邮件中抨击我呢?请同时包括您使用的卡类型、软件、网络规模以及它是否正常工作。)
我的电子邮件地址是:apenwarr@worldvisions.ca
这些是 Linux 的 ARCnet 驱动程序。
这个新版本 (2.91) 由 David Woodhouse <dwmw2@infradead.org> 整理而成,旨在添加对另一个芯片组的支持后整理驱动程序。现在,通用支持已与各个芯片组驱动程序分离,并且源文件不再包含那么多 #ifdefs!我对这个文件做了一些修改,但保留了 Avery 的第一人称视角,因为我不想完全重写它。
之前的版本是我(Avery Pennarun)经过几个月的断断续续的努力,以及来自其他人的许多错误报告/修复和建议,特别是来自 Tomasz Motylewski 的大量投入和编码的结果。从 ARCnet 2.10 ALPHA 开始,Tomasz 全新改进的 RFC1051 支持已包含在内,并且似乎运行良好!
我在哪里讨论这些驱动程序?¶
Tomasz 非常友善地建立了一个新的改进的邮件列表。通过发送带有正文“subscribe linux-arcnet 你的真实姓名”的消息到 listserv@tichy.ch.uj.edu.pl 来订阅。然后,要向列表提交消息,请发送邮件至 linux-arcnet@tichy.ch.uj.edu.pl。
邮件列表的存档位于
linux-net@vger.kernel.org(现在已失效,已替换为 netdev@vger.kernel.org)上的人也以非常乐于助人而闻名,尤其是在我们谈论可能一开始就无法正常工作的 ALPHA Linux 内核时。
其他驱动程序和信息¶
您可以访问我在万维网上的 ARCNET 页面:
此外,SMC(生产 ARCnet 卡的公司之一)有一个您可能感兴趣的网站,其中包括各种卡的驱动程序,包括 ARCnet。试试
Performance Technologies 制造各种支持 ARCnet 的网络软件
http://www.perftech.com/ 或 ftp 到 ftp.perftech.com。
Novell 为 DOS 制作了一个网络协议栈,其中包括 ARCnet 驱动程序。尝试 FTP 到 ftp.novell.com。
您可以从 oak.oakland.edu:/simtel/msdos/pktdrvr 获取 Crynwr 数据包驱动程序集合(包括 arcether.com,您希望与 ARCnet 卡一起使用的那个)。但是,如果没有补丁,它在 386+ 上无法完美运行,并且也不喜欢某些卡。固定版本可在我的 WWW 页面上找到,或者如果您没有 WWW 访问权限,可以通过电子邮件获取。
安装驱动程序¶
您需要做的就是安装驱动程序
make config
(be sure to choose ARCnet in the network devices
and at least one chipset driver.)
make clean
make zImage
如果您获得此 ARCnet 软件包作为当前内核中 ARCnet 驱动程序的升级,您需要首先将 arcnet.c 复制到 linux/drivers/net 目录中的那个。
如果您重新启动到新的 Linux 内核时收到一些 ARCnet 消息,您将知道驱动程序已正确安装。
有四个芯片组选项
标准 ARCnet COM90xx 芯片组。
这是普通的 ARCnet 卡,您可能已经有了。这是唯一的芯片组驱动程序,如果未告知卡的位置,它将自动探测。它遵循命令行上的选项
com90xx=[<io>[,<irq>[,<shmem>]]][,<name>] | <name>
如果将芯片组支持作为模块加载,则选项为
io=<io> irq=<irq> shmem=<shmem> device=<name>
要禁用自动探测,只需在内核命令行上指定“com90xx=”。要单独指定名称,但允许自动探测,只需输入“com90xx=<name>”
ARCnet COM20020 芯片组。
这是来自 SMC 的新芯片组,支持混杂模式(数据包嗅探)、额外的诊断信息等。不幸的是,没有明智的方法可以自动探测这些卡。您必须在内核命令行上指定 I/O 地址。
命令行选项是
com20020=<io>[,<irq>[,<node_ID>[,backplane[,CKP[,timeout]]]]][,name]
如果将芯片组支持作为模块加载,则选项为
io=<io> irq=<irq> node=<node_ID> backplane=<backplane> clock=<CKP>
timeout=<timeout> device=<name>
COM20020 芯片组允许您在软件中设置节点 ID,从而覆盖默认值,默认值仍然在卡上的 DIP 开关中设置。如果您没有 COM20020 数据表,并且您不知道其他三个选项指的是什么,那么它们不会让您感兴趣 - 忘记它们。
IO 映射模式下的 ARCnet COM90xx 芯片组。
这也适用于普通的 ARCnet 卡,但不使用共享内存。它的性能不如上面的驱动程序,但以防万一您的卡不支持共享内存,或者(奇怪的是)您的机器中有太多 ARCnet 卡而导致 shmem 插槽耗尽,因此提供此驱动程序。如果您没有在内核命令行上给出 IO 地址,则驱动程序将找不到该卡。
命令行选项是
com90io=<io>[,<irq>][,<name>]
- 如果将芯片组支持作为模块加载,则选项为
io=<io> irq=<irq> device=<name>
ARCnet RIM I 卡。
这些是 _完全_ 内存映射的 COM90xx 芯片。对这些的支持未经测试。如果您有其中一个,请通过邮件将成功报告发送给作者。必须指定所有选项,设备名称除外。命令行选项
arcrimi=<shmem>,<irq>,<node_ID>[,<name>]
如果将芯片组支持作为模块加载,则选项为
shmem=<shmem> irq=<irq> node=<node_ID> device=<name>
可加载模块支持¶
配置并重新构建 Linux。当被问及时,如果您想使用可加载模块,请回答“m”以支持“通用 ARCnet 支持”和对您的 ARCnet 芯片组的支持。如果您愿意,也可以对“通用 ARCnet 支持”说“y”,对芯片组支持说“m”。
make config
make clean
make zImage
make modules
如果您使用的是可加载模块,则需要使用 insmod 加载它,并且可以在命令行上指定卡的各种特性。(在最新版本的驱动程序中,自动探测更加可靠并且可以作为模块工作,因此现在大部分都是不必要的。)
例如
cd /usr/src/linux/modules
insmod arcnet.o
insmod com90xx.o
insmod com20020.o io=0x2e0 device=eth1
使用驱动程序¶
如果您构建的内核包含 ARCnet COM90xx 支持,它应该在您启动时自动探测您的卡。如果您使用编译到内核中的不同芯片组驱动程序,则必须在内核命令行上给出必要的选项,如上所述。
阅读 Linux 的 NET-2-HOWTO 和 ETHERNET-HOWTO;它们应该可以在您获取此驱动程序的地方找到。将您的 ARCnet 视为一个增强型的(或降低型的,视情况而定)以太网卡。
顺便说一句,请务必将 HOWTO 中的所有引用从“eth0”更改为“arc0”。请记住,ARCnet 不是“真正的”以太网,并且设备名称是不同的。
一台计算机中的多张卡¶
Linux 现在对此有很好的支持,但由于我一直很忙,ARCnet 驱动程序在这方面受到了一些影响。如果编译到内核中,COM90xx 支持将(尝试)自动检测所有已安装的卡。
如果您有其他卡,并且支持已编译到内核中,那么您可以简单地重复内核命令行上的选项,例如
LILO: linux com20020=0x2e0 com20020=0x380 com90io=0x260
如果您将芯片组支持构建为可加载模块,则需要执行以下操作
insmod -o arc0 com90xx
insmod -o arc1 com20020 io=0x2e0
insmod -o arc2 com90xx
ARCnet 驱动程序现在会自动整理它们的名称。
我如何让它与...一起工作?¶
- NFS
linux->linux 应该没问题,只需假装您正在使用以太网卡。 oak.oakland.edu:/simtel/msdos/nfs 有一些不错的 DOS 客户端。还有一个基于 DOS 的 NFS 服务器,称为 SOSS。它没有像 Linux 那样进行多任务处理(实际上,它根本没有进行多任务处理),但你永远不知道你可能需要什么。
对于 AmiTCP(可能还有其他),您可能需要在 Amiga nfstab 中设置以下选项:MD 1024 MR 1024 MW 1024(感谢 Christian Gottschling <ferksy@indigo.tng.oche.de> 提供此信息。)
可能这些指的是最大 NFS 数据/读取/写入块大小。我不知道为什么 Amiga 上的默认值不起作用;如果您知道更多,请写信给我。
- DOS
如果您正在使用免费软件 arcether.com,您可能需要从我的网页安装驱动程序补丁。它可以帮助 PC/TCP,并且如果 arcether 在初始化期间超时太快,也可以让 arcether 加载。事实上,如果您在 386+ 上使用它,您真的需要这个补丁。
- Windows
参见 DOS :) Trumpet Winsock 可以与 Novell 或 Arcether 客户端一起正常工作,前提是您记得加载 winpkt。
- LAN Manager 和 Windows for Workgroups
这些程序使用的协议与 Internet 标准不兼容。他们试图假装这些卡是以太网卡,并混淆网络上的其他人。
但是,Linux ARCnet 驱动程序 v2.00 及更高版本通过“arc0e”设备支持此协议。有关更多信息,请参见“多协议支持”部分。
使用适用于 Linux 的免费软件 Samba 服务器和客户端,您现在可以与基于 TCP/IP 的 WfWg 或 Lan Manager 网络很好地连接。
- Windows 95
Win95 包含的工具允许您使用 LANMAN 风格的网络驱动程序 (NDIS) 或 Novell 驱动程序 (ODI) 来处理您的 ARCnet 数据包。如果您使用 ODI,则需要将“arc0”设备与 Linux 一起使用。如果您使用 NDIS,请尝试“arc0e”设备。如果您需要 arc0e,您完全疯了,并且/或者您需要构建某种使用两种封装类型的混合网络,请参见下面的“多协议支持”部分。
- OS/2
我被告知它可以在 Warp Connect 下使用来自 SMC 的 ARCnet 驱动程序工作。您需要为此使用“arc0e”接口。如果您让 SMC 驱动程序与“普通”Warp Bonus Pack 中包含的 TCP/IP 一起工作,请告诉我。
ftp.microsoft.com 也有一个免费软件“Lan Manager for OS/2”客户端,它应该使用与 WfWg 相同的协议。但是,我无法在 Warp 下安装它。请通过邮件将任何结果发送给我。
- NetBSD/AmiTCP
这些使用旧版本的 Internet 标准 ARCnet 协议 (RFC1051),该协议与使用 arc0s 设备的 Linux 驱动程序 v2.10 ALPHA 及更高版本兼容。(请参见下面的“多协议 ARCnet”。)** 较新版本的 NetBSD 显然支持 RFC1201。
使用多协议 ARCnet¶
ARCnet 驱动程序 v2.10 ALPHA 在其自己的“虚拟网络设备”上支持三种协议
arc0
RFC1201 协议,官方 Internet 标准,恰好与 Novell 的 TRXNET 驱动程序 100% 兼容。ARCnet 驱动程序 1.00 版 _仅_ 支持此协议。 arc0 是三种协议中最快的(无论出于何种原因),并且允许使用更大的数据包,因为它支持 RFC1201“数据包拆分”操作。除非您有特定需要使用其他协议,否则我强烈建议您坚持使用此协议。
arc0e
“以太网封装”通过 ARCnet 发送数据包,这些数据包实际上很像以太网数据包,包括 6 字节的硬件地址。此协议与 Microsoft 的 NDIS ARCnet 驱动程序兼容,例如 WfWg 和 LANMAN 中的那个。由于 493 的 MTU 实际上小于 TCP/IP“要求”的 MTU (576),因此某些网络操作可能无法正常运行。但是,Linux TCP/IP 层可以通过自动分段 TCP/IP 数据包以使其适合来在大多数情况下进行补偿。 arc0e 的工作速度也比 arc0 稍慢,原因尚未确定。(可能导致其速度稍慢的是较小的 MTU。)
arc0s
“[简]单”RFC1051 协议是与新标准完全不兼容的“先前”Internet 标准。但是,今天的一些软件继续支持旧标准(并且仅支持旧标准),包括 NetBSD 和 AmiTCP。 RFC1051 也不支持 RFC1201 的数据包拆分,并且 507 的 MTU 仍然小于 Internet“要求”,因此您很可能会遇到问题。由于与 arc0e 相同的原因,它的速度也比 RFC1201 慢大约 25%。
arc0s 支持由 Tomasz Motylewski 贡献,并由我进行了一些修改。错误可能都是我的错。
如果您愿意,您可以选择不将 arc0e 和 arc0s 编译到驱动程序中 - 这将为您节省一些内存,并避免在尝试使用最新 Linux 内核中的“NFS-root”内容时造成混淆。
当您第一次 ifconfig arc0 设备时,将自动创建 arc0e 和 arc0s 设备。但是,要实际使用它们,您还需要 ifconfig 您需要的其他虚拟设备。然后,您可以通过多种方式设置您的网络
单协议。
这是配置网络的最简单方法:仅使用两种可用协议中的一种。如上所述,除非您有充分的理由(例如,某些其他软件,即 WfWg,仅适用于 arc0e),否则最好仅使用 arc0。
如果您只需要 arc0,那么以下命令应该可以让您开始使用
ifconfig arc0 MY.IP.ADD.RESS route add MY.IP.ADD.RESS arc0 route add -net SUB.NET.ADD.RESS arc0 [add other local routes here]
如果您需要 arc0e(并且只需要 arc0e),则略有不同
ifconfig arc0 MY.IP.ADD.RESS ifconfig arc0e MY.IP.ADD.RESS route add MY.IP.ADD.RESS arc0e route add -net SUB.NET.ADD.RESS arc0e
arc0s 的工作方式与 arc0e 非常相似。
同一线路上的多个协议。
现在事情开始变得令人困惑了。要尝试它,您可能需要有点疯狂。这是 *我* 所做的。:) 请注意,我不将 arc0s 包含在我的家庭网络中;我没有任何 NetBSD 或 AmiTCP 计算机,所以我只在有限的测试期间使用 arc0s。
我的家庭网络上有三台计算机;两台 Linux 机器(由于上述原因,更喜欢 RFC1201 协议)和一台无法运行 Linux 但运行免费 Microsoft LANMAN 客户端的 XT。
更糟糕的是,其中一台 Linux 计算机(freedom)还有一个调制解调器,并充当我的 Internet 提供商的路由器。另一台 Linux 机器 (insight) 也有自己的 IP 地址,需要将 freedom 用作其默认网关。但是,XT (patience) 没有自己的 Internet IP 地址,因此我为其分配了一个“私有子网”上的地址(如 RFC1597 中定义的)。
首先,使用一个简单的网络,其中只有 insight 和 freedom。 Insight 需要
通过 RFC1201 (arc0) 协议与 freedom 通信,因为我更喜欢它并且速度更快。
使用 freedom 作为其 Internet 网关。
这很容易做到。像这样设置 insight
ifconfig arc0 insight route add insight arc0 route add freedom arc0 /* I would use the subnet here (like I said to in "single protocol" above), but the rest of the subnet unfortunately lies across the PPP link on freedom, which confuses things. */ route add default gw freedom
Freedom 的配置如下
ifconfig arc0 freedom route add freedom arc0 route add insight arc0 /* and default gateway is configured by pppd */
太好了,现在 insight 直接在 arc0 上与 freedom 通信,并通过 freedom 将数据包发送到 Internet。如果您不知道如何执行上述操作,您现在应该停止阅读本节,因为它只会变得更糟。
现在,如何将 patience 添加到网络中?它将使用 LANMAN 客户端,这意味着我需要 arc0e 设备。它需要能够与 insight 和 freedom 通信,并且还需要使用 freedom 作为 Internet 网关。(回想一下,patience 有一个“私有 IP 地址”,该地址在 Internet 上无法使用;没关系,我为这个子网在 freedom 上配置了 Linux IP 伪装)。
因此,patience(必然;我没有来自提供商的另一个 IP 号码)的 IP 地址与 freedom 和 insight 所在的子网不同,但需要使用 freedom 作为 Internet 网关。更糟糕的是,包括 LANMAN 在内的大多数 DOS 网络程序都具有完全依赖于网络掩码和“默认网关”来确定如何路由数据包的弱智网络方案。这意味着要访问 freedom 或 insight,patience 将通过其默认网关发送数据,而不管 freedom 和 insight(通过 arc0e 设备)都可以理解直接传输的事实。
我通过为 freedom 提供一个额外的 IP 地址来补偿 - 别名“gatekeeper” - 它位于我的私有子网上,与 patience 所在的子网相同。然后,我将 gatekeeper 定义为 patience 的默认网关。
要配置 freedom(除了上面的命令)
ifconfig arc0e gatekeeper route add gatekeeper arc0e route add patience arc0e
这样,freedom 将通过 arc0e 发送所有用于 patience 的数据包,将其 IP 地址作为 gatekeeper(在私有子网上)。当它与 insight 或 Internet 通信时,它将使用其“freedom”Internet IP 地址。
您会注意到我们尚未在 insight 上配置 arc0e 设备。这可以工作,但实际上没有必要,并且需要我为 insight 分配另一个来自我的私有子网的特殊 IP 号码。由于 insight 和 patience 都使用 freedom 作为其默认网关,因此两者已经可以相互通信。
我第一次像这样设置东西真是幸运(咳嗽),因为当我将 insight 引导到 DOS 时,它真的很方便。在那里,它运行 Novell ODI 协议栈,该协议栈仅适用于 RFC1201 ARCnet。在这种模式下,insight 无法直接与 patience 通信,因为 Novell 协议栈与 Microsoft 的 Ethernet-Encap 不兼容。在不更改 freedom 或 patience 上的任何设置的情况下,我只需将 freedom 设置为 insight(现在在 DOS 中,记住)的默认网关,并且所有转发都会在通常无法相互通信的两个主机之间“自动”发生。
对于那些喜欢图表的人,我在同一物理 ARCnet 线路上创建了两个“虚拟子网”。您可以这样想象它
[RFC1201 NETWORK] [ETHER-ENCAP NETWORK] (registered Internet subnet) (RFC1597 private subnet) (IP Masquerade) /---------------\ * /---------------\ | | * | | | +-Freedom-*-Gatekeeper-+ | | | | * | | \-------+-------/ | * \-------+-------/ | | | Insight | Patience (Internet)
它工作了:现在做什么?¶
发送邮件描述您的设置,最好包括驱动程序版本、内核版本、ARCnet 卡型号、CPU 类型、网络上的系统数量以及使用的软件列表,到以下地址
我确实会回复我收到的所有消息(有时是自动回复)。我的电子邮件可能很奇怪(而且通常会在到达我的途中被转发到各处),因此如果您在合理的时间内没有收到回复,请重新发送。
它不起作用:现在做什么?¶
执行与上述相同的操作,但还要包括 ifconfig 和 route 命令的输出,以及任何相关的日志条目(即,任何以“arcnet:”开头并且自上次重启以来显示的内容)在您的邮件中。
如果您想自己尝试修复它(我强烈建议您先通过邮件告诉我问题,因为它可能已经解决了),您可能想尝试一些可用的调试级别。对于 D_DURING 或更高级别的繁重测试,首先杀死您的 klogd 守护程序是一个 _非常_ 好的主意! D_DURING 显示每个发送或接收的数据包的 4-5 行。 D_TX、D_RX 和 D_SKB 实际上显示每个发送或接收的数据包,这显然很大。
从 v2.40 ALPHA 开始,自动探测例程已发生重大更改。特别是,除非您打开 D_INIT_REASONS 调试标志,否则它们不会告诉您为什么找不到该卡。
驱动程序运行后,您可以随时以 root 身份运行 arcdump shell 脚本(可从我处获得或在完整的 ARCnet 软件包中获得,如果您有它)来列出 arcnet 缓冲区的内容。要从中获得任何意义,您应该获取相关的 RFC。(一些列在 arcnet.c 的顶部附近)。 arcdump 假定您的卡位于 0xD0000。如果不是,请编辑脚本。
缓冲区 0 和 1 用于接收,缓冲区 2 和 3 用于发送。乒乓缓冲区以两种方式实现。
如果您的调试级别包括 D_DURING 并且您没有定义 SLOW_XMIT_COPY,则每次重置卡时(仅在执行 ifconfig up 或 Linux 确定驱动程序已损坏时才会发生),缓冲区都会被清除为 0x42 的常量值。在传输期间,缓冲区中未使用的部分也将被清除为 0x42。这是为了更容易确定数据包正在使用哪些字节。
您可以通过键入以下内容来更改调试级别,而无需重新编译内核
ifconfig arc0 down metric 1xxx
/etc/rc.d/rc.inet1
其中“xxx”是您想要的调试级别。例如,“metric 1015”会将您置于调试级别 15。调试级别 7 当前是默认值。
请注意,调试级别(从 v1.90 ALPHA 开始)是不同调试标志的二进制组合;因此调试级别 7 实际上是 1+2+4 或 D_NORMAL+D_EXTRA+D_INIT。要包括 D_DURING,您需要在此基础上加 16,从而导致调试级别为 23。
如果您不理解这一点,您可能无论如何都不想知道。通过电子邮件告诉我您的问题。
我想寄钱:现在做什么?¶
去睡一觉或做点什么。早上你会感觉更好。