news 2026/3/25 20:56:44

运营商信创系统 BCLinux 21.10 SP2 编译安装Mellanox网卡驱动 MLNX_EN-23.10(Mellanox OFED)全过程:原理、打包与内核适配

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
运营商信创系统 BCLinux 21.10 SP2 编译安装Mellanox网卡驱动 MLNX_EN-23.10(Mellanox OFED)全过程:原理、打包与内核适配

前言

写在前面:Mellanox 网卡、OFED 与本次编译的关系说明

在开始编译和安装 MLNX-EN / OFED 之前,有一个非常关键、但经常被忽略的问题需要先说明清楚:

Mellanox 网卡是什么?
我现在编译的这些软件是干什么用的?
如果机器上没有 Mellanox 网卡,安装还有意义吗?

如果你是第一次接触 OFED 或 mlnx-en,强烈建议先读完这一节,它可以帮你避免后续很多不必要的疑惑。


一句话先说明白(结论先行)

👉Mellanox 网卡是一类高性能网卡硬件(现归 NVIDIA)
👉mlnx-en / OFED 是专门为这类网卡提供的驱动和工具软件栈

如果机器上没有 Mellanox 网卡:

  • 软件可以正常编译、安装
  • 但不会真正“用起来”,也不会替代现有网卡驱动

一、什么是 Mellanox 网卡?

Mellanox(现 NVIDIA Networking)主要面向以下场景:

  • 数据中心高速网络
  • HPC / AI 集群
  • RDMA / RoCE
  • 高性能存储网络

与普通服务器网卡相比,Mellanox 网卡的定位完全不同:

对比项普通网卡(e1000 / ixgbe)Mellanox 网卡
带宽1G / 10G25G / 40G / 100G / 200G
延迟毫秒级微秒级
RDMA不支持原生支持
CPU 占用较高很低
AI / HPC不适合核心组件

常见型号包括:

  • ConnectX-4 / ConnectX-5
  • ConnectX-6 / ConnectX-6 Dx
  • ConnectX-7

二、mlnx-en / OFED 是做什么的?

mlnx-en / OFED 并不是“普通网络驱动”,而是一整套面向 Mellanox 网卡的专用软件栈

它们在系统中的位置可以理解为:

Mellanox 网卡(硬件) ↓ mlx5_core(内核驱动) ↓ OFED / mlnx-en(本次编译安装的软件) ↓ RDMA / 高速通信 / AI / 存储应用

这套软件的主要作用包括:

  • 提供 Mellanox 网卡的内核驱动
  • 提供 RDMA / RoCE 所需的用户态库
  • 支持高性能网络、存储和计算通信

👉它不是给普通网卡使用的


三、为什么装完后“看不到 Mellanox 网卡”?

在很多环境中,安装完成后执行:

ethtool-i ens33

可能看到的是:

driver: e1000

这通常意味着:

  • 当前机器使用的是普通网卡
  • 或运行在虚拟机中
  • 或 Mellanox 网卡并不在这台机器上

这不是安装失败,而是硬件本身不匹配。
mlnx-en / OFED 的安装不会影响原有网卡的正常使用。


四、那为什么还要编译安装 mlnx-en / OFED?

常见原因包括:

场景一:为目标服务器提前准备环境

  • AI / HPC 服务器
  • RDMA 网络
  • 高性能存储节点(Ceph、Lustre、NFS-RDMA)

在正式部署前,先验证:

  • 内核是否兼容
  • OFED 是否能成功编译

场景二:内核版本较新或定制化

在一些国产或定制 Linux 系统中:

  • 内核版本较新
  • 官方预编译 OFED 包不匹配

此时只能通过源码编译 mlnx-en / OFED来解决兼容问题。
此次使用的BigCloud就是基于华为欧拉Euler的Linux系统,没有现场的安装包,只能自行编译


五、如何确认当前机器是否有 Mellanox 网卡?

可以通过以下命令快速确认:

lspci|grep-i mellanox

如果存在 Mellanox 网卡,会看到类似输出:

Mellanox Technologies MT28908 ConnectX-6 Dx

小结

  • Mellanox 网卡是高性能网络硬件
  • mlnx-en / OFED 是其配套的驱动和工具
  • 没有 Mellanox 网卡,软件可以安装但不会生效
  • 本文后续内容将专注于如何正确编译和安装 mlnx-en / OFED

配置VMnet8虚拟网络编辑器

如图配置,NAT网段和DHCP可以自行规划


这一步是为了检查,VMnet8是否真实并正确的配置到了虚拟网卡中
这里的配置要与上面的配置相符合


安装BCLinux系统

挂载BCLinux镜像;VMware 网络选用VMnet8(NAT);配置最低2核2G运存+20G硬盘
配置好后启动VM虚拟机,正常安装即可,安装时软件类型选择Server(CLI命令行界面的服务器)


配置BCLinxu的IP

BCLinux采用RPM包管理器,系统类似于CentOS/Rocky/RHEL

备份网络配置文件,并修改

cd /etc/sysconfig/network-scripts/ cp ifcfg-ens33 ifcfg-ens33.bak vim ifcfg-ens33

修改ifcfg-ens33文件

TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none # 改为none,表示静态IP DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=a11211da-5242-43d7-9dbb-2a7340e72317 DEVICE=ens33 ONBOOT=yes # 开机自启动 IPADDR=172.20.0.88 # 表示本机静态IP PREFIX=24 # 掩码24位 GATEWAY=172.20.0.2 # VMware虚拟网络编辑器的网关 MACADDR=00:50:56:AB:F0:88 # MAC地址,可不写 DNS1=8.8.8.8 # 配置三个DNS DNS2=114.114.114.114 DNS3=223.5.5.5

修改完后重启网络服务

systemctl restart NetworkManager

验证网络配置是否生效

ip addr ip link

测试主机与外网,也OK,然后就可以用主机上SSH客户端连接,比如XTerminal、FInalShell等

ping 172.20.0.2 ping 8.8.8.8


挂载MLNX_EN镜像

上传镜像到/root下,然后挂载iso文件

mkdir -p /mnt/mlnx # 把这个ISO文件当作一个虚拟光盘来用,挂载到/mnt/mlnx mount -o loop /root/mlnx-en-23.10-5.1.4.0-bclinux21.10sp2-x86_64.iso /mnt/mlnx

提示 WARNING是正常的

验证

ls -l /mnt/mlnx/


安装编译依赖

安装基本工具

dnf update # 只需要更新源即可,软件可不更新 dnf install -y perl net-tools vim curl wget sudo openssh-server open-vm-tools systemctl enable vmtoolsd --now # 配置开机自启动open-vm-tool systemctl status vmtoolsd # 查看vmtool是否运行 vmware-toolbox-cmd -v # 查看vmtool版本

安装编译依赖

dnf install -y gcc make perl rpm-build \ elfutils-libelf-devel elfutils-devel

我们默认只有正常内核,编译安装需要开发版本的内核,没有就需要安装
安装要安装正常内核对应版本的开发内核,正常内核是0208,开发版本也要0208,要完全匹配

[root@BCLinux ~]# uname -r # 当前使用的常规内核版本 4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64 [root@BCLinux ~]# rpm -q kernel-devel # 查找是否有开发版本的内核(为空就是没有) kernel-devel-4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64 [root@BCLinux ~]# rpm -q kernel # 查找是否有常规版本的内核 kernel-4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64 # 查看dnf源可提供内核的列表 dnf list --showduplicates kernel # 安装,只要在kernel后面加一个devel就好了,或者用下面的方法安装 dnf install -y kernel-devel-4.19.90-2107.6.0.0208.16.oe1.bclinux pm -q kernel-devel # 查看是否有开发版本的内核 ls -ld /lib/modules/$(uname -r)/build # 查看当前kernel,是否具备“可用于编译内核模块”的开发环境

如果上面的你看不明白,之间运行下面的命令安装内核开发包即可

uname -r # 查看kernel版本 dnf install -y kernel-devel-$(uname -r) # 安装当前kernel版本的内核开发包 rpm -q kernel-devel-$(uname -r) # 查看是否安装成功 ls -ld /lib/modules/$(uname -r)/build # 查看当前kernel,是否具备“可用于编译内核模块”的开发环境

理想输出内容

安装createrepo与createrepo_c

dnf install -y createrepo createrepo_c

编译安装MLNX_EN

可以开启XTerminal服务器性能监控,这样可以在编译时监测服务器状态,因为编译比较耗时,通过监测服务器状态可以辅助确定,服务器也没有在编译时卡死

开始编译安装

cd /mnt/mlnx ./install \ --force \ --without-fw-update \ --add-kernel-support \ --skip-repo

参数说明

  • --force:BCLinux 必须
  • --without-fw-update:不刷固件(生产必选)
  • --add-kernel-support:为当前内核现场编译
  • --skip-repo:不创建 yum repo(可减少依赖)

监测编译过程,排查编译是否正常

现在就开始编译

并且能看到CPU一直再跑

通过以下命令可以更准确确定具体状态,可以多开命令窗口分别执行命令进行监测

# 确认“编译相关进程是否还活着”,rpmbuild打包RPM,make/gcc编译,mlnx安装 ps -ef | egrep 'rpmbuild|make|gcc|mlnx' | grep -v egrep watch -n 1 "ps -ef | egrep 'rpmbuild|make|gcc|mlnx' | grep -v egrep" # r>0且不断变化,us+sy高,CPU忙,id很低,wa<10,则是正常编译中; # 如果CPU空,us≈0,id时间>90,有可能是卡死了; vmstat 1 # 实时查看编译安装日志,能够看出编译具体的进度以及情况 tail -f /tmp/mlnx-en-23.10-5.1.4.0-4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64/mlnx_iso.10220_logs/mlnx_ofed_iso.10220.log # 查看缓存空间,如果到80%会爆内存失败 watch -n 2 'df -h /tmp'

理想输出内容


编译安装成功

理想输出内容

[root@BCLinux ~]# cd /mnt/mlnx [root@BCLinux mlnx]# [root@BCLinux mlnx]# ./install \ > --force \ > --without-fw-update \ > --add-kernel-support \ > --skip-repo Note: This program will create mlnx-en TGZ for bclinux21.10sp2 under /tmp/mlnx-en-23.10-5.1.4.0-4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64 directory. See log file /tmp/mlnx-en-23.10-5.1.4.0-4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64/mlnx_iso.5883_logs/mlnx_ofed_iso.5883.log Checking if all needed packages are installed... Building mlnx-en RPMS . Please wait... Created /tmp/mlnx-en-23.10-5.1.4.0-4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64/mlnx-en-23.10-5.1.4.0-bclinux21.10sp2-ext.tgz Installing /tmp/mlnx-en-23.10-5.1.4.0-4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64/mlnx-en-23.10-5.1.4.0-bclinux21.10sp2-ext /tmp/mlnx-en-23.10-5.1.4.0-4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64/mlnx-en-23.10-5.1.4.0-bclinux21.10sp2-ext/install --force --force --without-fw-update Logs dir: /tmp/mlnx-en.1098691.logs General log file: /tmp/mlnx-en.1098691.logs/general.log This program will install the mlnx-en package on your machine. Note that all other Mellanox, OEM, OFED, RDMA or Distribution IB packages will be removed. Those packages are removed due to conflicts with mlnx-en, do not reinstall them. Uninstalling MLNX_EN driver Starting mlnx-en-23.10-5.1.4.0 installation ... Verifying... ######################################## Preparing... ######################################## Installing mlnx-en-utils 23.10 RPM Verifying... ######################################## Preparing... ######################################## Updating / installing... mlnx-en-utils-23.10-5.1.4.0.gede624b.b######################################## Installing mlnx_en 23.10 RPM Verifying... ######################################## Preparing... ######################################## Updating / installing... mlnx_en-23.10-5.1.4.0.gede624b.kver.4.######################################## depmod: WARNING: Ignored deprecated option -r Installing mlnx-en-sources 23.10 RPM Verifying... ######################################## Preparing... ######################################## Updating / installing... mlnx-en-sources-23.10-5.1.4.0.gede624b######################################## Installing mlnx-en-doc 23.10 RPM Verifying... ######################################## Preparing... ######################################## Updating / installing... mlnx-en-doc-23.10-5.1.4.0.gede624b.bcl######################################## Installing user level RPMs: Verifying... ######################################## Preparing... ######################################## Verifying... ######################################## Preparing... ######################################## Installation finished successfully. Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:mlnx-fw-updater-23.10-5.1.4.0 ################################# [100%] Skipping FW update. Configuring /etc/security/limits.conf. To load the new driver, run: /etc/init.d/mlnx-en.d restart

验证安装是否成功

/etc/init.d/mlnx-en.d restart # 重启服务 lsmod | grep mlx # 查看是否有模块 ethtool -i ens33 # 没有Mellanox网卡,只能看一下ens33了 ofed_info -s # 是否右版本 rpm -qa | grep mlnx # 查看安装包

在该步骤中,安装脚本会生成一个mlnx-en-*-ext.tgz安装包。
该安装包中已包含针对当前系统内核版本编译完成的驱动模块,因此后续在相同内核版本的系统上安装时,无需再次进行源码编译。

需要注意的是,该安装包与编译时所使用的内核版本强绑定,当系统内核发生变化(如内核升级或重新编译)时,需要重新编译并生成新的安装包。

场景是否可用
同一台机器重装系统(内核没变)
多台机器,内核版本完全一致
做系统镜像 / 批量部署
离线环境快速安装
场景结果
内核小版本变化(uname -r不一致)
内核重新打补丁
内核重编
升级 kernel❌(需重新编译)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/25 11:51:31

RTL8188EU无线网卡Linux驱动完全解决方案

RTL8188EU无线网卡Linux驱动完全解决方案 【免费下载链接】rtl8188eu Repository for stand-alone RTL8188EU driver. 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8188eu 还在为Linux系统无法识别RTL8188EU无线网卡而苦恼吗&#xff1f;这款开源驱动程序将彻底改变…

作者头像 李华
网站建设 2026/3/24 13:08:42

IDM激活终极指南:2025年最完整的免费解决方案你了解吗?

还在为Internet Download Manager的试用期限制而困扰吗&#xff1f;想要彻底告别烦人的注册提醒窗口吗&#xff1f;本文为你精心整理了一套简单易用的IDM使用方案&#xff0c;无论是初次接触还是遇到问题的情况&#xff0c;都能找到对应的解决方法。 【免费下载链接】IDM-Activ…

作者头像 李华
网站建设 2026/3/24 20:23:26

Open Library数字图书馆:构建个人知识管理系统的终极解决方案

Open Library数字图书馆&#xff1a;构建个人知识管理系统的终极解决方案 【免费下载链接】openlibrary One webpage for every book ever published! 项目地址: https://gitcode.com/gh_mirrors/op/openlibrary 你面临的知识管理困境 你是否曾经为找不到需要的参考书籍…

作者头像 李华
网站建设 2026/3/15 23:14:33

Charticulator数据可视化:5步掌握零代码专业图表制作

Charticulator数据可视化&#xff1a;5步掌握零代码专业图表制作 【免费下载链接】charticulator Interactive Layout-Aware Construction of Bespoke Charts 项目地址: https://gitcode.com/gh_mirrors/ch/charticulator 还在为制作个性化数据图表而发愁吗&#xff1f;…

作者头像 李华
网站建设 2026/3/22 1:02:12

18、历史驱动的准静态调度中的状态空间压缩

历史驱动的准静态调度中的状态空间压缩 1. 引言 近年来,基于形式化方法的设计方法论被大力推广,用于应对电子系统设计日益增长的复杂性。然而,传统的形式化验证方法,如模型检查或可达性分析,存在需要大量计算资源的问题。为了解决嵌入式、反应式系统软件合成中的状态空间…

作者头像 李华