也许你跟我一样,想利用你的Linux做一个路由器玩玩;也许你公司的网络太大,需要用一个路由器来提高效率,但是又不想投资买一个专业的路由设备。这时linux可就帮上大忙了。那你马上就会遇到问题,如何让你的linux支持两块以上的网卡呢?
Linux内核来说一般只能检测到一块网卡,为了我们能检测到两块以上的网卡,我们就需要配置内核模块了,好在现在的内核,一般将驱动程序将作为模块。即,在内核激活时,让模块自动检测所安装的Ethernet,如果我们使用的时PCI网卡,这一切动作将由内核自动完成,但是,如果我们使用的是ISA网卡,内核不一定能检测到你的网卡哦,这时,我们就要手动来设置网卡了,我们需要指定网卡的IO地址,以至于让模块直接到指定的IO地址去检测网卡,因此这些信息我们需要放在/etc/conf.modules文件中,如下面几个实例供大家参考:
假设你有两块ISA NE2000网卡,一般设置为非PnP。如果你的网卡是跳线型,你就直接移动你网卡上的跳线头即可,如果你的网卡是软跳线(一般为软跳线),你首先应该用你的网卡驱动盘,在dos下(我使用的是a:setup.exe进行网卡的设置)将这两块网卡的IO和IRQ值设定好,而且要检测通过。
比如一块是:IO=0x300,IRQ=10
另一块是:IO=0x240,IRQ=3
而且,这两种设置,都能正常运行。好了现在我们进入linux,且编辑/etc/conf.modules文件,内容如下:
---------------
alias eth0 ne
alias eth1 ne
options ne io=0x240,0x300
---------------
这是什幺意思呢?当ne.o模块(该模块位于/lib/modules/2.2.5-15/net目录中)被内核加载时,该模块知道到那一个IO地址去寻找网卡,注意0x的意思为16进制,一般IO地址都用16进制来表示。
好了,你的两块网卡已经能配置好了,赶快reboot你的linux,注意你的激活信息,特别是在进程管理程序init激活之前的一行,你就可以看到下面的内容:
-------------
ne.c:v1.0 9/23/94 Donald Becker
NE*000 ethercard probe at 0x300: 00 ae 25 01 c7 6b
eth0: NE2000 found at 0x300,using IRQ 10.
NE*000 ethercard probe at 0x240: 00 00 21 5a 00 07
eth1: NE2000 found at 0x240,using IRQ 3.
-------------
如果你在激活时错过了,你可以输入dmesg | more 来看。:-)
一般来说,大部分的ISA网卡都可以用逗号将两个IO地址分开,让模块自动检测,但是有些网卡就不行,如:3com的ec501.o模块,当该模块被内核加载时只能检测到一块网卡,这时你就应该将该模块加载两次,这样才能将两块网卡都检测到,如下面的配置模块:
--------
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=指定网卡的中断值。但是如果你用的网卡是两块不同的网卡,这时应该怎幺办呢?如下面的例子:
一块网卡是:3c503 IO值为:0x350
另一块为: NE2000 IO值为:0x280
模块的配置文件内容如下:
----------
alias eth0 ne
alias eth1 3c503
options ne io=0x280
options 3c503 io=0x350
----------
如果你的网卡为PCI网卡,那就容易多了,你只需要在alias一行将ethN和指定的驱动模块联系起来即可,因为基于IO的PCI网卡很容易被检测到。可用的驱动模块都在下面的目录下:/lib/modules/'uname -r'/net中,注意uname -r是指当前你的Linux内核的版本号,如2.0.34或2.2.5-15,我的内核为2.2.5-15,这些驱动模块就在/lib/modules/2.2.5-15/net目录下。一旦你配置好了你的conf.modules文件,你可以用下面的命令来检测:
modprobe ethN
dmesg | tail
'N'表示网卡的号码,如果你将网卡的驱动模块编译到内核中了,那你就只能检测到一块网卡了,因为,linux内核只能默认的只检测一个网卡。
一般有两种方法让内核在激活时激活第二块、三、四块网卡。
上面已经介绍了一种方法,下面介绍另一种方法。该方法是一种传统的方法,即在内核还没有模块化的时候。一般是在LILO激活内核时,加入一些参数,如:
LILO: linux ether=10,0x300,eth0 ether=3,0x240,eth1
有关LILO激活参数的详细信息,请参考BootPrompt-HOWTO。
为了不在每一次激活时都键入太长的参数,我们可以用append=命令在lilo.conf种配置如:
append="ether=10,0x300,eht0 ether=3,0x240,eth1"
如果你是在dos系统下的loadlin.exe来激活你的Linux的,就看下面的例子:
loadlin zImage root=/dev/hdb1 ro ether=10,0x300,eht0 ether=3,0x240,eth1
在linux下安装2块以上的网卡一般就这两种常用的方法,但是还有一种,这种方法不推荐该方法是直接编辑Space.c文件,将0xffe0改为0x0,0xffe0表示不检测设备,改为0后,即自动检测设备。