Linux 版 (精华区)
发信人: hanghai (笨耗子), 信区: Linux
标 题: 如何让linux运行两块乙太网卡
发信站: 哈工大紫丁香 (2002年08月17日20:27:07 星期六), 站内信件
这个问题的答案取决于驱动程序是否被用做可载入的模块或者直接编译进了内核。大多
数Linux发行版本现在都使用模块化的驱动程序。这样就不用发行许多内核,每种内核设
置一个不同的内建驱动程序。使用一个单一的基本内核,如果特定用户系统需要,一旦
系统启动,就足以从驱动程序模块文件(通常存储在/lib/modules/)中载入个别的驱动
程序。
把驱动程序作为模块使用:对于PCI驱动程序,模块通常会自动检测该品牌类型所有
安装的网卡。但对于ISA网卡,探寻一个网卡是不安全的操作,因此你需要提供网卡的I/
O地址以便模块知道去哪里查找。这一信息存储在文件/etc/modules.conf中。
例如,如果一个用户有两块ISA NE2000网卡,一块在0x300,一块在0x240,它们在/
/etc/modules.conf文件中显示如下:
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/module
s.conf将如下所示:
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)。你可以在这里看看哪一个驱动程序适合你的网卡。一旦
你在/etc/modules.conf文件里进行了正确的设置,就可以用下面的方法检查一下:
modprobe ethN
dmesg | tail
这里“N”是你要检测的以太网卡的接口号。
使用编译进内核的驱动程序:如果你需要的驱动程序编译进了内核,那么处理多块
以太网卡的接口已经存在了。但缺省情况下只自动检测一块以太网卡。这样就避免了启
动时检测敏感网卡可能引起的麻烦。
(注意:在2.1.x之后的内核中,启动检测被分为安全和不安全的两类,所有安全的
检测(如对PCI和EISA网卡)可以自动找到所有相关的网卡。在至少有一块ISA网卡的多
网卡系统中还需要进行以下的处理。)
有两种方法可以启动对第二块(或第三块等等)网卡的自动检测。最简单的方法是
向内核传递启动参数,由LILO完成。使用ether=0,0,eth1这样简单的启动参数就可以完
成对第二块网卡的检测。此时按照启动时找到的网卡顺序分配eth0和eth1。假如你想让0
x300处的网卡为eth0,而0x280处的网卡为eth1,那么可以使用
LILO: linux ether=5,0x300,eth0 ether=15,0x280,eth1
命令ether=可以接受的参数并不仅限于如上所示的IRQ + I/O + name。请参看传递
以太网参数......以了解全部的句法、网卡特定参数和LILO使用技巧。
这些启动参数可以固定,这样就不用每次都必须重新敲一遍。参看LILO手册中有关L
ILO 的配置选项“append”。
第二种方法(不建议使用)是编辑文件Space.c并用零替换I/O地址中的0xffe0入口
。0xffe0入口是用来告诉内核不要检测该设备 -- 把它替换为零就启动了对该设备的自
动检测。
注意,如果想用Linux作为两个网络间的路由,你需要启动IP转发并重新编译内核。
一般在一台老式的AT/286上运行“kbridge”一类的软件就相当不错了。
如果你是一边在网络冲浪,一边看本文档,最好去阅读Donald的WWW站点上的mini-h
owto。看一下多块以太网卡.
--------lizhenguo 根据jinqiao回帖修改
--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 61.167.120.136]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.729毫秒