
简介这份资源面向需要在物理机上离线部署CentOS 7的运维与网络工程师专门解决Realtek RTL8125 2.5GbE网卡在系统安装后无法识别、无法联网的问题。资源包共51个文件约55.41MB以rpm依赖包、C与头文件、Makefile及编译中间产物为主另含autorun.sh安装脚本、ko驱动模块和readme说明覆盖从编译工具链到驱动源码的完整离线环境。其中rpm包用于补齐gcc、kernel-devel、glibc等编译依赖源码与脚本则对应r8125-9.011.01驱动的构建与加载流程适合在无外网条件下按目录结构逐步操作。目前已有3257人学习下载读者可借此获得一套可直接复用的离线驱动安装方案理解内核模块编译、依赖处理与网卡驱动加载的排错思路减少因缺少编译环境或Secure Boot设置导致的反复试错。1. 物理机装完 CentOS7 之后网卡没起来这件事有多常见给一台物理机装 CentOS7系统装完、重启、插上网线ping不通网关ip addr里只有lo/etc/sysconfig/network-scripts/下连个ifcfg-文件都没有。这种情况在近两年的新主板上越来越常见原因基本都指向同一件事板载的 Realtek 2.5G 网卡RTL8125 系列在 CentOS7 自带的r8169驱动里认不出来或者认出来但跑不到 2.5G 速率。CentOS7 的内核停在 3.10 这条线上而 RTL8125 是 2019 年之后才大规模铺开的芯片官方仓库里的kmod-r8169版本太老覆盖不到。这篇要拆的就是这个场景下的离线安装方案用 Realtek 官方放出的r8125源码包在物理机上编译出r8125.ko替换掉系统自带的r8169让 2.5G 网卡正常拿到 IP。适合两类人一类是内网机器、生产环境不允许联网只能靠 U 盘或 ISO 挂载传文件另一类是装完系统发现网络不通手边只有一台能上网的机器需要把依赖和源码一起搬过去。整个过程不依赖外网 yum 源核心就是源码包、kernel-devel、gcc、make这几样东西凑齐。2. 先搞清楚 r8125 和 r8169 的关系为什么不能直接 yum install2.1 内核自带驱动为什么认不出 2.5G 网卡CentOS7 默认内核 3.10.0-1160 里带的r8169驱动覆盖的是 RTL8168/8111 这一系列千兆芯片。RTL8125 虽然寄存器布局和 8168 有继承关系但 PHY 层和 2.5G 协商逻辑是新的老r8169加载后典型表现是lspci能看到 Realtek 设备dmesg里报r8169: unknown chip XID或者干脆不报ip link里没有对应网口。有些主板 BIOS 里网卡默认走 2.5G 模式老驱动连链路都拉不起来。Realtek 官方对 Linux 的支持方式是单独发一个r8125驱动源码包版本号跟着芯片走比如r8125-9.011.00。这个包和内核里的r8169是互斥的两个模块都会去抢同一个 PCI 设备所以安装流程里必须先把r8169从内核里摘掉再加载r8125。2.2 离线安装到底要准备哪些文件联网环境下一条yum install kernel-devel gcc make就完事离线环境麻烦在依赖链。CentOS7 最小化安装的 ISO 里其实带了gcc、make、kernel-devel的 rpm但版本要和当前运行内核严格对应。判断方法很简单uname -r # 输出示例3.10.0-1160.el7.x86_64 rpm -q kernel-devel # 如果提示 not installed说明编译环境不全kernel-devel的版本必须和uname -r完全一致差一个小版本号编译就会报Unable to find the kernel header files。离线场景下最稳的做法是去 CentOS 官方 vault 或者镜像站按uname -r的输出精确下载对应的kernel-devel-3.10.0-1160.el7.x86_64.rpm连同gcc、make、glibc-devel、cpp、mpfr、libmpc这一串依赖一起拷过去。文件作用获取方式r8125-9.011.00.tar.bz2Realtek 官方驱动源码Realtek 官网下载页kernel-devel-版本.rpm内核头文件编译必需镜像站 vault 目录gcc / make / glibc-devel编译工具链ISO 的 Packages 目录一个 U 盘或 ISO 挂载点传输介质物理接触提示kernel-devel和kernel-headers是两个包编译外部模块要的是kernel-devel别下错。2.3 用 ISO 做本地 yum 源比一个个 rpm 装省事如果手上有完整的 CentOS7 ISO最省事的办法是把它挂载成本地源让 yum 自己去解依赖。这一步在离线机器上做不需要网络。# 挂载 ISO 到 /mnt mount -o loop /root/CentOS-7-x86_64-DVD-2009.iso /mnt # 备份原有 repo mkdir -p /etc/yum.repos.d/bak mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/ # 写一个本地源 cat /etc/yum.repos.d/local.repo EOF [local] nameLocal CentOS7 ISO baseurlfile:///mnt enabled1 gpgcheck0 EOF # 清缓存并安装编译环境 yum clean all yum makecache yum install -y gcc make kernel-develbaseurlfile:///mnt指向挂载点gpgcheck0是因为本地 ISO 不做签名校验内网环境可以接受。装完kernel-devel之后/usr/src/kernels/$(uname -r)这个目录必须存在不存在就说明版本对不上后面编译一定失败。3. 编译 r8125 驱动从解压到 insmod 的完整命令链3.1 解压源码包并确认目录结构Realtek 的源码包一般是.tar.bz2格式解压后目录里有一个src子目录真正的驱动代码在里面。# 把源码包放到 /usr/local/src 下统一管理 cd /usr/local/src tar -xjf r8125-9.011.00.tar.bz2 cd r8125-9.011.00 # 看下结构确认 src 目录存在 ls -l # 典型输出Makefile README src/src/里是r8125_n.c、r8125.h这些文件根目录的Makefile负责调用内核的kbuild体系。不要手动去src里gcc编译那样出来的.ko加载会报invalid module format必须走make让内核构建系统参与。3.2 make 编译与常见报错处理# 在源码根目录执行 make clean make # 编译成功后会在 src 下生成 r8125.ko ls -l src/r8125.komake的过程会去/lib/modules/$(uname -r)/build找内核构建目录这个软链接指向/usr/src/kernels/$(uname -r)。如果报/lib/modules/.../build: No such file or directory就是kernel-devel没装或版本不对。如果报error: implicit declaration of function多半是内核版本和驱动源码不匹配换一个和内核年代接近的r8125版本再试。编译完成后r8125.ko里会带 vermagic 标记可以用modinfo确认modinfo src/r8125.ko | grep vermagic # 输出里的版本号必须和 uname -r 一致3.3 屏蔽 r8169 并加载 r8125两个模块抢设备的问题必须处理否则r8125加载了也会被r8169顶掉。# 先卸载可能已加载的 r8169 modprobe -r r8169 # 加入黑名单防止开机自动加载 cat /etc/modprobe.d/blacklist-r8169.conf EOF blacklist r8169 EOF # 安装模块到内核目录 cd /usr/local/src/r8125-9.011.00 make install # 加载新驱动 modprobe r8125 # 确认加载的是 r8125 而不是 r8169 lsmod | grep -E r8125|r8169make install会把r8125.ko拷到/lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/下并跑depmod。blacklist文件只阻止自动加载手动modprobe r8169还是能加载所以别在装好之后又手贱去 modprobe 老驱动。3.4 验证网口是否出现并配置 IP# 看网口有没有起来 ip link show # 正常会看到 ens33 / enp3s0 之类的名字状态 DOWN 也没关系 # 看驱动绑定情况 ethtool -i enp3s0 # driver 一行应该是 r8125 # 临时配个 IP 测试 ip addr add 192.168.1.100/24 dev enp3s0 ip link set enp3s0 up ping -c 3 192.168.1.1ethtool -i输出的driver: r8125是判断驱动是否真正接管的关键。如果显示r8169说明黑名单没生效或者模块加载顺序有问题回去检查/etc/modprobe.d/下的配置和lsmod结果。4. 避坑与排查离线装 r8125 最容易翻车的五个点4.1 现象make 报找不到 kernel-devel但 rpm 明明装了原因通常是kernel-devel的版本和uname -r不一致。CentOS7 升级过内核之后/usr/src/kernels/下会有多个目录/lib/modules/$(uname -r)/build这个软链接可能指向旧版本。解决方法是先uname -r确认当前内核再rpm -q kernel-devel看装的版本不一致就卸掉重装对应版本或者直接ln -sf手动修正软链接。4.2 现象modprobe r8125 报 Unknown symbol这是内核符号依赖没满足常见于kernel-devel和运行内核不匹配或者编译时用的内核配置和当前内核不同。先dmesg | tail看具体缺哪个符号再确认kernel-devel版本。离线环境下没法yum reinstall只能重新找对版本的 rpm 装上再make clean make。4.3 现象网口出现了但 ping 不通ethtool 显示 link detected: no物理层没协商上。RTL8125 对网线质量比较敏感劣质超五类线在 2.5G 模式下容易协商失败。先在交换机侧确认端口速率或者用ethtool -s enp3s0 speed 1000 duplex full autoneg on强制降到千兆测试。如果千兆能通、2.5G 不通基本就是线或者对端设备的问题不是驱动的事。4.4 现象重启之后网卡又没了lsmod 里只有 r8169黑名单文件没生效或者make install之后没跑depmod。检查/etc/modprobe.d/blacklist-r8169.conf是否存在且拼写正确再depmod -a重建模块依赖然后dracut -f重建 initramfs。CentOS7 的 initramfs 里如果打包了r8169开机早期就会加载黑名单要在 initramfs 阶段也生效才行。4.5 现象编译通过但 insmod 报 invalid module formatr8125.ko的 vermagic 和当前内核不匹配几乎都是编译时用的kernel-devel版本不对。modinfo src/r8125.ko | grep vermagic和uname -r对比不一致就重装kernel-devel再编译。离线环境里这个坑最耗时间因为每次都要重新传 rpm。5. 让驱动在重启后稳定生效initramfs 与持久化配置5.1 把 r8125 打进 initramfsmake install只保证模块在磁盘上开机早期加载的是 initramfs 里的模块。如果 initramfs 里没有r8125而r8169又在里面开机就会先加载老驱动。手动重建# 确认 r8125 已安装到 /lib/modules ls /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/r8125.ko # 重建 initramfs dracut -f /boot/initramfs-$(uname -r).img $(uname -r) # 确认新 initramfs 里包含 r8125 lsinitrd /boot/initramfs-$(uname -r).img | grep r8125dracut -f会按当前/etc/modprobe.d/和/etc/dracut.conf的配置重新打包。如果lsinitrd里看不到r8125检查/etc/dracut.conf.d/下有没有add_drivers r8125 这一行没有就加上再重建。5.2 用 nmcli 或 ifcfg 固化网络配置驱动稳定之后网络配置本身也要持久化。CentOS7 推荐用nmcli比手写ifcfg少踩格式的坑。# 查看连接名 nmcli con show # 给网口配静态 IP nmcli con mod enp3s0 ipv4.addresses 192.168.1.100/24 nmcli con mod enp3s0 ipv4.gateway 192.168.1.1 nmcli con mod enp3s0 ipv4.dns 223.5.5.5 nmcli con mod enp3s0 ipv4.method manual nmcli con up enp3s0ipv4.method manual是关键不设的话默认走 DHCP内网没有 DHCP 服务器就会一直拿不到地址。配完nmcli con show enp3s0 | grep ipv4确认参数写进去了再systemctl restart network或nmcli con up生效。5.3 一个验证驱动是否真正稳定的技巧装完之后别急着收工跑一轮压力测试看驱动会不会掉。用ethtool -S看统计再持续 ping 大包# 看网卡统计重点看 rx_errors / tx_errors ethtool -S enp3s0 | grep -E error|drop # 持续 ping 大包 5 分钟 ping -s 1400 -i 0.2 -c 1500 192.168.1.1 # 再看一次统计error 不增长才算稳 ethtool -S enp3s0 | grep -E error|droprx_errors或tx_errors持续增长说明驱动和硬件之间有兼容问题常见于早期版本的r8125。换一个更新的源码包版本重编译或者把ethtool -s的 offload 特性关掉试试。从那以后我每次装完r8125都会先跑一遍大包 ping 和ethtool -S对比确认 error 计数不动才敢把机器交出去。希望帮到你。本文还有配套的精品资源点击获取