Linux网卡驱动的安装
网友 网络收集
网卡是Linux服务器中最重要网络设备。据统计,Linux网络故障有35%在物理层、25%在数据链路层、10%在网络层、10%在传输层、10%在对话、7%在表示层、3%在应用层。由此可以看出,网络
 
故障通常发生在网络七层模型的下三层,即物理层、链路层和网络层。对应于实际网络也就是使用的网络线缆、网卡、交换机、路由器等设备故障。Linux的网络实现是模仿FreeBSD的,它支持FreeBSD的带有扩展的Sockets(套接字)和TCP/IP协议。它支持两个主机间的网络连接和Sockets通讯模型,实现了两种类型的Sockets:BSD Sockets和INET Sockets。它为不同的通信模型和服务质量提供了两种传输协议,即不可靠的、基于消息的UDP传输协议和可靠的、基于流的传输协议TCP,并且都是在IP网络协议上实现的。INET sockets是在以上两个协议及IP协议之上实现的。它们之间的关系见图1所示。
 
1 Linux网络模型

由于交换机、路由器通常独立于Linux或者其他操作系统。网卡设置故障是造成Linux 服务器故障最主要原因。可能因为硬件的质量或性能、磨损老化、人为误操作、不正确的网络设置、管理问题、Linux软件的BUG、系统受到黑客攻击和Linux病毒等原因造成。

Linux 服务器网卡故障排除的思路是:应当遵循先硬件后软件的方法。因为硬件如果出现物理损坏那么如何设定网卡都不能解决故障。解决问题的方法可以从自身Linux计算机的网卡查起,如果确定硬件没有问题了,再来考虑软件的设定。

1.网卡的选择
一般来说,2.4版本以后的 Linux可以支持的网卡芯片组数量已经很完备了,包括著名厂商如:Intel 以及使用广泛的 RealTek, Via 等网卡芯片都已经被支持,所以使用者可以很轻易的设定好他们的网络卡。但是由于Linux发行版本众多(目前超过188个),使用前最好查看Linux发行版本的文档。以Redhat Linux 9.0为例,这个设备列表在Ethernet- HOWTO文档中。另外最直接的方法是查看一个目录:/lib/modules/release/kernel/drivers/net,其中release是内核版本,可以使用命令:“uname -r”获得。对于Redhat Linux 9.0是2.4.20-8。

#ls /lib/modules/2.4.20-8/kernel/drivers/net/
3c501.o              atp.o        eth16i.o       ni52.o          smc-ultra.o
3c503.o              bonding.o    ethertap.o     ni65.o          starfire.o
3c505.o              cs89x0.o     ewrk3.o        ns83820.o       strip.o
3c507.o              de4x5.o      fc             pcmcia          sundance.o
3c509.o              de600.o      fealnx.o       pcnet32.o       sungem.o
3c515.o              de620.o      hamachi.o      plip.o          sunhme.o
3c59x.o              defxx.o      hamradio       ppp_async.o     tc35815.o
8139cp.o             depca.o      hp100.o        ppp_deflate.o   tg3.o
8139too.o            dgrs.o       hp.o           ppp_generic.o   tlan.o
82596.o              dl2k.o       hp-plus.o      ppp_synctty.o   tokenring
8390.o               dmfe.o       irda           r8169.o         tulip
ac3200.o             dummy.o      lance.o        rcpci.o         tulip_old
acenic.o             e100         lne390.o       sb1000.o        tun.o
aironet4500_card.o   e1000        lp486e.o       shaper.o        via-rhine.o
aironet4500_core.o   e2100.o      mii.o          sis900.o        wan
aironet4500_proc.o   eepro100.o   natsemi.o      sk98lin         wavelan.o
amd8111e.o           eepro.o      ne2k-pci.o     skfp            wd.o
appletalk            eexpress.o   ne3210.o       slhc.o          winbond-840.o
arlan.o              epic100.o    ne.o           slip.o          wireless
arlan-proc.o         eql.o        netconsole.o   smc9194.o       wireless_old
at1700.o             es3210.o     ni5010.o       smc-ultra32.o   yellowfin.o

可以看到这个目录列出所有Linux内核支持的网络设备驱动程序。其中大部分是以太网卡(8139、3COM、Intel)。也有一些是其他类型设备。对于初学者应当尽量选择目录中已经列出的网卡。注意以.o 后缀结束的文件就是驱动程序。而没有后缀的是驱动程序目录(红色)。

2.检查网卡是否加载:

