SB100 设备驱动程序¶
sb1000 是通用仪器(也称为 NextLevel)SURFboard1000 内部有线调制解调器板的模块化网络设备驱动程序。这是一个 ISA 卡,许多有线电视公司使用它来提供有线调制解调器访问。它是一个单向的仅下行有线调制解调器,这意味着您的上行网络链路由您的常规电话调制解调器提供。
此驱动程序由 Franco Venturi <fventuri@mediaone.net> 编写。他应该为这出色的代码而得到高度的感谢!
需要的工具¶
对此设备的支持现在是标准 Linux 内核的一部分。驱动程序源代码文件为 drivers/net/sb1000.c。除此之外,您还需要
“cmconfig” 程序。这是一个补充 “ifconfig” 的实用程序,用于配置有线调制解调器和网络接口(通常称为 “cm0”);
几个位于 /etc/ppp 中的 PPP 脚本,以方便通过有线调制解调器进行连接。
这些实用程序可以从以下位置获取
在 Franco 的原始源代码发行版 .tar.gz 文件中。对 sb1000 驱动程序的支持可以在
以及这些实用程序中找到。
标准的 isapnp 工具。这些工具对于在启动时(或之后手动)配置您的 SB1000 卡是必要的,因为它是一张 PnP 卡。
如果您的 Linux 发行版没有将这些作为标准部分安装,您可以在以下位置找到它们
或查看您的 Linux 发行版二进制 CD 或其网站。有关 isapnp、pnpdump 或 /etc/isapnp.conf 的帮助,请访问
使用驱动程序¶
要使 SB1000 卡工作,请按照以下步骤操作
在顶层内核树目录中运行
make config
,或make menuconfig
,或make xconfig
,无论您喜欢哪个,来设置您的内核配置。确保对“提示开发驱动程序”选择 “Y”,对 sb1000 驱动程序选择 “M”。还要对所有标准的网络问题选择 “Y” 或 “M”,以获得 TCP/IP 和 PPP 网络支持。在构建内核之前,编辑 drivers/net/sb1000.c。确保重新定义 READ_DATA_PORT 的值,以匹配 isapnp 用于访问您的 PnP 卡的 I/O 地址。这是 /etc/isapnp.conf 中的 READPORT 值,或由 pnpdump 的输出给出。
像往常一样构建和安装内核和模块。
按照通常的步骤启动您的新内核。
通过将 “pnpdump” 的输出捕获到一个文件并编辑此文件来设置新的 SB1000 PnP 卡,从而为所有 PnP 卡设置正确的 I/O 端口、IRQ 和 DMA 设置。确保没有一个设置相互冲突。然后通过使用您的新配置文件作为输入运行 “isapnp” 命令来测试此配置。检查错误并根据需要修复。(顺便说一句,我的 SB1000 卡使用 I/O 端口 0x110 和 0x310 以及 IRQ 11,这些对我来说效果很好。YMMV。)然后将完成的配置文件保存为 /etc/isapnp.conf,以便在后续重新启动时进行正确的配置。
从 Franco 的站点或上面引用的其他站点下载原始文件 sb1000-1.1.2.tar.gz。以 root 身份,将其解压到一个临时目录中,并执行
make cmconfig
,然后执行install -c cmconfig /usr/local/sbin
。不要执行make install
,因为它期望找到所有构建并准备好安装的实用程序,而不仅仅是 cmconfig。以 root 身份,将 Franco tar 文件中 ppp/ 子目录下的所有文件复制到 /etc/ppp 中,小心不要覆盖任何已经存在的文件。然后修改 ppp@gi-on,为有线调制解调器设置正确的登录名、电话号码和频率。还要编辑 pap-secrets 来指定您的登录名和密码以及您需要的任何站点特定信息。
请务必修改 /etc/ppp/firewall,以使用 ipchains 而不是来自 2.0.x 内核的旧 ipfwadm 命令。有一个简洁的实用程序可以将 ipfwadm 命令转换为 ipchains 命令
您可能还希望修改防火墙脚本以实现不同的防火墙方案。
通过脚本 /etc/ppp/ppp@gi-on 启动 PPP 连接。您必须是 root 才能执行此操作。如果可能,最好使用像 sudo 这样的实用程序来执行经常使用的命令,例如具有 root 权限的此命令。如果连接成功,有线调制解调器接口将启动,您将在控制台上看到如下驱动程序消息
cm0: sb1000 at (0x110,0x310), csn 1, S/N 0x2a0d16d8, IRQ 11. sb1000.c:v1.1.2 6/01/98 ([email protected])
“ifconfig” 命令应显示两个新接口,ppp0 和 cm0。
命令 “cmconfig cm0” 将为您提供有关有线调制解调器接口的信息。
例如,尝试通过
ping -c 5 www.yahoo.com
ping 站点。您应该看到接收到的数据包。如果您无法将站点名称(如 www.yahoo.com)解析为 IP 地址(如 204.71.200.67),请确保您的 /etc/resolv.conf 文件没有语法错误,并且其中包含正确的名称服务器 IP 地址。如果这没有帮助,请尝试类似于
ping -c 5 204.71.200.67
的操作,以查看网络是否正在运行,但 DNS 解析才是问题所在。如果您仍然有问题,请访问上面提到的支持网站并阅读那里的信息和文档。
常见问题¶
数据包在 ppp0 接口上发出,但没有在 cm0 接口上返回。看起来我已连接,但我甚至无法 ping 通任何数字 IP 地址。(这主要发生在 Debian 系统上,这是由于默认的启动时配置脚本所致。)
- 解决方案
以 root 身份执行
echo 0 > /proc/sys/net/ipv4/conf/cm0/rp_filter
,以便它可以与 ppp0 接口共享相同的 IP 地址。请注意,此命令可能应该添加到 /etc/ppp/cablemodem 脚本中,*恰好*在 “/sbin/ifconfig” 和 “/sbin/cmconfig” 命令之间。您可能还需要对 /proc/sys/net/ipv4/conf/ppp0/rp_filter 执行此操作。如果您在每次重新启动时(在 rc.local 或类似的地方)对 /proc/sys/net/ipv4/conf/default/rp_filter 执行此操作,那么任何接口都可以共享相同的 IP 地址。
在执行
insmod sb1000.o
时,我收到“未解析的符号”错误消息。
- 解决方案
您可能有一个不匹配的内核源树和 /usr/include/linux 和 /usr/include/asm 头文件。确保在这两个目录中安装正确版本的头文件。然后重新构建并重新安装内核。
当 isapnp 运行时,它报告一个错误,并且我的 SB1000 卡无法工作。
- 解决方案
较新版本的 isapnp 在分配 SB1000 卡的两个 I/O 地址的行中使用 “(CHECK)” 选项时存在问题。这首先出现在 RH 6.0 上。删除 SB1000 I/O 地址的 “(CHECK)”。首先确保它们不与任何其他硬件冲突!然后重新运行 isapnp 并从那里开始。
我无法执行 /etc/ppp/ppp@gi-on 文件。
- 解决方案
以 root 身份执行
chmod ug+x /etc/ppp/ppp@gi-on
。
防火墙脚本不起作用(适用于 2.2.x 和更高版本的内核)。
- 解决方案
使用上面引用的 ipfwadm2ipchains 脚本将 /etc/ppp/firewall 脚本从已弃用的 ipfwadm 命令转换为 ipchains。
我在 /var/kern.log、/var/messages 和/或 /var/syslog 文件中收到大量防火墙拒绝消息,并且它们正在填满我的 /var 分区!!!
- 解决方案
首先,告诉您的 ISP 您正在接收 DoS(拒绝服务)和/或端口扫描(UDP 连接尝试)攻击!查看拒绝消息,找出攻击是什么以及它来自哪里。接下来,编辑 /etc/ppp/cablemodem 并确保在 “cmconfig” 命令中打开 “,nobroadcast” 选项(取消注释该行)。如果您没有在广播接口(通常 IP 地址为 xxx.yyy.zzz.255)上收到这些被拒绝的数据包,那么有人正在特别攻击您的机器。小心在那里....
一切似乎都运行良好,但我的计算机过了一会儿就锁定了(并且通常在通过有线调制解调器进行长时间下载时)!
- 解决方案
您可能需要在驱动程序中添加一个短暂的延迟来“减慢” SURFboard 的速度,因为您的 PC 可能无法跟上 SB1000 的传输速率。为此,最好下载 Franco 的 sb1000-1.1.2.tar.gz 存档并手动构建和安装 sb1000.o。您需要编辑 “Makefile” 并查找 “SB1000_DELAY” 定义。取消注释这些 “CFLAGS” 行(并注释掉默认行),并尝试将延迟设置为 60 微秒之类的数值:‘-DSB1000_DELAY=60’。然后执行
make
,并以 root 身份执行make install
并试用。如果它仍然不起作用,或者您喜欢使用驱动程序,您可以尝试其他数字。但是请记住,延迟越高,驱动程序速度就越慢(当驱动程序处于活动状态时,也会减慢 PC 的其余部分的速度)。感谢 Ed Daiga 提供此提示!
鸣谢¶
此自述文件来自 Franco Venturi 的原始自述文件,该文件仍然随他的驱动程序 .tar.gz 存档一起提供。我和所有其他 sb1000 用户都非常感谢 Franco!还要感谢 Carl Patten 和 Ralph Bonnell,他们现在正在管理 Linux SB1000 网站,并感谢报告和帮助调试上面列出的常见问题的 SB1000 用户。
Clemmitt Sigler csigler@vt.edu