掌握Lx网卡安装配置资料包在驱动编译中的定位、故障信号与验证顺序。
驱动编译用驱动编译、MLNX_OFED源码编译、内核模块加载连接到驱动编译的调试、验证和交付动作。
例如: modprobe 核心 会同时加载 mlx5_ib 和 mlx5_en
不要把底层实现细节、全局变量和临时调试逻辑暴露到上层接口。
ConnectX-6 Lx 网卡依赖的 MLNX_OFED(Mellanox OpenFabrics Enterprise Distribution) 源码包已包含在《ConnectX
驱动编译的第一步是确认内核版本与源码包的匹配关系。ConnectX-6 Lx 网卡依赖的 MLNX_OFED(Mellanox OpenFabrics Enterprise Distribution) 源码包已包含在《ConnectX-6 Lx网卡安装配置资料包》中。解压后,你会看到 MLNX_OFED_SRC-5.8-x.x.x.tgz 这样的文件。不要直接在解压目录下执行 make,而是先运行 ./install.pl --build-only 脚本,它会自动检测当前运行的内核版本并生成对应的 Kconfig 和 Makefile 构建环境
执行 uname -r 确认内核版本后,进入源码顶层目录运行 ./install.pl --build-only --kernel-sources /usr/src/kernels/$(uname -r)。如果系统缺少内核头文件,先安装 kernel-devel 包,否则 Kconfig 解析会失败
构建脚本会检查依赖项,包括 GCC、make、perl 等工具链。如果提示缺少 libibverbs 或 rdma-core 开发库,使用包管理器安装对应版本即可。这一步的关键输出是 build_dir 目录,其中包含了按内核版本隔离的编译中间件
驱动编译落地前要同时核对驱动编译的MLNX_OFED源码编译、失败路径和内核模块加载。
MLNX_OFED 的驱动核心是多个 内核模块(Kernel Modules),包括 核心(网卡主驱动)、mlx5_ib(InfiniBand/RDMA 支持)和 mlx5_en(以太网协议栈)。这些模块的编译行为由 Kconfig 文件控制。在 build_dir 下执行 make menuconfig 可以查看所有可配置项,但生产环境通常保持默认值即可
编译命令很简单:在 build_dir 内执行 make -j $(nproc)。编译成功后,模块文件(.ko)会输出到 build_dir/drivers/net/ethernet/mellanox/ 等路径下。为了验证模块是否与当前内核兼容,可以执行 modinfo 核心 检查其 vermagic 字段是否与 uname -r 输出一致
如果编译过程中出现 Kconfig: syntax error,通常是因为内核源码路径错误或 kernel-devel 版本不匹配。此时应检查 /lib/modules/$(uname -r)/build 软链接是否指向正确的内核源码树
编译完成后,使用 insmod 或 modprobe 加载模块。推荐使用 modprobe,因为它会自动处理模块依赖。例如:modprobe 核心 会同时加载 mlx5_ib 和 mlx5_en。加载后通过 lsmod | grep mlx5 确认模块已驻留内核
为了让驱动在重启后自动加载,需要将模块名写入 /etc/modules-load.d/mlx5.conf 文件,每行一个模块名。同时,在 /etc/depmod.d/ 下更新依赖关系:depmod -a
以下表格总结了驱动编译和加载过程中的关键命令及其作用,便于现场快速参考
| 检查项 | 标准 | 是否通过 | 常见遗漏 |
|---|---|---|---|
| ./install.pl --build-only | 配合 --kernel-sources 指定路径 | 生成构建目录与 Kconfig 配置 | 检查 build_dir 是否存在 |
| make -j $(nproc) | 在 build_dir 内执行 | 并行编译所有内核模块 | 查看 .ko 文件是否生成 |
| modprobe 核心 | 需 root 权限 | 加载主驱动及依赖模块 | lsmod | grep mlx5 |
| depmod -a | 模块加载后执行 | 更新模块依赖关系 | 无报错即成功 |
注意:modprobe 加载时如果提示 FATAL: Module 核心 not found,说明模块未安装到标准路径。此时应手动复制 .ko 文件到 /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/mellanox/,然后执行 depmod -a 再尝试加载
驱动编译和加载过程中,最容易出错的环节是内核头文件版本不匹配和模块签名问题。以下表格列出了典型故障现象及执行侧案
某数据中心在 CentOS 7.9 上编译 MLNX_OFED 驱动时,make 过程正常,但 modprobe 核心 后网卡无法识别。排查发现内核版本为 3.10.0-1160,而资料包中的 OFED 源码默认针对较新内核优化。解决方案是使用 --kernel-sources 参数明确指定旧内核源码树,并重新编译。编译后通过 dmesg | grep mlx5 确认驱动成功枚举了 ConnectX-6 Lx 网卡的 PCIe 设备
最后,务必在加载驱动后执行 ip link show 确认网口状态。如果看到 state DOWN,使用 ip link set dev ethX up 激活接口。至此,驱动编译与内核模块加载流程完成,网卡已具备收发数据包的能力
驱动编译先对齐现场任务、输入材料和输出结果,再回到Lx网卡安装配置资料包的细节逐项核对。
驱动编译的主要风险来自驱动编译边界、状态和验证口径不清;落地前必须核对伪代码,并确认例外场景和结果记录。
驱动编译里最先使用的工具、样例或资料是哪一个?
替换Lx网卡安装配置资料包时,哪些位置可以改,哪些位置要保留?
输出物检查时,最不能漏掉哪一项?
如果换一套素材,使用顺序要不要调整?