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 协议之上实现的。
  由于交换机、路由器通常独立于 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/
   3c 501.o atp.o eth16i.o ni52.o smc-ultra.o
   3c 503.o bonding.o ethertap.o ni65.o starfire.o
   3c 505.o cs89x0.o ewrk3.o ns83820.o strip.o
   3c 507.o de4x5.o fc pcmcia sundance.o
   3c 509.o de600.o fealnx.o pcnet32.o sungem.o
   3c 515.o de620.o hamachi.o plip.o sunhme.o
   3c 59x.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 Loadable 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 的驱动程序之前一定搞清楚这个网卡用的什么芯片 , 跟谁兼容 , 比如 3c 509,ne2000 等。这样的型号一般都在网卡上最大的一快芯片上印着 , 抄下来就是了。对于 ISA 接口的 NE2000 , 先要作的一件事情 , 是将网卡设定为 Jumpless 模式 . 很多现在的网卡缺省 都是 PnP 模式 , 这在 Windows 下的确能减少很多麻烦 , 但是 Linux 不支持 , 所以 Linux 下必须是 Jumpless 模式 . 一般所有网卡都有带的驱动盘和 DOS 下可执行的一个设定程序 , 用该程序将网卡设为 Jumpless 。对于 PCI 网卡,可以使用命令来查看: lspci 。在显示的列表中找到“ Ethernet Controller ”,记下厂商和型号。然后使用 modprobe 尝试加载正确的模块,比如 modprobe 3c 509 。如果出现错误,说明该模块不存在。这时候你应该找到正确的模块并且重新编译。问题一般即可解决。
  如果很不幸的,您使用的是比较罕见的一些网卡,或者是 Linux 核心支持不够的网卡,以致于在安装 Linux 时,并无法检测到网卡,那也不用担心,我们可以使用较为简单的核心模块编译来支持这张网卡。下面以笔者的 3Com 3CR990-TX-97 网卡为例(一款具有安全特性网卡)看看如何进行模块编译。首先在其网站 [url]http://www.3com.com/infodeli/tools/nic/linuxdownload.htm[/url] 下载合适你使用内核版本的相关驱动程序,这里以 2.4 内核为例。
   #wegt [url]http://www.3com.com/infodeli/tools/nic/3c990-1.0.0a.tar.gz[/url]
  另外在开始编译核心模块之前,因为驱动程序需要配合核心来编译,所以会使用到 kernel source 或者是 kernel header 的数据,此外,也需要编译器 ( compiler ) 的帮助,因此,先确定您的 Linux 系统当中已经下列软件的存在 kernel-source kernel gcc make
   #tar zxvf 3c 990- 1. 0.0a .tar.gz
   #make
  此时会产生 3c 990.o 驱动模块。然后使用命令拷贝到相应地方然后查看加载是否正常。
   #modprobe 3c 990
   #cp 3c 990.o /lib/modules/ 2.4.20 -8/kernel/drivers/net
   # depmod -a
  然后使用 lsmod 命令检查加载情况,如果一切正常的话。可以让系统启动时自动加载该模块:
   #echo alias eth0 3c 990 >;>; /etc/modules.conf