驱动硬件是操作系统最基本的功能,操作系统通过各种驱动程序来驾驭硬件设备,和Windows系统不同Linux内核目前采用可加载的模块化设计(LKMs Loa

 
dable Kernel Modules),就是将最基本的核心代码编译在内核中,网卡驱动程序是作为内核模块动态加载的。可以使用命令“lsmod”查看加载情况:

## lsmod
Module                   Size   Used by
dm_mod                  54741   0
button                   6481   0
battery                  8901   0
ac                       4805   0
md5                      4033   1
joydev                  10241   0
uhci_hcd                31065   0
ehci_hcd                30917   0
snd_via82xx             26437   0
snd_ac97_codec          63889   1 snd_via82xx
snd_pcm_oss             49017   0
soundcore                9889   1 snd
tulip                   45025   1
via_rhine               23113   2
mii                      4673   1 via_rhine
ext3                   116809   2
jbd                     71257   1 ext3

对每行而言,第一列是模块名称;第二列是模块大小;第三列是调用数。调用数后面的信息对每个模块而言都有所不同。如果 (unused) 被列在某模块的那行中,该模块当前就没在使用。如果 (autoclean) 被列在某模块的那行中,该模块可以被 rmmod -a 命令自动清洗。当这个命令被执行后,所有自从上次被自动清洗后未被使用的被标记了“autoclean”的模块都会被卸载。丛以上红色粗体字符可以看到笔者Linux计算机中两块网卡模块:tulip和via_rhine 已经加载。对应的网卡商业型号分别是:
tulip:Lite-On Communications Inc LNE100TX [Linksys EtherFast 10/100]
via_rhine:Via VT6102[Rhine-II] 常见主板集成网卡。

如果没有检测到硬件,用硬件检测程序kuduz检测网卡,它和Windows中添加新硬件差不多。kudzu程序是通过查看/usr/share/hwdata/目录下的文件识别各种硬件设备的。如果核心支持该硬件,并且有该驱动程序就可自动装载。首先说明的是Linux下对网卡的支持往往是只对芯片的,所以对某些不是很著名的网卡,往往需要知道它的芯片型号以配置Linux.比如我的Top link网卡,就不存在Linux的驱动,但是因为它是NE2000兼容,所以把它当NE2000就可以在Linux下用了.所以当你有一块网卡不能用,在找Linux的驱动程序之前一定搞清楚这个网卡用的什么芯片,跟谁兼容,比如3c509,ne2000等。这样的型号一般都在网卡上最大的一快芯片上印着,抄下来就是了。对于ISA接口的NE2000卡,先要作的一件事情,是将网卡设定为Jumpless模式.很多现在的网卡缺省都是PnP模式,这在Windows下的确能减少很多麻烦,但是Linux不支持,所以Linux下必须是Jumpless模式.一般所有网卡都有带的驱动盘和DOS下可执行的一个设定程序,用该程序将网卡设为 Jumpless。对于PCI网卡,可以使用命令来查看:lspci。在显示的列表中找到“Ethernet Controller”,记下厂商和型号。然后使用modprobe尝试加载正确的模块,比如modprobe 3c509。如果出现错误,说明该模块不存在。这时候你应该找到正确的模块并且重新编译。问题一般即可解决。
如果很不幸的,您使用的是比较罕见的一些网卡,或者是 Linux 核心支持不够的网卡,以致于在安装 Linux 时,并无法检测到网卡,那也不用担心,我们可以使用较为简单的核心模块编译来支持这张网卡。下面以笔者的3Com的3CR990-TX-97 网卡为例(一款具有安全特性网卡)看看如何进行模块编译。首先在其网站http://www.3com.com/infodeli/tools/nic/linuxdownload.htm 下载合适你使用内核版本的相关驱动程序,这里以2.4内核为例。
#wegt http://www.3com.com/infodeli/tools/nic/3c990-1.0.0a.tar.gz


另外在开始编译核心模块之前,因为驱动程序需要配合核心来编译,所以会使用到 kernel source 或者是 kernel header 的数据,此外,也需要编译器 ( compiler ) 的帮助,因此,先确定您的 Linux 系统当中已经下列软件的存在 :kernel-source 、kernel 、gcc 、make。

#tar zxvf 3c990-1.0.0a.tar.gz
#make
此时会产生3c990.o 驱动模块。然后使用命令拷贝到相应地方然后查看加载是否正常。
#modprobe 3c990
#cp 3c990.o   /lib/modules/2.4.20-8/kernel/drivers/net
# depmod -a
然后使用lsmod 命令检查加载情况,如果一切正常的话。可以让系统启动时自动加载该模块:
#echo “alias eth0 3c990”>> /etc/modules.conf

3.为新网卡设定IP地址
在Linux 网络设备在配置时被赋予别名,该别名由一个描述性的缩略词和一个编号组成。某种类型的第一个设备的编号为 0,其他设备依次被编号为 1、2、3,等。但是网卡并

 

(1)使用ip或ifconfig命令
ifconfig命令是最重要的Linux网络命令,最主要的用途是设定、修改网卡的IP地址,修改网卡ip地址:
#ifconfig eth0 192.168.0.2 netmask 255.255.255.0

默认情况下, ifconfig 显示活动的网络设备。给这个命令添加一个 -a 开关就能看到所有设备。但是ifconfig命令设置网络设备的ip地址系统重新启动后设置会自动失效。所以它主要用于网卡状态调试。假设您要建立一个临时的网络配置以供测试。您可以使用发行版本中的工具来编辑配置,但是需要注意在完成测试之后,将所有设置恢复回去。通过使用 ifconfig ,我们无需影响已保存的设置,就能够快速地配置网卡。

Ip命令是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具。例如:ifconfig、route等。现在,绝大多数 Linux 发行版和绝大多数 UNIX都使用古老的arp, ifconfig和route命令。虽然这些工具能够工作,但它们在Linux2.2和更高版本的内核上显得有一些落伍。使用iproute2前你应该确认已经安装了这个工具。这个包的名字在RedHat Linux 9.0叫作“iproute2”,也可以在:ftp://ftp.inr.ac.ru/ip-routing/ 下载源代码安装。
如果希望在以太网接口eth0上增加一个地址10.0.0.1,掩码长度为24位,标准广播地址,标签为eth0:Alias:
#ip addr add 10.0.0.1/24 brd + dev eth0 label eth0:Alias

(2)使用 netconfig命令
netconfig命令可以设置网络设备的ip地址,netconfig命令可以永久保存设置。
使用方法是:“netconfig ethX”。使用命令“netconfig eth0”后会在命令行下弹出一个对话框,这时即可进行设定见图2,

 

 
图2 netconfig配置界面
设定结束后用“tab”键选择“OK”即可保存设置并且退出。然后使用命令:“service network restart “激活即可生效。

(3)使用neat命令
使用neat命令需要配置好X window系统,在命令行下运行“neat”命令后添加IP地址和其他相关参数后保存设置,从新启动网络和网络服务或计算机,见图-3。

 
图-3 图形界面添加IP地址
另外neat命令还有一个同价命令:“redhat-config-network”,二者完全相同。Neat和redhat-config-config命令可以永久保存设置。

(4)修改TCP/IP网络配置文件
除非另行指定,Red Hat Linux 系统中大多数配置文件都在 /etc 目录中。网卡相关的TCP/IP网络配置文件是:/etc/sysconfig/network-scripts/ifcfg-ethx。其中x从0开始,第一个以太网配置文件即:/etc/sysconfig/network-scripts/ifcfg-eth0。使用vi编辑器修改这个文件,也可以修改网卡IP地址。

#vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0        #设定网卡的名称,要跟文件名称对应 #
ONBOOT=yes        #是否在开机的的时候启动网卡#
BOOTPROTO=static      #启动的时候的 IP 取得的协议,这里是固定的,
               如果是动态主机的话,要改成 dhcp 才行#
IPADDR=192.168.1.2     #IP 地址#
NETMASK=255.255.255.0   #子网掩吗#
NETWORK=192.168.1.0    #该网段的第一个 IP#
BROADCAST=192.168.1.255  #最后一个同网段的广播地址#
GATEWAY=192.168.1.2    #网关地址#
#GATEWAYDEV=eth0      

存盘后使用命令:“service network restart “激活即可生效。这个方法同样可以永久保存设置。

(5)为网卡添加IPV6地址
和Windows系统相比Linux对Ipv6的支持更好,最早的支持Ipv6的Linux内核是 2.2.xxx。一般Linux基于2.4内核的Linux发行版本都可以直接使用Ipv6,使用前要看系统IPv6模块是否被加载,如果没有的话可以使用命令手工加载,这需要超级用户的权限。然后使用命令检测,如果显示IPv6地址(inet6 addr:fe80::200:e8ff:fea0:2586/64)证明IPv6已经加载。
# modprobe IPv6;#ifconfig -a

如果希望Linux系统启动时自动加载Ipv6模块,可以在配置文件:/etc/modules.conf中加入一行:
alias net


 
CIO之家 www.ciozj.com 公众号:imciow
关联的文档
也许您喜欢