ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

老服务器网卡驱动排错:BCM5709/5716/5722选型与安装实战

老服务器网卡驱动排错:BCM5709/5716/5722选型与安装实战 简介压缩包内含博通 BCM5709、BCM5716、BCM5722 三款网卡的完整驱动与配套工具适用于服务器、工作站和企业级网络设备在操作系统下的驱动安装、更新与排错。BCM5709 千兆、BCM5716 双口千兆、BCM5722 双口万兆控制器均覆盖其中并附带驱动说明、安装脚本、系统文件及固件工具其中 BCM5709 支持 PCIe 与 QoS 队列BCM5716 支持 VLAN/LACP 冗余BCM5722 则面向 10GbE 与硬件卸载场景。整包共 306 个文件大小 179.6MB除 exe/sys/inf 等核心驱动文件外还包含批量安装 bat、mst 配置、txt 说明、bin 固件和 gif 图示方便不同经验水平的用户按目录查用。目前已有 2161 人学习下载。借助包内的驱动文件、设备管理安装指引和校验信息读者可快速完成三款网卡的识别与驱动部署包内同时给出的常见检查与安装说明也能帮助运维人员减少因驱动版本不匹配导致的网络中断或性能异常。1. 老服务器重装系统网卡驱动装不上BCM5709/5716/5722 的驱动到底该怎么选机房接手一批淘汰下来的机架式服务器系统重装后网卡只剩黄叹号设备管理器里显示英文的 Ethernet Controller连厂商信息都没有。这类机器十有八九用的是博通 Broadcom 的 BCM5709、BCM5716 或 BCM5722当年戴尔、惠普、联想的机架式服务器里大量铺货。它们同属 NetXtreme II 系列驱动不能只靠 Windows 自带的通用以太网驱动装错版本轻则千兆协商成百兆重则干脆找不到设备。这套资源就是把 BCM5709、BCM5716、BCM5722 的网卡驱动程序按系统版本分好目录打成 zip 包。它解决的核心问题很具体老服务器在 Windows Server 2008/2012、Win7/Win10 乃至 Linux 环境下不认识网卡、不知道下哪一个驱动、装完不对版的尴尬。适合机房运维、二手服务器采购、以及常年帮人重装系统的老手一次解压就能把芯片型号和对应驱动对上号省去在官网层层翻目录的时间。2. 三种芯片三条路BCM5709/5716/5722 的硬件差异与驱动选型2.1 先把芯片认清楚硬件 ID 才是唯一的准BCM5709、BCM5716、BCM5722 是三个不同定位的芯片但驱动目录里有大量交叉文件只凭网卡外观很难区分。最靠谱的办法是看设备管理器里的硬件 ID右键网卡设备详细信息属性选硬件 ID会看到类似PCI\VEN_14E4DEV_1639SUBSYS...的字符串其中VEN_14E4是博通的厂商 ID后面DEV_后面的四位十六进制才是芯片真实身份。我做过一张对照表贴在自己工位玻璃板上处理这类机器时直接对照芯片型号典型硬件 ID接口与端口常见出现场景BCM5709DEV_1639 / DEV_163BPCIe x4双口或四口IBM x3650 M2/M3、浪潮 NF5220BCM5716DEV_163APCIe x1双口Dell R610/R710、HP DL360 G6BCM5722DEV_163C / DEV_163DPCIe x1单口或双口老工作站板载、独立 PCIe 千兆卡注意同一个芯片在不同 OEM 机型里SUBSYS后面的值会变但DEV_不会变。所以排查时先看硬件 ID 的中间四位不要被SUBSYS迷惑。如果设备显示 Ethernet Controller 但看不到厂商信息说明 Windows 没加载到正确的 INF硬件 ID 是你唯一能够依赖的判断依据。2.2 解压 zip 后的驱动目录结构要一眼看穿拿到驱动 zip 包先别急着点 Setup.exe。博通这套驱动的安装方式与普通软件不同解压后通常按操作系统分目录常见的有Server2003、Vista、Win7、Win8-64、Server2008R2偶尔带有 Linux 和 Solaris 目录。安装时选错目录不会报错但可能出现设备管理器显示驱动已安装实际功能不对的情况。我的习惯是先找到与系统匹配的 INF 文件用 PowerShell 查看驱动版本和兼容列表# 读取 INF 文件里的驱动版本号 Get-Content C:\drivers\bcm\Win8-64\b57nd60a.inf | Select-String DriverVer # 查看 INF 支持的硬件 ID 列表 Get-Content C:\drivers\bcm\Win8-64\b57nd60a.inf | Select-String VEN_14E4DriverVer显示的是驱动版本和发布时间VEN_14E4行会列出该 INF 支持的设备列表。这两个信息能帮你快速判断手上的包是哪个时期的产物如果 INF 里根本没有你的 DEV_ 值说明驱动版本太旧装不上是正常的跟操作无关。这种做法比直接双击 Setup 可靠得多尤其是面对 OEM 定制过的系统时。2.3 NetXtreme II 的卸载特性别误用BCM5709 和 BCM5716 这一代芯片引入了不少硬件卸载能力TCP/IP Offload、RSS 多队列、VLAN Offload部分型号甚至支持 iSCSI Offload。但通用网卡驱动默认不会开启 iSCSI 功能想把它当硬件 iSCSI HBA 用需要配合博通单独的 iSCSI 驱动组件驱动包里没有。我看到过有同行拿普通网卡驱动强行开 iSCSI 卸载结果系统直接蓝屏。对绝大多数场景建议只保留默认启用的 RSS 和 TCP Checksum OffloadVLAN Offload 在跨交换机场景下先关掉。原因后面避坑章会展开。选型结论先行BCM5709 多口四口看 DEV_163B做软路由或虚拟化宿主机更合适BCM5716 双口主流Dell 机器上最常见BCM5722 性能弱一档当普通业务网口用就好。3. 驱动安装的完整实操Windows 命令安装与 Linux 内核对口3.1 Windows先手工指定目录再转 pnputil 批处理Windows Server 2008 R2 和 2012 的系统驱动安装我基本不走 Setup.exe而是手动指定驱动目录。解压 zip 到固定路径比如C:\drivers\bcm设备管理器右键网卡更新驱动程序浏览我的电脑指向对应系统目录如Win8-64让系统自行匹配。这一步能把大部分兼容问题挡在门外。匹配成功后再用 pnputil 把驱动正式导入系统驱动库方便后续重装或转批处理# 导入驱动到系统驱动库并立即安装到匹配设备 pnputil /add-driver C:\drivers\bcm\Win8-64\b57nd60a.inf /install # 查看驱动库里是否已经存在同系列驱动 pnputil /enum-drivers | Select-String b57/add-driver是把 INF 复制到系统驱动库/install是触发即插即用匹配并安装。单独只跑/add-driver不一定会让网卡立即可用两个参数组合使用才是一次性到位。如果你发现系统里已经有旧版博通驱动需要加/force参数强制覆盖否则 pnputil 会跳过新装。Windows Server 2003 老系统没有 pnputil用 devcon 替代devcon update C:\drivers\bcm\Server2003\b57nd60a.inf PCI\VEN_14E4DEV_1639devcon 的update参数后面必须跟完整的硬件 ID 字符串作为目标设备INF 路径必须写全。这一步的坑在于如果设备此刻还挂着黄叹号系统面板里可能显示 未知设备但硬件 ID 已经存在devcon 依然能找到它。判断标准就是命令后看是否输出 updated 字样。3.2 Linux不用编译不等于不用管 bnx2Linux 内核主线自带bnx2驱动模块BCM5709、BCM5716、BCM5722 都被原生支持装系统时一般直接就能识别。但新内核发行版偶尔会遇到模块编译失败或固件缺失的情况表现是ip link下根本看不到网卡接口。先确认模块状态# 查看 bnx2 模块是否存在及其版本信息 modinfo bnx2 | grep ^version # 手动加载模块 sudo modprobe bnx2 # 确认模块已加载 lsmod | grep bnx2modinfo的 version 字段能帮你判断驱动是内核编译期生成的还是外部模块。在 Ubuntu 或 CentOS 上如果 modprobe 提示找不到固件bnx2-mips-09-6.2.1.fw之类的文件说明发行版把固件包拆出来了需要单独安装linux-firmware包而不是去编译驱动源码。这里有个常见误用看到网卡不通就下源码编译其实 90% 的情况是固件文件缺失或模块未加载。如果是 CentOS 7 这类老系统配了新内核kernel-devel 版本不匹配导致外部模块编译失败我的处理方案是走 DKMS# 安装 DKMS 后重新注册 bnx2 模块源码 sudo dnf install dkms kernel-devel sudo dkms add -m bnx2 -v 2.2.6 sudo dkms install -m bnx2 -v 2.2.6dkms add注册源码树dkms install编译并安装到当前内核。这里的2.2.6只是一个示例版本号实际使用要以你下载的源码包为准。DKMS 的核心价值是内核升级后自动重编模块省去每次升级内核都要手工编译的重复劳动。3.3 安装后立刻验证速度、链路、驱动版本驱动装完不能只看图标没黄叹号就算完事老网卡最容易出现驱动装好但链路异常的隐性故障。Linux 下用 ethtool 直接查# 查看网口协商速度和工作模式 ethtool eno1 # 查看网卡驱动的名称和版本 ethtool -i eno1第一条命令看 Speed、Duplex 字段Speed 应该显示 1000Mb/sDuplex 是 Full。如果显示 100Mb/s问题大概率不在驱动而在线缆或协商策略。第二条命令看 driver 字段确认是bnx2而不是tg3这两个驱动看着像但面向完全不同系列的芯片弄混了会出大问题。Windows 系统则右键网卡属性查看链接速度是否显示 1.0 Gbps同时在事件查看器的网络日志里确认网卡初始化无错误。4. 避坑这套驱动最常见的四个翻车现场4.1 设备管理器能看到设备但驱动怎么都装不上现象设备管理器里网卡显示 Ethernet Controller 或 网络控制器手动指定驱动目录后提示找不到更好的驱动程序或无法验证此驱动程序的发布者。原因INF 文件里不支持你手上这块卡的具体 DEV_ 编号或者驱动版本太老签名方式在系统安全策略下被拒。我遇到最多的情况是从第三方网站下载的所谓万能驱动包解压后 INF 文件都是旧版 OEM 改出来的兼容列表里根本没有干净的 VEN_14E4 条目。解决先用 2.1 的硬件 ID 对照确认芯片具体型号再回到驱动包的 INF 里搜一次VEN_14E4。搜不到就说明这个包根本不对版换包是唯一出路。如果设备是 Dell、HP、IBM 整机优先去对应 OEM 的支持站下载定制驱动他们改过 INF 匹配自家主板设备 ID兼容性比博通原包更省心。搜到但装不上再看系统事件日志里 CAPI2 和 SetupAPI 两个日志来源一般是签名问题关闭驱动签名强制验证或换 Win7 兼容模式重试。4.2 驱动装好了网卡状态却一直 100Mbps现象设备识别正常驱动版本也对但链接速度始终停 100Mb/s传输大文件直接吃满带宽。原因先说最普遍的网线只通了四芯。老机房 Cat5 网线年头久了八芯里断一两芯很常见总线速会从 1000M 协商降级到 100M。其次可能是交换机端口被配置成强制百兆或网卡属性里被手工指定为 100 Full。最后一种是被忽视的BIOS 里 PCIe 链路宽度配置异常把网卡插槽限到了 x1 Gen1。解决先用 ethtool 或网卡属性把 Speed Duplex 改为 Auto Negotiation排除强制协商因素。然后换一根已知良好的六类线交叉验证。如果换线恢复千兆就是线缆问题如果还是百兆进交换机查端口配置都正常就查 BIOS 里的 PCIe 槽位设置。经验是排查顺序从物理层往上走不要一上来就换驱动因为链路协商失败在驱动层面通常没有任何报错。4.3 双口网卡只有一个口能用现象BCM5716 双口卡系统里只能看到一个网口另外一个端口在设备管理器里完全没有存在感。原因部分 OEM 服务器的 OCP 网卡或 Riser 转接卡只给第一个端口提供完整的 PCIe 通道第二个端口需要额外的线缆或插槽供电才被系统枚举。这种情况不是驱动问题。还有一种原因是 BIOS 里该槽位的 Slot Power 被设置成低功耗模式第二个网口的 PHY 芯片供电不足。解决先查物理连接把网卡插到完整 x8 或 x16 的 Riser 槽位确认板载线缆两端都接牢。再进 BIOS找到 PCIe 槽位电源设置把测量项从低功耗切到最大。经验是 Dell R610 这类机器BCM5716 的第二个口经常需要搭配特定 Riser 卡才能同时识别如果你用的是通用转接卡第二个口找不到基本无解只能换整机配套 Riser 才能体验。4.4 刷固件中途断电网卡直接消失现象为了修 PXE 引导问题去更新网卡 Boot ROM 固件更新工具跑到一半停电或报错退出重启后网卡设备完全消失BIOS 里也看不到。原因NetXtreme II 的 Boot ROM 固件与网卡主固件共用一颗 Flash 芯片刷写中断会把固件头破坏设备上电后无法正常初始化 PCIe 配置空间所以连设备枚举都做不到。这不是驱动能救回来的属于变砖状态。解决先看 BIOS 的 POST 界面是否还能探测到网卡能看到就有希望。用另一台能开机的机器把网卡插进一个 PCIe 插槽用 Boot Image 工具的强制恢复模式重写 Boot ROM。如果 BIOS 完全认不到只能把 Flash 芯片吹下来上编程器重写没有编程器就去找固件恢复商家。从那以后我每次刷博通网卡固件都强制走一遍先记录原固件版本再确认 UPS 在线最后才打开刷写工具。5. 装完后测带宽用 iperf 把老网卡打出真实性能5.1 双向跑 iperf3 判断是驱动问题还是硬件问题驱动装好只是第一步老网卡的真实性能要用 iperf3 验证。iperf3 比 Windows 资源监视器直观得多它直接给出吞吐量数字让你一眼看出网卡是否跑满了千兆。在服务端和客户端都装好 iperf3# 服务端监听 5201 端口 iperf3 -s # 客户端测下行带宽 iperf3 -c 192.168.1.10 -t 60 # 反向测上行带宽 iperf3 -c 192.168.1.10 -t 60 -R-t 60是测试时长 60 秒-R是反方向测试。单测一个方向得到的带宽数据没有说服力因为老网卡有时会出现单方向吞吐异常下行能跑满上行只有 300M。正常情况下BCM5709 和 BCM5716 双向都应该稳定在 940Mbps 左右因为千兆以太网的线速理论最大值就是 1000M 扣掉协议开销。如果测出来只有 500M 左右先用ethtool -S检查网卡统计里的rx_crc_errors和tx_timeout这两项有计数说明物理层或驱动存在隐性错误。5.2 RSS 队列、巨帧与 Offload 开关的取舍最后一个建议集中在性能调优。RSS 多队列在这个系列上是默认开启的处理多连接负载时能均衡到多个 CPU保持默认设置即可不要手动改成单队列。TCP Checksum Offload 和 TSO 建议保留硬件卸载这能显著降低 CPU 占用。真正需要手动管的是巨帧和 VLAN Offload如果交换机没有全局开启 MTU 9000就不要在网卡上设巨帧否则跨设备通信会出现能 ping 通但传大文件断流的诡异现象VLAN Offload 在虚拟机桥接场景容易引发丢包遇到虚机网络时优先关掉。从那以后我接手这类老服务器网络配置都会强制走一遍完整流程先查硬件 ID 确认芯片再匹配对应系统驱动目录装完用 ethtool 或设备管理器确认协商速度最后双向跑一轮 iperf3 验证吞吐。这套流程看着多一步但能在一小时内区分出驱动问题和硬件问题两个方向省下的排查时间远超操作成本。希望这些记录对你有用。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进