← 返回目录课程:《Linux系统ConnectX网卡驱动安装实战》
02

02 硬件识别:lspci与ethtool确认ConnectX-4/5/6/7型号

学会使用lspci和ethtool识别网卡PCIe信息与固件版本
章节导航 难度:入门类型:排障定位
本页抓手

掌握硬件识别在硬件识别中的定位、故障信号与验证顺序。

机制词
模块接口配置流程状态
可复用材料
代码片段排障表检查清单架构图

排障先看这三点

  1. 先核对硬件识别的前置条件、异常信号和验收结果
  2. 再用伪代码把实现动作固定下来
  3. 最后用稳定性与可观测性验证结果是否可复现

源码证据

硬件识别只有在出现源码、函数、脚本或 API 证据时,才需要进入代码层核对。

本节把硬件识别对应的调用关系、异常状态和复测证据放在一起检查。

从PCIe拓扑到固件版本:硬件识别的完整链路

硬件识别闭环复核01PCIe拓扑锁定插槽编号与总线02设备ID核对供应商与设备号03固件版本确认固件兼容性边界04交叉验证避免误读虚拟化设备05异常信号识别驱动不兼容风险06对象边界先定义适用范围

硬件识别的验收口径

在Linux服务器体系(Linux Server Architecture)中,安装ConnectX系列网卡驱动的第一步并非下载源码包,而是精确识别当前硬件。许多工程师在“Linux发行版镜像配置(Linux Distribution Image Configuration)”阶段就因型号误判导致驱动不兼容,进而触发内核恐慌(Kernel Panic)或固件升级失败。本节的核心任务是通过lspci和ethtool两条命令,从PCIe总线拓扑中锁定网卡的具体型号(ConnectX-4/5/6/7)及其固件版本,为后续的驱动编译与systemd服务配置建立可靠的硬件基线

实操步骤

在目标服务器上执行 lspci -vvv | grep -i mellanox,先确认网卡所在的PCIe插槽编号(如 03:00.0),再通过 ethtool -i enp3s0f0 获取驱动与固件版本。这两个命令的输出必须交叉验证,避免误读虚拟化透传设备

关键机制:lspci与ethtool的协同判断

lspci 读取的是PCIe配置空间(Configuration Space)中的设备ID(Device ID)与供应商ID(Vendor ID),而 ethtool 则通过内核网络子系统与网卡固件通信,返回固件版本(Firmware Version)和扩展ROM版本。两者结合可以覆盖从物理层到驱动层的完整识别链路

以ConnectX-5为例,其Device ID为 1017,而ConnectX-6的Device ID为 101b。若仅依赖 lspci 输出中的“Mellanox”字符串,可能将ConnectX-4 Lx(Device ID 1015)误判为ConnectX-4。因此,必须记录完整的PCIe类代码(Class Code)与子系统ID(Subsystem ID)

检查清单
硬件识别 · 参数表:ConnectX系列关键PCIe识别字段
检查项标准是否通过常见遗漏
ConnectX-41013000112.28.xxxx
ConnectX-51017000216.32.xxxx
ConnectX-6101b000320.28.xxxx
ConnectX-71021000424.32.xxxx
关键判断

当 lspci -n 输出的Device ID不在上表范围内(如 15b3:1003 为ConnectX-3),应立即停止驱动安装流程,因为ConnectX-3已被NVIDIA标记为“有限支持(Limited Support)”,且其驱动(核心)与ConnectX-4/5/6/7的核心不兼容

硬件识别的技术资产与验证方式

以下是一次真实的硬件识别过程,目标服务器运行CentOS 7.9,内核版本3.10.0-1160。执行命令并记录输出,作为后续驱动安装的验证基线

# 步骤1:定位网卡PCIe设备
$ lspci -D | grep Mellanox
0000:03:00.0 Network controller: Mellanox Technologies MT27700 Family [ConnectX-4]
0000:03:00.1 Network controller: Mellanox Technologies MT27700 Family [ConnectX-4]
# 步骤2:获取详细PCIe信息(重点关注Device ID与Subsystem ID)
$ lspci -s 03:00.0 -vvv | grep -E "Device ID|Subsystem|Class"
        Device ID: 1013
        Subsystem: 15b3:0001
        Class: 0200
# 步骤3:通过ethtool获取固件版本与驱动信息
$ ethtool -i enp3s0f0
driver: 核心
version: 5.0-0
firmware-version: 12.28.2000
bus-info: 0000:03:00.0

阅读这段代码时,重点看硬件识别的伪代码,以及它如何用稳定性与可观测性证明结果可复测。

上述输出验证了三个关键点:Device ID 1013 确认为ConnectX-4;firmware-version 12.28.2000 符合ConnectX-4的固件版本范围;bus-info 与 lspci 的PCIe地址一致,说明网卡未被虚拟化层透传。若此处出现 bus-info 为 virtio 或 0000:00:00.0,则表明网卡是虚拟机中的模拟设备,不应直接安装原生驱动

真实项目场景

某数据中心运维团队在批量部署ConnectX-6网卡时,发现部分服务器的 ethtool -i 输出中 firmware-version 字段为空。经排查,原因是这些服务器的SSH配置(SSH Configuration)未启用 PermitRootLogin,导致自动化脚本无法以root权限执行 ethtool,进而无法读取固件信息。最终通过修改 /etc/ssh/配置 并重启 systemd 服务解决