最近发现服务器的网卡经常会自己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 驱动问题处理办法
原文地址:http://blog.csdn.net/pengsixiang/article/details/41845549