简介:这份资源面向需要在物理机上离线部署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 install
2.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.bz2 | Realtek 官方驱动源码 | 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] name=Local CentOS7 ISO baseurl=file:///mnt enabled=1 gpgcheck=0 EOF # 清缓存并安装编译环境 yum clean all yum makecache yum install -y gcc make kernel-develbaseurl=file:///mnt指向挂载点,gpgcheck=0是因为本地 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|r8169'make 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 format
r8125.ko的 vermagic 和当前内核不匹配,几乎都是编译时用的kernel-devel版本不对。modinfo src/r8125.ko | grep vermagic和uname -r对比,不一致就重装kernel-devel再编译。离线环境里这个坑最耗时间,因为每次都要重新传 rpm。
5. 让驱动在重启后稳定生效:initramfs 与持久化配置
5.1 把 r8125 打进 initramfs
make 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 "enp3s0"ipv4.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|drop'rx_errors或tx_errors持续增长,说明驱动和硬件之间有兼容问题,常见于早期版本的r8125。换一个更新的源码包版本重编译,或者把ethtool -s的 offload 特性关掉试试。从那以后我每次装完r8125,都会先跑一遍大包 ping 和ethtool -S对比,确认 error 计数不动才敢把机器交出去。希望帮到你。
本文还有配套的精品资源,点击获取