简介:博通BCM5709/5716/5722网卡驱动资源包面向服务器、工作站及企业级网络设备的管理维护人员,解决三类网卡在操作系统中的识别、驱动匹配与稳定传输问题。资源共306个文件、179.6MB,主体为exe安装程序、sys驱动核心、inf配置信息及cat数字签名,并包含bin固件、dll组件与多格式说明文档,可覆盖不同系统环境下的安装、更新与排错需求。其中BCM5709为千兆PCIe控制器,BCM5716支持双端口冗余与链路聚合,BCM5722提供万兆传输及硬件卸载能力,驱动包针对这些特性提供了相应支持文件与管理工具。压缩包内还含有gif、htm、pdf等图文教程和配置示例,便于对照完成驱动安装与验证。目前已有2164人学习下载,适合需要快速部署或维护博通服务器网卡的用户参考使用。
1. 博通BCM5709/5716/5722网卡驱动程序:别再让服务器网卡在资源管理器里“失踪”
遇到过这种情况吗?机器上明明插着双口千兆网卡,进系统后网络连接里只有一个不认识的设备,或者设备管理器里那个“以太网控制器”一直顶着黄色感叹号。大多数时候,这不是硬件坏了,而是博通BCM5709/BCM5716/BCM5722的网卡驱动程序没匹配上。这张zip包里打包的,就是这三款芯片的全家桶驱动,从Windows Server到Linux、从32位到64位都能对应上。运维人员拿到它,最大的价值不是“装一个驱动”,而是能快速判断自己手里这块卡到底是5709C还是5716S,根据硬件ID选对inf文件,少走两三个小时弯路。适合那些还在维护Dell PowerEdge、HP ProLiant等老款服务器的人,也适合刚接手机房、需要批量重装系统的朋友——先把网卡驱动搞定,后面远程管理才谈得上。
2. 先认芯片再装驱动:BCM5709/5716/5722的型号区分与设备ID确认
2.1 芯片命名里的字母玄学:C代表铜口,S代表光纤口
博通NetXtreme II这代产品,命名规律其实很好记。BCM5709和BCM5716都是双口千兆PCIe网卡,区别主要在集成度和功耗上;BCM5722是单口。后缀字母才是真正容易踩坑的地方:C表示铜缆RJ45口,S表示光纤SFP口。同样是BCM5709,BCM5709C和BCM5709S在系统里识别出的子系统ID不一样,用的inf可能也不同。
很多人在旧服务器上拆下来的网卡,丝印已经被散热片盖住,或者手边没网没法查产品库。这时候最快的方法是看网卡档板上贴的标签,或者直接用系统识别到的硬件ID反查。在Windows下打开设备管理器,找到那个未驱动的“以太网控制器”,右键属性,切到“详细信息”,属性下拉框选“硬件ID”,会看到类似PCI\VEN_14E4&DEV_163A的字符串。14E4是博通的厂商ID,后面那四位才是芯片编号。
拿到这串硬件ID以后,对照驱动包里的目录名选驱动,基本不会错。打开zip解压后,常见目录结构是这样的:
BCM5709_5716_5722_Driver/ ├── Windows/ │ ├── Win7_XP/ │ ├── Win2008/ │ ├── Win2012/ │ └── Win2016/ ├── Linux/ │ ├── bnx2-x.x.x.tar.gz │ └── README └── Release_Notes.txt这个树形结构是驱动包的典型布局。Windows目录下按系统版本拆开,目录名里的x.x.x是驱动版本号,具体以你拿到的包为准。如果你不确定自己的网卡是双口还是单口、是铜口还是光口,用户手册一般会写明,但更省事的判断方式就是看网卡上RJ45口旁边有没有SFP插槽。存疑的时候,优先用Windows自带目录里的inf去试,装错型号的后果通常是驱动能装上,但端口起不来,或者链路协商一直失败。
2.2 用设备ID反向匹配驱动,不要靠网卡名字猜版本
驱动包里的Release_Notes.txt不是摆设。打开它,通常第一页就列着支持的设备列表,包括VEN_ID、DEV_ID、子系统ID以及对应驱动名称。你之前用硬件ID反查出来的DEV_163A或DEV_163B,要和这个列表一一对应。比如BCM5709的设备ID在某些版本里对应0x163A,BCM5716对应0x163B,BCM5722对应0x163C——不同批次、不同子系统的卡会有差异,所以最可靠的办法是:打开Release_Notes,搜索DEV_的十六进制值,看它落在哪个驱动目录下。
这种操作习惯最好养成。直接从系统里识别出来的网卡名称装驱动,容易碰到“明明包里有驱动却不让装”的情况,因为旧版Windows的安装程序是按INF匹配的,INF里声明的设备ID跟你系统里识别到的必须完全一致。很多人的翻车现场就是:下载了一个通用驱动包,发现里面全是dell_、hp_、lenovo_开头的目录,自己机器是超微主板,结果没有对应目录。这时候别急着换包,看Release_Notes里的支持列表,往往能找到通用的bcom_xx目录。
2.3 拿到zip包的第一个动作:校验压缩包完整性
网络上下来的网卡驱动程序zip包,下载过程中经常断流导致文件损坏。不要急着解压,先看一眼大小是否和发布页标注一致。解压报错“invalid zip archive: could not find eocd”这类情况,十有八九是包没下全。我之前就被这种问题坑过,在机房现场解压驱动包,结果提示“不能打开这个压缩包”,所有机器都装不了,只能重新找一个网卡再下载。从那以后,我每次拿到zip包,第一件事是在Windows上右键属性,看“压缩包大小”和“占用空间”是否合理,再点开看里面目录结构是否完整。这不是玄学,是血泪经验。
另外,老服务器驱动包经常随着硬件固件一起更新。如果你是从Dell或HP的官方支持页下载的zip,里面可能还带着固件更新工具和ASF管理组件。只要网卡驱动能正常加载,固件工具可以留到以后需要时再用,没必要全部安装。
3. Windows下安装驱动:手动更新、命令行批量装与电源管理坑
3.1 设备管理器手动更新:最稳但最慢的方式
Windows Server 2012及以下系统,安装博通网卡驱动最不容易出错的方式还是老办法:设备管理器里手动更新。右键那个带感叹号的未知设备,选择“更新驱动程序软件”→“浏览计算机以查找驱动程序”,然后指向你解压出来的Windows目录。注意这里不要直接指向总目录,要指向对应版本的子目录,并且勾选“包括子文件夹”。
如果系统提示“找不到匹配的驱动”,先核对两件事:一是设备是64位还是32位(可以在系统属性里看),二是这个子目录里确实有包含你硬件ID的INF文件。手动更新方式的好处是能实时看到错误信息,坏处是一台一台装效率太低。批量装机场景下,用命令行更香。
3.2 用pnputil批量添加网卡驱动程序:适合无人值守安装
Windows Server 2008 R2以上系统里,pnputil是管理驱动包的标准工具。把驱动目录拷贝到机器上,然后以管理员身份打开CMD,执行:
pnputil /add-driver "C:\drivers\BCM5709_5716_5722\Windows\Win2012\x64\bxn57.inf" /install命令中的/add-driver表示把驱动包添加到系统驱动库,/install则要求添加后立刻对已连接的硬件进行安装。如果机器上有多个博通网卡(比如主板集成两个口加一张四口卡),且每个口的硬件ID不同,你可以用通配符批量添加整个目录:
pnputil /add-driver "C:\drivers\BCM5709_5716_5722\Windows\Win2012\x64\*.inf" /subdirs /install/subdirs参数会递归扫描子目录里的所有INF,这在驱动包目录里又套了system32之类子文件夹时特别有用。执行完以后,查看设备管理器,网络适配器下面应该出现多张“Broadcom NetXtreme II 千兆以太网卡”。如果你的系统里配了VLAN或Teaming,需要等所有网卡驱动都装好后再去厂商管理工具里配置,顺序反了会导致端口绑定失败。
3.3 安装完以后马上关掉允许计算机关闭此设备
驱动装上只是第一步。博通BCM5709/5716/5722在Windows下默认开启了电源管理节能,服务器在无人访问时,网卡可能被系统“断电”,表现为远程桌面断开、ping不通,但机器本身没死机。尤其是单口BCM5722的机器,问题特别明显。
进入设备管理器,找到已安装的博通网卡,右键属性,切到“电源管理”页签,把“允许计算机关闭此设备以节约电源”前面的勾去掉。这个操作在每张网卡上都要单独做,包括Teaming组里的使用中端口和备用端口。不要嫌麻烦,这个坑几乎每个装老款博通卡的人都踩过,装完之后不关这个选项,服务经常半夜掉线,早上到机房才发现机器是活的、网卡睡过去了。
3.4 签名无法安装时怎么办
Windows Server 2016/2019在默认配置下要求驱动有微软签名,某些渠道流出的老驱动包里,inf文件还是旧版签名,安装时直接提示“无法安装驱动程序,找不到数字签名”。常见做法是临时开启测试签名模式:
bcdedit /set testsigning on重启后驱动就能装上,但生产服务器不建议长期开着测试模式,装完驱动后记得用bcdedit /set testsigning off关掉。请注意,我一般只用这个办法处理特殊的旧硬件,如果驱动包里有申请过WHQL签名的新版驱动,优先用新版,毕竟生产环境稳定第一。
4. Linux与ESXi下让bnx2驱动加载:从lspci到modprobe
4.1 先确认内核自带的bnx2模块是否存在
BCM5709/5716/5722在Linux内核里对应的是bnx2驱动模块,并不是bnx2x。bnx2x是给后来的57710/57711等10G网卡用的,很多新手在这里栽过跟头,拿着bnx2x的包去编译,怎么都识别不到网卡。如果你用的是RHEL/CentOS 6/7、Ubuntu 16.04/18.04这类发行版,bnx2模块基本都编译进内核了,所以要做的不是编译驱动,而是确认模块有没有被加载。
lspci -nnk | grep -A3 -i "netxtreme"命令中的-nnk会显示PCI设备的厂商ID、设备ID和正在使用的内核驱动。如果输出里能看到Kernel driver in use: bnx2,说明驱动已经正常绑定了。如果显示Kernel modules: bnx2但没有明确in use,说明模块存在但没绑定成功,先手动加载试试:
modprobe bnx2modprobe会按依赖自动加载bnx2模块并读取参数。执行后立即执行ip link show,看eth0是否出现。如果网卡状态显示DOWN,还需要ip link set eth0 up。这一步在很多精简版Linux系统里被默认关闭了,网卡起不来往往不是驱动问题,而是接口策略问题。
4.2 内核里没带驱动时,从源码编译的一般套路
在老系统或者特殊内核环境下,如果modprobe bnx2报“模块未找到”,就需要用驱动包里的Linux源码重新编译。过程不复杂,但步骤顺序不能乱:
tar xzf bnx2-2.0.23.tar.gz cd bnx2-2.0.23 make make install depmod -a modprobe bnx2第一行解压驱动源码,第二行进目录,make编译当前内核匹配的模块,make install把模块复制到/lib/modules/$(uname -r)/kernel/drivers/net/ethernet/broadcom/下。depmod -a会重建模块依赖关系,这一步漏了的话,后面modprobe可能报“Module not found”或依赖缺失。最后再加载。
编译过程中如果报缺少头文件,说明系统没有安装kernel-devel包。CentOS下用yum install kernel-devel,Ubuntu用apt install linux-headers-$(uname -r)补齐。源码目录里通常还有README和INSTALL,里面会写明该驱动版本要求的最小内核版本。我一般会先看一眼README再动手,避免make到一半才报版本不兼容。
4.3 驱动加载后,确认网卡是否处于工作状态
模块加载成功并不等于链路通了。在Linux下检查网卡状态,ethtool是最好用的工具:
ethtool eth0输出里最关键的两行是Link detected: yes和Speed: 1000Mb/s。如果Link detected是no,先看网线和对端交换机端口;如果Speed不是1000Mb/s而是100Mb/s,多半是网线质量问题或者协商异常。这时用ethtool eth0查看协商状态,必要时强制指定速度:
ethtool -s eth0 speed 1000 duplex full autoneg on-s参数用于设置网卡参数,speed 1000指定1000Mbps,duplex full设全双工,autoneg on开启自动协商。老网卡对自动协商支持不太好,遇到握手失败可以改为autoneg off,但同时要保证对端交换机端口也是强制千兆全双工,否则会持续丢包。这些操作在BCM5716和5709上都通用,因为bnx2驱动对这些芯片的寄存器处理是一致的。
5. 装驱动时的四大翻车现场:BCM5709驱动安装避坑记录
5.1 现象:设备管理器报“找不到指定的文件”
按照正常流程手动更新驱动,选择了解压目录,系统却弹出“找不到指定的文件”。打开详细错误信息,往往能看到它去某个临时目录里找某个后缀为.sys的文件,但那个目录是空的。
原因:旧版驱动安装包运行时把inf复制到C:\Windows\INF,但对应的.sys文件没解压出来,或者解压过程中被杀毒软件隔离了。尤其国内服务器环境的360、杀毒软件会把驱动包的启动文件当作可疑物清理掉。
解决:先把杀毒软件临时退出,重新解压整个zip包,放入一个不含中文和空格的路径,例如C:\drivers\bcm57。然后重新执行手动更新。如果还不行,去设备管理器里手动指定INF,而不是让系统自动搜索文件夹。
5.2 现象:驱动装上后网卡所有端口都无法访问
驱动安装成功,设备管理器里也没有感叹号,但网卡的1号口和2号口都ping不通,本地连接状态显示“网络电缆被拔出”。
原因:最常见的是把BCM5709C铜口卡装成了BCM5709S光纤口的驱动。虽然这两者的VEN_ID、DEV_ID可能相同,但子系统ID不同,驱动里对PHY的初始化逻辑不一样,导致铜口PHY没有被正确激活。
解决:再次打开硬件ID,记录下完整的“VEN_14E4&DEV_163A&SUBSYS_XXXX”信息,去Release_Notes里找到对应的子系统ID,确认使用的是铜口还是光口的inf。如果驱动包里有多个inf,逐一尝试,安装后如果端口能起来就锁定那个inf,不要再换。这个操作在双口5716卡上尤其重要,因为双口卡只要一口PHY没激活,另一口也会一起罢工。
5.3 现象:Windows Server 2008 R2安装时提示“INF无法安装”
在R2系统上安装新版驱动,提示“INF无法安装,请与硬件制造商联系”,但同一份zip包在Windows Server 2012上装得妥妥贴贴。
原因:新版本驱动在去除SHA1签名支持的同时,也删除了对旧系统的兼容声明。驱动包里的inf文件[Manufacturer]段写着“仅支持Windows 8及以上”,系统版本检查没过。
解决:不要硬改inf文件,先看驱动包里的Win2008目录是否存在,装对应的老版本。如果只能找到新版驱动,右键inf文件→安装,看看是否绕过版本检查。实测最有效的做法是下载驱动包内的历史版本,比如Release_Notes里会列明各版本支持的系统,选支持Win2008 R2的最后一个版本,稳定优先。
5.4 现象:Linux下modprobe bnx2后网卡出现,但一跑大流量就断流
多网口同时工作,或者跑scp传输大文件时,网卡忽然断开,dmesg里能看到bnx2: hardware error或者TX timeout。
原因:散热不良通常是主因。BCM5709/5716运行在PCIe x4插槽时发热很大,尤其机箱内网卡旁边就是GPU或另一张四口网卡时,温度一高,PHY先挂。部分情况是网卡固件版本太低,和驱动配合有问题。
解决:先降温,用ethtool -i eth0查看固件版本,再去博通官网或服务器厂商支持页找固件更新工具。如果是老服务器,比如Dell R610,厂商固件包里的网卡固件更新工具是NetXtremeII_BootAgent_xxx.exe,更新固件后再安装驱动。从这以后我的习惯是:装驱动前先看固件,固件版本太老就不装新驱动,人为降级匹配。这不是严谨推导,是修了太多机器的直觉:博通老网卡固件和驱动版本一样,讲究匹配,新驱动+老固件的组合最容易出玄学问题。
5.5 现象:ESXi下网卡直通启用了但虚拟机内部识别不到
在vSphere上把BCM5716网卡直通给虚拟机,虚拟机系统里能看到网卡,但安装驱动后同样报错“设备无法启动”。
原因:ESXi的PCIe直通要求物理网卡支持ACS(Access Control Services),而这代NetXtreme II网卡的ACS支持不完整,直通后中断路由出错。
解决:别用直通,改用SR-IOV或者普通vmxnet3虚拟网卡。实际上在ESXi上跑BCM5709/5716,最好的用法就是当作普通物理网卡给ESXi自己管,不折腾直通。如果你是来找直通配置方法的,我可以直接说结论:不推荐,除非你想用“玄学调优”心态在中断NVIC寄存器上做手脚——那套操作在生产环境毫无性价比。
6. 验证驱动是否真装好:用ethtool和Windows状态做一次完整体检
6.1 Windows端快速验证:设备状态、链接速度、电源管理一项不落
装完驱动以后,先把设备管理器的“网络适配器”列表截图存好,等五分钟再看一遍有没有设备消失或出现感叹号。然后打开“网络和共享中心”→“更改适配器设置”,双击网卡查看状态,确认“速度”显示的是1.0 Gbps而不是100 Mbps。如果显示100 Mbps,马上检查网线是不是劣质跳线。
BCM5709/5716在Windows下默认开启大量卸载功能,包括IP Offload和TCP Chimney Offload。这两项在老系统上容易和虚拟化平台冲突,最好在网卡高级属性里手动调整以下参数:
| 属性 | 推荐设置 |
|---|---|
| Jumbo Packet | 1514(禁用巨帧) |
| TCP Chimney Offload | 已禁用 |
| Virtual Machine Queue | 已启用 |
| Receive Side Scaling | 已启用,4个队列 |
这张表适合绝大多数服务器内部通信场景。如果你跑的是数据库高连接数应用,建议把RSS队列数从默认的2调到4或8,因为BCM5716双口网卡共用一个PCIe通道,队列少了容易挤占中断。调整完参数后重启一次再测试,远程时记得先保留另一个可用的管理通道,免得网卡重载后手边没有物理键盘登不进去。
6.2 Linux端验证:ethtool查链路、驱动版本和ring缓冲
Linux下验证驱动是否真正可用,我习惯用三个命令连续确认:
ethtool eth0 ethtool -i eth0 ethtool -g eth0第一条看链路状态;第二条看驱动名称和固件版本,正常输出里可以看到driver: bnx2、version: 2.2.5f、firmware-version: bc 5.4.4;第三条查看ring buffer的当前值,一般显示RX: 255、TX: 511这类数字。对于千兆网卡,默认ring值已经够用,不需要刻意调大。如果系统的软中断占用很高,可以修改RSS队列数:
ethtool -L eth0 combined 4-L参数用于设置网卡队列数量,combined表示将RX和TX队列合并为4个。这个操作要求驱动支持多队列,bnx2在2.x版本后都支持。设置完以后用ethtool -l eth0确认,然后跑一次iperf3 -c 对端IP -t 30做吞吐验证。看到带宽接近940Mbps或以上,驱动就算真正合格了。
6.3 从驱动安装到日常维护的一条完整习惯
装完驱动不是结束,我建议每台机器都留一份“网卡驱动注册信息”Excel表,记录机器名、网卡芯片型号、硬件ID、驱动版本、固件版本、交换机端口号。以后和网络同事排查链路问题时,这份表能直接告诉对方交换机端口交叉验证,不用现场拆机。从那以后,每次处理BCM5709/5716/5722这类网卡驱动,我都会强制走完一套流程:先看硬件ID确认C/S后缀,再查固件版本决定驱动版本区间,装完立刻关电源管理、关TCP卸载,最后用ethtool或Windows状态做链路验证。这套流程已经成了我的肌肉记忆,虽然老套,但真的能帮你在机房里少踩一半的坑。希望帮到你。
本文还有配套的精品资源,点击获取