3. 为新网卡设定 IP 地址
  在 Linux 网络设备在配置时被赋予别名,该别名由一个描述性的缩略词和一个编号组成。某种类型的第一个设备的编号为 0 ,其他设备依次被编号为 1 2 3 ,等。但是网卡并不是最为裸设备出现在 /dev 目录下,而是存在内存中。 eth0, eth1 是以太网卡接口。它们用于大多数的以太网卡,包括许多并行端口以太网卡。本文主要讨论这类网卡。 Linux 以太网卡设定 IP 地址的方式非常灵活,你可以选择适合你工作情况的方法:
  ( 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 ”,也可以在: [url]ftp://ftp.inr.ac.ru/ip-routing/[/url] 下载源代码安装。
  如果希望在以太网接口 eth0 上增加一个地址 10.0.0 .1 ,掩码长度为 24 位,标准广播地址,标签为 eth0:Alias
   #ip addr add 10.0.0 .1/24 brd + dev eth0 label eth0:Alias
   netconfig 命令可以设置网络设备的 ip 地址, netconfig 命令可以永久保存设置。
  使用方法是:“ netconfig ethX ”。使用命令“ netconfig eth 0 后会在命令行下弹出一个对话框,这时即可进行设定。
  设定结束后用“ tab ”键选择“ OK ”即可保存设置并且退出。然后使用命令:“ service network restart “激活即可生效。
  使用 neat 命令需要配置好 X window 系统,在命令行下运行“ neat ”命令后添加 IP 地址和其他相关参数后保存设置,从新启动网络和网络服务或计算机。
  另外 neat 命令还有一个同价命令:“ redhat config network ”,二者完全相同。 Neat redhat config config 命令可以永久保存设置。
  除非另行指定, 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?pf?10 ipv6 # automatically load IPv6 module on demand
4. 调整网卡工作模式
  现在的网卡大多是自适应工作模式,在配置网卡参数时我们很少考虑它的工作模式,有时发现一些网卡模块已经加载,但是在某些模式工作不稳定。如笔者使用的一块 XXX 品牌的杂牌 RTL -8139C 芯片 10/100 自适应网卡在 100 兆全双工状态下极其不稳定(在 Qcheck TCP UDP 的测试过程中,数据包遗失率 9.12 %。)。在 Linux 环境下,我们可以使用系统自带的工具 mii-tool 命令来配置网卡工作模式。显示 Linux 服务器网卡支持的所有以太网卡类型,使用命令:
   # mii-tool v
   eth0: negotiated 100baseTx-FD, link ok
   product info: vendor 00:00:00, model 0 rev 0
   basic mode: autonegotiation enabled
   basic status: autonegotiation complete, link ok
   capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
   advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
   link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  从以上信息中可以看出,这块网卡工作在 100 全双工自适应模式下,“ 100aseTx-FD ”意为 100M Full Duplex 。这里可以强制网卡工作在 100M 半工模式下,输入命令:
  # mii-tool �C F 100baseTx-HD eth0
  以后恢复网卡的自适应工作模式,输入命令:
  # mii-tool �C r eth0
  另外路由器、交换机、代理服务器等通信量比较大的关键设备上,应该为它指定正确的工作模式,这样可以提高通信效率。
   5.DHCP 客户端网卡设定
  如果希望使用 DHCP 是动态主机配置协议,这个协议用于向计算机自动提供 IP 地址 , 子网掩码和路由信息。当设备接入这个局域网时,它们会向 DHCP 服务器请求一个 IP 地址。然后 DHCP 服务器为每个请求的设备分配一个地址,直到分配完该范围内的所有 IP 地址为止。已经分配的 IP 地址必须定时地延长借用期。这个延期的过程称作 leasing ,确保了当客户机设备在正常地释放 IP 地址之前突然从网络断开时被分配的地址可以归还给服务器。 Linux 下配置 DHCP 客户端有两种方法:图形界面和手工配置。使用图形界面可以使用 neat 命令界面。选中“自动获得 IP 地址设置使用 DHCP ”即可。
  通常笔者更喜欢使用选择手工配置 DHCP 客户,需要修改 /etc/sysconfig/network 文件来启用联网;并修改 /etc/sysconfig/network-scripts 目录中每个网络设备的配置文件。在该目录中,每个设备都有一个叫做 ifcfg-ethX 的配置文件, ethX 是网络设备的名称。 eth0 等。如果你想在引导时启动联网, NETWORKING 变量必须 被设为 yes 除了此处之外 /etc/sysconfig/network 文件应该包含以下行:
   NETWORKING=yes
   DEVICE=eth0
   BOOTPROTO=dhcp
   ONBOOT=yes

你可能感兴趣的:(linux,服务器,网卡,驱动)