CentOSBroadcom网卡驱动更新
最近发现服务器的网卡经常会自己down然后几分钟后有突然自己up,这个问题没有规律的出现,且会反复出现,无法人为重现故障环境。在更换了网线后,问题依然存在。在查阅了大量的网上资料后,怀疑是网卡启动程序的问题,需要更新网卡驱动程序。
Broadcom NetXtreme II BCM5706/5708/5709/5716 Driver 的驱动程序是可以热更新的不需要重启也不会出现闪断,可能会有一个包的丢包,这个在业务中基本可以允许出现。
下面我记录了处理办法的方法:
1、使用虚拟机安装一个跟生产环境操作系统一致的操作系统环境
1.1 确认生产环境
我的生产环境是CentOS 6.4 64位。
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
# uname -r
2.6.32-358.el6.x86_64
可以看到内核版本是2.6.32-358
1.2 创建虚拟机环境
这里就省略了虚拟机的安装方法了,大家可以网上找到。
2、通过yum安装make gcc rpm-build redhat-rpm-config组件
使用yum 安装make gcc rpm-build redhat-rpm-config组件,已经安装过的可以跳过这步。
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
# yum -y install make gcc rpm-build redhat-rpm-config
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Setting up Install Process
Package 1:make-3.81-20.el6.x86_64 already installed and latest version
Package gcc-4.4.7-11.el6.x86_64 already installed and latest version
Package rpm-build-4.8.0-38.el6_6.x86_64 already installed and latest version
Package redhat-rpm-config-9.0.3-42.el6.centos.noarch already installed and latest version
3、安装kernel-devel包,yum的可能跟你的操作内核并不一致,那么需要去网上下载和内核一致的kernel-devel
3.1 通过yum list kernel-devel检查是否有合适的devel包
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
# yum list|grep kernel-devel
kernel-devel.x86_64 2.6.32-504.1.3.el6 updates
可以发现devel包只有2.6.32-504的,这个包会无法正常编译适合2.6.43-358的驱动,所以我的环境不能使用。
可以去到http://rpm.pbone.net/网站搜索kernel-devel-2.6.32-358包,如果你的内核版本和我的不一样请搜索适合自己的包
4、下载驱动程序的SRPM包
4.1 从官网下载最新驱动
从官网链接http://www.broadcom.com/support/ethernet_nic/downloaddrivers.php找到适合自己的驱动程序,我的是NetXtreme II 5716的,这个驱动在下载页面上没有直接给出。但是页面上有这么一句话Broadcom no longer provides drivers and documentation for NetXtreme II. They can be obtained from QLogic.所以可以点击QLogic来进入NetXtreme II驱动的下载页面。
因为我的操作系统是CentOS 6.4 的所以我下载的是netxtreme2-7.10.12-2.rhel6u4.src.rpm的驱动程序包
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
# wget http://ldriver.qlogic.com/driver-srpms/netxtreme2/netxtreme2-7.10.12-2.rhel6u4.src.rpm
--2014-05-29 03:17:17-- http://ldriver.qlogic.com/driver-srpms/netxtreme2/netxtreme2-7.10.12-2.rhel6u4.src.rpm
Resolving ldriver.qlogic.com... 198.70.193.47
Connecting to ldriver.qlogic.com|198.70.193.47|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2699127 (2.6M) [audio/x-pn-realaudio-plugin]
Saving to: “netxtreme2-7.10.12-2.rhel6u4.src.rpm”
100%[===========================================================================================================>] 2,699,127 9.87K/s in 3m 10s
2014-05-29 03:20:32 (13.8 KB/s) - “netxtreme2-7.10.12-2.rhel6u4.src.rpm” saved [2699127/2699127]
5、安装SRPM包
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
# rpm -ivh netxtreme2-7.10.12-2.rhel6u4.src.rpm
warning: netxtreme2-7.10.12-2.rhel6u4.src.rpm: Header V4 DSA/SHA1 Signature, key ID 29a6a44a: NOKEY
1:netxtreme2 ########################################### [100%]
运行后会得到一个~/rpmbuild目录
6、进入rpmbuild目录,使用rpmbuild -bb SPEC/xxxx.spec得到RPM包
[html] view plaincopy在CODE上查看代码片派生到我的代码片
# cd ~/rpmbuild
# rpmbuild -bb SPECS/kmp-netxtreme2.spec
待运行完毕后可以得到~/rpmbuild/RPMS目录,里面保存着驱动程序的安装包
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
# ll ~/rpmbuild/RPMS/x86_64/
total 3928
-rw-r--r--. 1 root root 3762148 May 29 03:25 kmod-netxtreme2-7.10.12-2.rhel6u4.x86_64.rpm
-rw-r--r--. 1 root root 256968 May 29 03:25 netxtreme2-doc-7.10.12-2.rhel6u4.x86_64.rpm
我们需要的是kmod-netxtreme2-7.10.12-2.rhel6u4.x86_64.rpm
8、测试rpm包
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
# rpm -ivh ~/rpmbuild/RPMS/x86_64/kmod-netxtreme2-7.10.12-2.rhel6u4.x86_64.rpm
Preparing... ########################################### [100%]
1:kmod-netxtreme2 ########################################### [100%]
安装会持续一段无响应的时间,这里请保持运行,不要中断执行。
如果安装完成我们可以通过modinfo bnx2来验证安装的驱动是否到位
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
# modinfo bnx2
filename: /lib/modules/2.6.32-358.el6.x86_64/extra/netxtreme2/bnx2.ko
version: 2.2.5f
license: GPL
description: Broadcom NetXtreme II BCM5706/5708/5709/5716 Driver
author: Michael Chan <[email protected]>
srcversion: 2B877A043F01667D1A4B5CE
alias: pci:v000014E4d0000163Csv*sd*bc*sc*i*
alias: pci:v000014E4d0000163Bsv*sd*bc*sc*i*
alias: pci:v000014E4d0000163Asv*sd*bc*sc*i*
alias: pci:v000014E4d00001639sv*sd*bc*sc*i*
alias: pci:v000014E4d000016ACsv*sd*bc*sc*i*
alias: pci:v000014E4d000016AAsv*sd*bc*sc*i*
alias: pci:v000014E4d000016AAsv0000103Csd00003102bc*sc*i*
alias: pci:v000014E4d0000164Csv*sd*bc*sc*i*
alias: pci:v000014E4d0000164Asv*sd*bc*sc*i*
alias: pci:v000014E4d0000164Asv0000103Csd00003106bc*sc*i*
alias: pci:v000014E4d0000164Asv0000103Csd00003101bc*sc*i*
depends:
vermagic: 2.6.32-358.el6.x86_64 SMP mod_unload modversions
parm: disable_msi:Disable Message Signaled Interrupt (MSI) (int)
parm: stop_on_tx_timeout:For debugging purposes, prevent a chip reset when a tx timeout occurs (int)
可以看到驱动程序已经更新为2.2.5f了