配置Linux网卡简介


Linux对网卡的支持需要通过内核,早期,许多人使用编译时直接加入网卡支持的办法
,不过随着网卡种类的增加,已经很少有人使用这种吃力不讨好的办法了。现在,大部
分人都采用加入网卡模块的方法来驱动网卡。

为了加入网卡,首先必须知道网卡的类型,Linux对那些破破烂烂的“NE 2000兼容”
的网卡的支持倒确实是不错的,但是对于百兆的网卡就不太好说了,反正你总可以通过
实验选出合适的产品。

首先得一条是了解网卡的芯片型号,由于硬件厂商通常不会提供网卡的Linux驱动程序
,你必须自己为网卡选择正确的驱动程序。许多人喜欢说“啊,就是D-Link的”,这种
说法大概是在Linux中你能听到的最令人愤怒的说法了,跟那个著名的“在空中”的回答
差不多,绝对正确而绝对毫无意义。

你可以首先看看你的网卡属于哪一个类型,如果是3COM 3C系列的“骨灰级”产品,你
根本不需要进一步了解型号,Linux中肯定会有对应的驱动程序。到/lib/modules/x.x.
xx/net 下(x.x.xx是里Linux内核的版本号)看一看,确定一下到底应该使用那一个驱动
程序。例如,3C509的驱动程序就是3c509.o

如果是ne2000 兼容型,那么一般来说只要使用ne2000的驱动程序就可以了,这个驱动
程序的名字是ne.o,另外还有许多10兆的PCI网卡属于"NE2000-PCI"兼容类型,对应的驱
动程序名字是ne2k-pci.o。

如果都不是,那么你就需要猜测一种合适的网卡型号了,网卡的主控芯片通常是最
大的一块)上面会标出芯片的型号,然后到/lib/modules/2.2.14/net(我使用2.2.14的
内核,你的内核版本可能会不一样)下看一看,找到合适的驱动程序名字。

下一步是对网卡进行测试,例如,我的网卡驱动程序是rtl8139.o,是一块PCI的100M
网卡,因此执行

/sbin/modprobe rtl8139

路径名/lib/modules/2.2.14/net和扩展名.o可以省略。

在我们这个情况下,这个命令直接返回,不产生任何输出,表示这个模块已经正确地
装入内核存储区。如果你想确定一下,你可以用dmesg命令看一下内核输出,会有这样的
内容:

rtl8139.c:v1.07 5/6/99 Donald Becker http://cesdis.gsfc.nasa.gov/linux/dri
vers/r

tl8139.html

eth0: RealTek RTL8139 Fast Ethernet at 0xd800, IRQ 19, 00:50:ba:d0:8d:ec.

这表示网卡已经被激活了。

有些ISA网卡特别是ne2000兼容网卡)需要显式给出一些配置参数,例如,要激活n
e2000兼容网卡,需要给出I/O地址,可以使用这样的形式:

/sbin/modprobe ne io=0x300

这里假定ne2000兼容网卡位于I/O地址0x300处。IRQ不需要指定,Linux会给出正确的
值。

对于特定的网卡,具体的参数格式可以参考驱动程序的源代码。

假如网卡驱动程序不对或者参数有问题,就会显示出错信息:

[openlab]# /sbin/modprobe 3c509

/lib/modules/2.2.14/net/3c509.o: init_module: Device or resource busy

在某些系统中,使用/etc/conf.modules文件来设置网卡的缺省参数,例如:

$cat conf.modules

alias eth0 ne

options ne io=0x300

options 命令为模块提供缺省参数。以后只要执行/sbin/modprobe ne或者/sbin/mod
probe eth0就可以自动使用参数了。

假设你通过上面的过程已经确定了网卡驱动程序,测试也正确,那么你就应该把它放
到系统启动脚本中去。前面我们已经提到过,对于RedHat或者Slackware,用户自选的模
块文件通常可以放在/etc/rc.d/rc.modules中,内容就是简单的写上上面用来加载模块
的命令,例如,我的系统中有两片网卡,分别使用rtl8139和ne2000驱动程序,ne2000兼
容网卡的I/O地址是0x300,那么,rc.modules的内容就是

[openlab]# cat /etc/rc.d/rc.modules

/sbin/modprobe rtl8139

/sbin/modprobe ne io=0x300

不要忘了设置这个脚本的可执行属性。当系统重新启动时,它会自动执行这个脚本,
你可以在系统启动之后用dmesg看看执行是否正确。如果你的Linux启动脚本并不使用rc
.modules,你总可以把它放到rc.sysinit或者rcS里面去。

相关内容