首页 > 代码库 > Broadcom NetXtreme II BCM5706/5708/5709/5716 Driver 驱动问题处理办法

Broadcom NetXtreme II BCM5706/5708/5709/5716 Driver 驱动问题处理办法

最近发现服务器的网卡经常会自己down然后几分钟后有突然自己up,这个问题没有规律的出现,且会反复出现,无法人为重现故障环境。在更换了网线后,问题依然存在。在查阅了大量的网上资料后,怀疑是网卡启动程序的问题,需要更新网卡驱动程序。

Broadcom NetXtreme II BCM5706/5708/5709/5716 Driver 的驱动程序是可以热更新的不需要重启也不会出现闪断,可能会有一个包的丢包,这个在业务中基本可以允许出现。

下面我记录了处理办法的方法:

1、使用虚拟机安装一个跟生产环境操作系统一致的操作系统环境

1.1 确认生产环境

我的生产环境是CentOS 6.4 64位。

# 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组件,已经安装过的可以跳过这步。

# 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包

# 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的驱动程序包

# 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包

# 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包

# cd ~/rpmbuild
# rpmbuild -bb SPECS/kmp-netxtreme2.spec

待运行完毕后可以得到~/rpmbuild/RPMS目录,里面保存着驱动程序的安装包

# 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包

# rpm -ivh ~/rpmbuild/RPMS/x86_64/kmod-netxtreme2-7.10.12-2.rhel6u4.x86_64.rpm
Preparing...                ########################################### [100%]
   1:kmod-netxtreme2        ########################################### [100%]

安装会持续一段无响应的时间,这里请保持运行,不要中断执行。

如果安装完成我们可以通过modinfo bnx2来验证安装的驱动是否到位

# 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了

9、上传制作好的rpm到业务环境,使用rpm命令安装。


话外音,我更新了驱动后依然发现有断流现象出现,问题还没有解决,不过驱动程序的更新是正常的,更新驱动程序的朋友可以借鉴参考。

Broadcom NetXtreme II BCM5706/5708/5709/5716 Driver 驱动问题处理办法