3. 第3章
03 固件与驱动:ConnectX-5/6固件升级与mlx5_core驱动安装
掌握6固件升级在固件与驱动中的定位、故障信号与验证顺序。
固件与驱动:ConnectX-5
恢复验证卡
把失败停在哪一步说清,而不是只写“运行异常”。
核对资源、版本、权限和时序是否满足。
每次只改一个点,避免把真正原因盖住。
把通过、失败和待复查结果分开记录。
固件与驱动落地前要同时核对6固件升级的核心驱动安装、失败路径和学习固件烧录流程。
概念块:固件与驱动
固件与驱动用6固件升级、核心驱动安装、学习固件烧录流程连接到6固件升级的调试、验证和交付动作。
- 6固件升级
- 核心驱动安装
- 学习固件烧录流程
- 驱动编译安装
在 SR-IOV 虚拟网卡实战中,固件版本与驱动栈的兼容性直接决定了虚拟功能(VF)的稳定性与性能上限。本节聚焦于 ConnectX-5 与 ConnectX-6 网卡的固件烧录流程,以及 核心 驱动的编译安装方法,确保硬件在虚拟化环境中能够正确暴露 SR-IOV 能力
固件与驱动的版本匹配是 SR-IOV 功能可用的前提。使用 核心 驱动时,必须确保固件版本不低于驱动所要求的最低版本,否则 VF 创建将失败或出现异常丢包
固件升级:从版本检查到烧录验证
固件升级的核心目标是修复已知硬件缺陷、增加新特性(如更多 VF 支持)并保持与上游驱动栈的兼容性。操作链路为:版本检查 → 获取固件包 → 烧录 → 重启 → 验证
版本检查与固件获取
首先,通过 mlxconfig 或 mstflint 工具查询当前固件版本。例如,使用 mstflint -d 0000:03:00.0 q 可查看设备 PSID 与当前固件版本。然后,从 NVIDIA 官方固件仓库下载对应 PSID 的固件包(.bin 文件)。注意:ConnectX-5 与 ConnectX-6 的固件包不可混用,错误烧录将导致设备无法识别
烧录流程与风险控制
烧录使用 mstflint -d 0000:03:00.0 -i /path/to/fw-ConnectX5.bin burn 命令。烧录过程中必须保持电源稳定,禁止中断。烧录完成后,执行 reboot 使新固件生效。重启后,再次使用 mstflint -d 0000:03:00.0 q 确认已更新
很多工程师在烧录后直接使用 mlxconfig 查询版本,但此时新固件尚未加载。必须重启系统,让网卡从 Flash 加载新固件,才能通过 mstflint 或 ethtool -i 验证
核心 驱动编译与安装
核心 驱动是 Linux 内核中用于支持 Mellanox ConnectX-5/6 网卡的原生驱动模块。虽然大多数发行版已内置该驱动,但为了获得最新特性或修复特定 bug,手动编译安装是常见需求
编译环境准备与源码获取
首先,安装内核头文件与编译工具链:yum install kernel-devel kernel-headers gcc make(RHEL/CentOS)或 apt install linux-headers-$(uname -r) build-essential(Ubuntu)。然后,从 NVIDIA 官方下载 MLNX_OFED 驱动包或直接克隆 linux-mlnx 仓库。推荐使用 MLNX_OFED,因为它包含完整的驱动栈与固件工具
编译与模块加载
进入驱动源码目录,执行 ./configure --with-kernel=/usr/src/kernels/$(uname -r) 配置编译选项。然后执行 make 与 make modules_install。安装完成后,使用 modprobe 核心 加载模块。通过 lsmod | grep mlx5 确认模块已加载,并使用 dmesg | grep mlx5 检查是否有错误信息
编译完成后,务必执行 depmod -a 更新模块依赖关系,否则重启后系统可能无法自动加载新模块。同时,建议在 /etc/modprobe.d/mlx5.conf 中配置 options 核心 num_vfs=8 等参数,以便开机自动创建 VF
样例套用检查
把固件与驱动整理成一次样例或工具使用核对。用 18 分钟核对使用顺序、替换位置和输出物: