CentOS7物理机离线编译r8125驱动解决2.5G网卡识别问题
简介这份资源面向需要在物理机上离线部署CentOS 7的运维与网络工程师解决Realtek RTL8125 2.5GbE网卡在系统默认驱动缺失时无法联网的问题。资源包共51个文件、约55.41MB以rpm依赖包、C与头文件、Makefile及编译中间产物为主另含autorun.sh安装脚本、ko驱动模块与readme说明覆盖从编译工具链到驱动源码的完整离线环境。使用前需在BIOS中关闭Secure Boot再依次安装依赖、重建内核build软链接并执行autorun.sh成功后有线网络可自动连接。目前已有3257人学习下载适合缺少外网、需快速补齐网卡驱动并理解内核模块编译流程的读者参考。1. 物理机装 CentOS7 认不出 2.5G 网卡为什么离线装 r8125 是绕不开的一步机房里有台新配的物理机主板板载 Realtek 2.5G 网卡插上网线装完 CentOS7ip addr里只有 lolspci能看到设备但系统就是不给它分配接口名。这不是线的问题也不是交换机的问题是 CentOS7 内核自带的 r8169 驱动压根不认这颗 2.5G 芯片。CentOS7 的生命周期停在 3.10 内核而 Realtek 2.5G 系列RTL8125/8125B需要独立的 r8125 驱动才能跑起来。更麻烦的是很多生产环境不允许物理机连外网yum install kmod-r8125这条路直接堵死只能走离线安装。这篇笔记讲的就是在一台没有外网、只有 U 盘和本地源的 CentOS7 物理机上怎么把 r8125 驱动编译进去、让 2.5G 网卡正常拿到 IP。适合正在给新机器装 CentOS7 却卡在网卡识别这一步的运维和装机工程师也适合想搞清楚 Linux 网卡驱动离线编译流程的人。2. 先搞清楚 r8125 和 r8169 的关系为什么系统自带驱动救不了你2.1 r8169 是通用驱动但它不覆盖 2.5G 芯片CentOS7 内核里的r8169是一个覆盖面很广的 Realtek 千兆网卡驱动从 RTL8168 到 RTL8111 系列基本都能驱动。但 Realtek 在推出 2.5G 产品线RTL8125、RTL8125B之后并没有把支持合并进老内核的 r8169而是单独维护了一个r8125驱动包。这就导致一个很典型的现象lspci | grep -i realtek能看到Ethernet controller: Realtek Semiconductor Co., Ltd. Device 8125但ip link里没有对应的enpXsY接口dmesg | grep -i r8169可能会看到驱动加载了却报unknown chip XID之类的错误。判断你的机器是不是这个问题按下面几步确认# 1. 看 PCI 设备里有没有 Realtek 2.5G 控制器 lspci -nn | grep -i ethernet # 期望输出类似 # 03:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. Device [10ec:8125] # 2. 看当前内核加载了哪个驱动 lsmod | grep -E r8169|r8125 # 如果只有 r8169 没有 r8125基本可以确定是驱动缺失 # 3. 看 dmesg 里网卡相关的报错 dmesg | grep -iE r8169|r8125|eth # 常见报错r8169: unknown chip XID 641, aborting如果lspci里设备 ID 是10ec:8125而lsmod里只有 r8169那方向就明确了需要装 r8125。2.2 离线安装的核心思路源码编译 本地依赖在线环境下装 r8125 很简单Realtek 官方在 GitHub 上有维护仓库或者用 ELRepo 的kmod-r8125包一条yum install就完事。但离线环境没有这个条件只能走源码编译。源码编译需要三样东西r8125 驱动源码包通常是r8125-x.xxx.tar.bz2这种格式内核头文件和开发工具kernel-devel、kernel-headers、gcc、make和当前运行内核版本严格匹配的kernel-devel包这里有个血泪经验kernel-devel的版本必须和uname -r的输出完全一致差一个小版本号编译就会失败报/lib/modules/xxx/build: No such file or directory。所以离线安装的第一步不是拷驱动而是先确认目标机器的内核版本然后在有网的机器上把对应版本的kernel-devel和kernel-headers的 rpm 包下载下来。2.3 准备离线包的完整清单在一台能上网的 CentOS7 机器或者用容器上按目标机器的内核版本下载这些包。假设目标机器uname -r输出是3.10.0-1160.el7.x86_64# 在有网机器上创建离线包目录 mkdir -p /tmp/offline-r8125 cd /tmp/offline-r8125 # 下载和目标内核完全匹配的 kernel-devel 和 kernel-headers # 注意版本号必须和 uname -r 一致 yumdownloader --resolve kernel-devel-3.10.0-1160.el7.x86_64 yumdownloader --resolve kernel-headers-3.10.0-1160.el7.x86_64 # 下载编译工具链如果目标机器没装 gcc/make yumdownloader --resolve gcc makeyumdownloader来自yum-utils包如果没装先yum install -y yum-utils。--resolve参数会把依赖一起下载下来避免到目标机器上发现缺依赖。下载完成后把这些 rpm 和 r8125 源码包一起拷到 U 盘。提示如果目标机器连gcc、make都没有建议直接下载gcc、make、glibc-devel、cpp这几个基础包。有些最小化安装的 CentOS7 连tar和bzip2都没有也要一并带上。3. 在物理机上离线编译安装 r8125 的完整步骤3.1 挂载 U 盘并安装编译依赖物理机插上 U 盘CentOS7 一般会自动挂载到/run/media/用户名/卷标下如果没有自动挂载就手动来# 查看 U 盘设备名通常是 /dev/sdb1 或 /dev/sdc1 lsblk # 手动挂载 mkdir -p /mnt/usb mount /dev/sdb1 /mnt/usb # 进入离线包目录 cd /mnt/usb/offline-r8125先装编译依赖顺序有讲究先装kernel-devel和kernel-headers再装gcc、make。因为kernel-devel安装时会往/lib/modules/$(uname -r)/build建软链接如果内核版本不匹配这个链接会指向一个不存在的目录后面编译必然失败。# 安装内核开发包版本必须匹配当前运行内核 rpm -ivh kernel-devel-3.10.0-1160.el7.x86_64.rpm rpm -ivh kernel-headers-3.10.0-1160.el7.x86_64.rpm # 安装编译工具 rpm -ivh gcc-*.rpm make-*.rpm # 验证 build 链接是否指向正确 ls -l /lib/modules/$(uname -r)/build # 应该指向 /usr/src/kernels/3.10.0-1160.el7.x86_64如果ls -l显示build链接不存在或者指向错误说明kernel-devel版本不对必须换正确的版本重装。这一步是整个流程里最容易翻车的地方很多人卡在这里以为是驱动源码的问题其实是内核开发包版本没对上。3.2 解压源码并编译 r8125 模块依赖装好之后解压 r8125 源码包开始编译# 回到 U 盘目录解压驱动源码 cd /mnt/usb/offline-r8125 tar -xjf r8125-9.011.01.tar.bz2 -C /usr/src/ # 解压后目录名类似 r8125-9.011.01 cd /usr/src/r8125-9.011.01 # 编译驱动模块 make clean makemake执行过程中会调用内核的构建系统编译出r8125.ko这个内核模块文件。如果编译报错重点看这几类信息No such file or directory: /lib/modules/xxx/buildkernel-devel没装或版本不匹配error: implicit declaration of function源码和内核版本兼容性问题换一个 r8125 版本make: gcc: Command not foundgcc没装编译成功后当前目录下会出现src/r8125.ko这就是我们要的驱动模块。3.3 安装模块并让系统识别网卡编译出来的.ko文件需要安装到内核模块目录然后加载# 安装模块到 /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/ make install # 加载 r8125 模块 modprobe r8125 # 确认模块已加载 lsmod | grep r8125 # 确认网卡接口出现了 ip link show # 应该能看到类似 enp3s0 的接口如果modprobe r8125报Module not found说明make install没成功检查/lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/下有没有r8125.ko然后手动depmod -a刷新模块依赖再试。网卡接口出现后配置 IP。如果是 DHCP 环境# 用 nmcli 或直接改配置文件 nmcli con add type ethernet ifname enp3s0 con-name enp3s0 nmcli con mod enp3s0 ipv4.method auto nmcli con up enp3s0如果是静态 IP编辑/etc/sysconfig/network-scripts/ifcfg-enp3s0设置BOOTPROTOstatic、IPADDR、NETMASK、GATEWAY、DNS1然后systemctl restart network。3.4 设置开机自动加载避免重启后网卡消失modprobe加载的模块重启后会丢失必须让它开机自动加载。同时要处理一个冲突系统默认会加载 r8169而 r8169 和 r8125 可能抢同一个 PCI 设备。# 方法一把 r8125 加入开机加载列表 echo r8125 /etc/modules-load.d/r8125.conf # 方法二把 r8169 加入黑名单防止它抢占设备 echo blacklist r8169 /etc/modprobe.d/blacklist-r8169.conf # 重建 initramfs确保开机时 r8125 能被加载 dracut -f /boot/initramfs-$(uname -r).img $(uname -r) # 重启验证 reboot重启后ip link show能看到网卡接口、lsmod | grep r8125有输出才算真正装好了。如果重启后网卡又没了大概率是dracut没执行或者blacklist没生效r8169 抢先加载了。4. 离线安装 r8125 最容易踩的 5 个坑4.1 坑一kernel-devel 版本和运行内核不一致现象make时报/lib/modules/3.10.0-1160.el7.x86_64/build: No such file or directory或者ls -l /lib/modules/$(uname -r)/build显示链接指向一个不存在的目录。原因下载的kernel-devel版本和目标机器uname -r输出不一致。CentOS7 的小版本更新很频繁3.10.0-1160和3.10.0-1127的kernel-devel不能混用。解决在目标机器上先执行uname -r拿到精确版本号再到有网机器上用yumdownloader下载完全一致的版本。如果实在找不到对应版本可以考虑升级内核到kernel-lt或kernel-ml但生产环境不建议随便动内核。4.2 坑二r8169 抢占设备导致 r8125 加载失败现象modprobe r8125没报错但ip link里还是没有网卡接口dmesg里看到 r8169 先加载并绑定了设备。原因r8169 是内核自带驱动启动时自动加载并抢占了 Realtek 的 PCI 设备。r8125 虽然加载了但设备已经被 r8169 绑定拿不到控制权。解决把 r8169 加入黑名单然后重建 initramfs。具体命令在 3.4 节已经写了。注意黑名单文件要放在/etc/modprobe.d/下文件名以.conf结尾否则不会生效。4.3 坑三U 盘文件系统不支持导致源码包损坏现象tar -xjf解压时报bzip2: (stdin) is not a bzip2 file或者解压出来的文件不完整。原因U 盘用的是 FAT32 或 exFAT 文件系统拷贝大文件时可能因为文件系统限制导致文件损坏尤其是超过 4G 的文件。r8125 源码包一般不大但如果是打包了多个版本的合集就可能超限。解决拷贝完成后用md5sum校验一下源码包的完整性和源文件对比。如果 U 盘是 FAT32考虑格式化成 ext4 或者用split命令分卷拷贝。4.4 坑四最小化安装缺少 bzip2 和 tar现象tar -xjf报tar: bzip2: Cannot exec: No such file or directory。原因CentOS7 最小化安装默认不带bzip2而 r8125 源码包通常是.tar.bz2格式。解决在有网机器上下载bzip2和bzip2-libs的 rpm 包一起拷到 U 盘。或者把源码包在有网机器上解压成.tar格式再拷过去用tar -xf解压就不需要 bzip2 了。4.5 坑五dracut 重建 initramfs 时空间不足现象dracut -f报No space left on device或者执行到一半失败。原因/boot分区太小CentOS7 默认/boot只有 1G如果之前有多个内核版本的 initramfs 文件空间可能不够。解决先清理旧内核的 initramfs 文件ls /boot/initramfs-*.img看看有哪些保留当前内核的删掉其他的。如果还是不够只能扩容/boot或者把/boot挂到更大的分区上。扩容/boot有风险操作前备份数据。5. 验证驱动稳定性与长期维护的几个实用技巧装完驱动能上网只是第一步生产环境更关心的是稳定性。我一般会做三件事来验证第一用ethtool -i enp3s0确认驱动版本和固件信息输出里driver: r8125、version: 9.011.01这些信息要记下来以后出问题好排查。第二跑一轮iperf3打流测试看 2.5G 带宽能不能跑满如果只能跑到千兆检查网线是不是超五类、交换机端口是不是 2.5G 协商成功。第三连续跑 24 小时ping -f或者iperf3 -t 86400观察有没有丢包和驱动报错dmesg -w挂在那里盯着。长期维护方面内核升级是最大的变量。CentOS7 如果通过yum update升级了内核新内核的kernel-devel版本变了之前编译的 r8125 模块在新内核下加载会报version magic不匹配。所以每次内核升级后都要重新编译安装 r8125。我的习惯是在/root下留一个r8125-rebuild.sh脚本内容就是解压、编译、安装、dracut 这几步内核一升级就跑一遍省得每次翻笔记。#!/bin/bash # r8125-rebuild.sh - 内核升级后重新编译安装 r8125 set -e KVER$(uname -r) SRCDIR/usr/src/r8125-9.011.01 # 检查 kernel-devel 是否匹配 if [ ! -d /lib/modules/${KVER}/build ]; then echo ERROR: kernel-devel for ${KVER} not found exit 1 fi cd ${SRCDIR} make clean make make install modprobe -r r8125 2/dev/null || true modprobe r8125 dracut -f /boot/initramfs-${KVER}.img ${KVER} echo r8125 rebuilt for ${KVER}这个脚本的关键点是set -e任何一步失败就停避免编译失败还继续安装导致系统状态混乱。modprobe -r r8125先卸载旧模块再加载新的如果模块正在被使用网卡在跑流量会卸载失败这时候需要先ip link set enp3s0 down再操作。还有一个容易被忽略的点如果机器有多张 Realtek 网卡r8125 和 r8169 可能各管一部分。比如板载 2.5G 用 r8125独立千兆网卡用 r8169这时候黑名单不能一刀切把 r8169 全禁了否则千兆网卡也用不了。正确的做法是用driverctl或者 udev 规则按 PCI 地址绑定驱动而不是简单粗暴地黑名单。这个场景在服务器上挺常见配之前先用lspci -nn把每张网卡的 PCI 地址和型号列清楚再决定哪个用哪个驱动。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

飞行力学4|坐标轴与飞行运动

飞行力学4|坐标轴与飞行运动

飞行力学4|坐标轴与飞行运动**摘要:**从机体坐标轴和正方向出发,梳理力、力矩、角速度与速度分量的符号对应关系,说明迎角和侧滑角的几何定义,并按纵向、横向和航向整理飞机的六自由度运动及其稳定性分析入口。读飞行力…

2026/10/9 14:27:40 阅读更多 →
C# WCF与Web API接口开发实战:从契约设计到混用部署避坑

C# WCF与Web API接口开发实战:从契约设计到混用部署避坑

简介:这是一套完整的C# WCF与Web项目接口开发实战案例,面向具备基础C#、ASP.NET知识、希望掌握分布式服务接口设计的开发者,也适合准备在Windows平台构建服务端接口并集成到Web应用中的项目团队。案例围绕ServiceContract服务契约定义、DataC…

2026/10/11 9:21:05 阅读更多 →
VLA 系统学习第 3 课:从一次机器人示范,到真正送进神经网络的 Batch

VLA 系统学习第 3 课:从一次机器人示范,到真正送进神经网络的 Batch

一、第二课标准答案:Behavior Cloning1. Behavior Cloning 为什么属于监督学习?因为训练数据里已经有“输入”和“正确答案”。对 BC 来说,一个最基本训练样本就是:\[ (o_t,a_t) \]其中:\(o_t\):Observatio…

2026/10/10 15:33:15 阅读更多 →

最新新闻

Ubuntu下ORB-SLAM2编译安装全攻略:依赖解析与避坑指南

Ubuntu下ORB-SLAM2编译安装全攻略:依赖解析与避坑指南

1. 为什么 ORB-SLAM2 的编译安装值得单独写一篇ORB-SLAM2 是视觉 SLAM 领域里被引用最多、被复现最多的开源系统之一,支持单目、双目和 RGB-D 三种传感器模式,能做实时定位与稀疏建图。很多人第一次接触它,都是被论文里的轨迹图和回环效果吸引…

2026/10/13 7:56:22 阅读更多 →
Windows批量部署实战:从PXE到MDT的标准化系统交付

Windows批量部署实战:从PXE到MDT的标准化系统交付

1. 这不是重装系统,是批量部署——为什么“批量安装Windows系统”正在成为一线运维的硬通货你有没有遇到过这样的场景:刚接手一个新机房,20台全新裸机整齐排开,每台都要手动插U盘、选分区、输密钥、装驱动、打补丁、配策略……光是…

2026/10/13 7:56:22 阅读更多 →
WSL与GitHub Copilot组合实战:从环境搭建到效率翻倍

WSL与GitHub Copilot组合实战:从环境搭建到效率翻倍

1. 环境准备:把WSL这套地基彻底打牢 1.1 为什么我最终选择WSL而不是双系统或虚拟机 这两年我一直在Windows上做后端和前端开发,一直在折腾环境。双系统切来切去太费时间,虚拟机虽然隔离性好但资源开销大,硬盘空间和内存都被吃掉一…

2026/10/13 7:56:22 阅读更多 →
基于梯度缺陷ANCF梁单元的单悬臂梁重力弯曲仿真全解析

基于梯度缺陷ANCF梁单元的单悬臂梁重力弯曲仿真全解析

在结构力学与计算仿真这个圈子里,悬臂梁是一个绕不开的经典基准模型,但最近我做的这个项目——基于梯度缺陷ANCF梁单元的单悬臂梁重力弯曲仿真,可以说是在经典基础上叠了一层很有意思的buff。它不仅是把一根梁一端固定、让它自己在重力下垂下…

2026/10/13 7:56:22 阅读更多 →
Windows Server上搭建PostgreSQL测试库:安装配置与备份恢复实战指南

Windows Server上搭建PostgreSQL测试库:安装配置与备份恢复实战指南

做数据库测试环境搭建,听起来好像就是装个数据库、建几个库的问题,实际上真到落地的时候,版本选择、编码格式、账号权限、远程访问、备份恢复,哪一环松了都会在工作日晚上还回来。前一阵我们小组接到一个内部订单系统的测试环境需…

2026/10/13 7:56:22 阅读更多 →
SQL UNIQUE约束详解:原理、数据库差异与防重复设计实践

SQL UNIQUE约束详解:原理、数据库差异与防重复设计实践

1. UNIQUE约束到底是什么,为什么你需要它做数据库设计这些年,我见过太多因为“忘记加唯一约束”而崩溃的业务系统。最典型的场景:用户注册接口被脚本刷了一遍,username重复了;订单表里同一笔订单被回调程序insert了两次…

2026/10/13 7:55:19 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →