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 <mchan@broadcom.com>  

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了