简介:这是一份面向Linux运维人员及需要在物理机上安装CentOS 7网卡驱动的用户的离线资源包,专门解决Realtek RTL8125 2.5G网卡在CentOS 7.9下驱动编译与加载难题,适用于无外网或内网受限环境。包体共51个文件,约55.41MB,结构清晰:15个rpm依赖包用于补齐编译环境,.c/.h源码及makefile提供驱动编译主体,.ko模块与.o目标文件便于直接加载,另有sh安装脚本与readme说明,用户可按照包内顺序快速完成部署。已有3249人学习下载。通过这份资源,读者可以绕开在线源依赖,在离线状态下完成内核头文件、gcc等工具链配置,并成功驱动2.5G有线网卡;包内还涵盖了BIOS Secure Boot关闭等关键注意事项的说明,能有效减少因驱动签名或依赖缺失导致的安装失败,整体上是一份可复制、可离线操作的完整解决方案。 新到手的物理机上装CentOS 7,结果系统装完了,网卡灯明明亮着,ip addr里却死活看不到网卡,连个eno1都没有——这个场景我一年里至少碰到三五回。罪魁祸首十有八九就是主板上的 Realtek 2.5G 网卡。CentOS 7 发布时的内核停留在 3.10,对 RTL8125 这种后来才普及的 2.5G 控制器根本没有原生驱动,自带的r8169模块要么认不出它,要么认出来也只能跑千兆,完全不干活。这篇文章就专门讲在物理机离线安装 CentOS 7的场景下,怎么把 Realtek 2.5G 网卡的官方驱动(r8125)老老实实装上去,并且重启之后还能自动加载、跑满 2.5G 带宽。
之所以强调“离线”,是因为大部分生产内网机房根本没外网,装完系统连yum install都跑不了,更别提在线拉源码包了。所以整篇文章会围绕“提前准备好一切物资,进机房一次性搞定”这个思路来写,内容包括:如何确认网卡型号、怎么准备离线编译依赖、源码编译和预编译模块两种安装路线、以及重启后驱动丢失、r8169 驱动冲突、Secure Boot 拦截这几个高频坑。适合运维、装机人员和所有在折腾物理机装 CentOS 7 的朋友收藏。
1. 先认清这块 2.5G 网卡和 CentOS 7 之间的关系
1.1 Realtek 2.5G 网卡到底是个什么东西
Realtek 2.5G 网卡芯片主要指 RTL8125 系列,包括 RTL8125B、RTL8125BG、RTL8126 等型号。这两年主流消费级主板和不少服务器板子都集成了它,原因很简单:价格便宜、兼容性好,理论速率是千兆的 2.5 倍,能跑满机械硬盘阵列的传输速度,也能让千兆宽带不再有瓶颈。但它和服务器上常见的 Intel X710、Mellanox 这些网卡不一样——Realtek 走的是消费级路线,Linux 内核社区对它的支持一直慢半拍。
1.2 为什么 CentOS 7 装完系统后网卡不工作
CentOS 7 的内核主要是 3.10.0 系列,基础包里虽然有r8169这个驱动模块,但它只负责老款 RTL8111/8168/8169 千兆网卡。RTL8125 出来后,Realtek 官方提供的是独立的r8125驱动源码,走的是一套完全不同的内部接口。如果你直接靠内核自带的r8169,会出现几种典型症状:
- 系统里完全没有网卡接口,
ip addr只有lo - 能看到网卡,但 ethtool 显示速率只有 1000Mb/s
- 传输不稳定,大流量拷文件直接断流
这三点我在不同机器上都遇到过,根本原因就是r8169对 RTL8125 是“半兼容”状态,能用但没法发挥 2.5G 性能,或者干脆认不出设备。
1.3 装驱动前,花两分钟确认硬件型号
这一步别跳过,我见过有人折腾了半天,最后发现板载网卡根本不是 RTL8125 而是瑞昱的另一个型号。硬件确认有两种办法:
第一种,在机器上执行:
lspci -nn | grep -i realtek输出类似:
03:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:8125] (rev 05)看到[10ec:8125]这串 PCI ID,就可以确定是 RTL8125 系列。如果是[10ec:8168]那就是老款千兆,不需要折腾,内核自带r8169就能驱动。
第二种,机器还没装系统或者系统里看不到网卡时,直接查主板官网的规格参数,或者开机进 BIOS 的板载设备信息页,看网卡芯片型号。这套组合拳打下来,基本不会认错。
2. 离线环境物资清单:提前一趟解决所有依赖
物理机放在内网机房里,没有外网,没有 apt/yum 源,这时候最大的敌人不是驱动本身,而是依赖缺东少西。千万不要想着“先进系统再说”,因为装驱动需要gcc、make、kernel-devel,这些 CentOS 7 最小化安装默认都没装。我的做法是:进机房之前,把所有需要的东西都准备到一个 U 盘里。
2.1 准备 r8125 官方源码包
Realtek 官方驱动在官网提供源码包,文件名类似r8125-9.011.00.tar.bz2或者r8125-9.008.00.tar.bz2。下载链接经常变,搜索“Realtek r8125 download”就能找到。注意下载时选择 Linux 版本的源码包,不是 Windows 的驱动 exe。
下载完放到 U 盘根目录,最好再放一个压缩包备份,防止 U 盘中途损坏。这个包在 U 盘里到进机房前都别动它。
2.2 解决编译工具链:靠 CentOS 7 安装盘当本地 yum 源
离线环境下没有 yum 源,最省事的办法就是用 CentOS 7 的安装 ISO 做本地 yum 源。如果你安装系统用的是完整版 DVD ISO,它自带gcc、make、kernel-devel等一大堆软件包。在已经装好的 CentOS 7 系统上,挂载这个 ISO:
mount -o loop /dev/sdb1 /mnt/iso等等,这里有两种情况。如果你是用 U 盘安装的系统,把同一块 U 盘重新插上,先lsblk看设备名,假设是/dev/sdb1,挂载到/mnt/usb,然后找 ISO 文件再 loop 挂载:
mkdir -p /mnt/usb /mnt/iso mount /dev/sdb1 /mnt/usb mount -o loop /mnt/usb/CentOS-7-x86_64-Everything-2009.iso /mnt/iso配置本地 yum 源,新建/etc/yum.repos.d/local.repo:
[local] name=local baseurl=file:///mnt/iso gpgcheck=0 enabled=1然后执行:
yum clean all yum install -y gcc make kernel-develkernel-devel必须和当前内核版本完全一致,安装系统时什么内核版本,就要装对应的 kernel-devel。可以用uname -r确认。
提示:如果 CentOS 7 已经 EOL,在线源基本都迁走了,本地 ISO 源反而是最稳定可靠的依赖来源。这也是我强烈推荐用“安装盘 ISO 做离线源”的原因。
2.3 如果连 ISO 都没有:提前去一台能上网的机器上抓依赖
有些机房不允许带光盘、ISO 文件,只允许带一个 U 盘进去。这种情况我一般在一台能访问外网的 CentOS 7 同版本机器上,用yumdownloader把依赖包全部下载到 U 盘:
yumdownloader --resolve --destdir=/mnt/usb/rpms gcc make kernel-devel到了目标机器后,直接rpm -ivh /mnt/usb/rpms/*.rpm安装。这里有个关键细节:kernel-devel包必须和内核版本一字不差,比如目标机器内核是3.10.0-1160.el7.x86_64,那就只下载对应版本的 kernel-devel。高版本的内核开发包装上去,编译出来的模块加载时会报 version magic 不匹配,直接拒绝加载。
2.4 关于 U 盘文件的组织建议
我在 U 盘里一般这样放:
/ ├─ drv/ │ └─ r8125-9.011.00.tar.bz2 ├─ rpms/ # 所有提前下载的依赖 rpm 包 ├─ CentOS-7-x86_64-Everything-2009.iso └─ readme.txt # 记录版本号、命令步骤,防止机房断网没法查机房环境往往只有 KVM 或者串口控制台,没法随时随地打开浏览器查资料,把关键命令写在 U 盘里的readme.txt是低成本但高回报的习惯。
3. 源码编译安装 r8125 的完整过程
到这一步,假设硬件确认完毕、U 盘已经挂载到目标机器上、yum 源已经配好。接下来就是正片。
3.1 拷贝源码包并解压
建议把源码包先拷到本机目录,再解压,防止直接从 U 盘上编译导致 I/O 问题或者文件权限不对:
mkdir -p /root/driver cp /mnt/usb/drv/r8125-9.011.00.tar.bz2 /root/driver/ cd /root/driver tar xjf r8125-9.011.00.tar.bz2 cd r8125-9.011.003.2 确认编译环境就绪
在开始make之前,我会先做一次环境检查,避免编译到一半报错,浪费一整轮时间:
gcc --version make --version ls /usr/src/kernels/ uname -r注意看/usr/src/kernels/里的目录名,必须和uname -r输出一致。如果不一致,回头检查kernel-devel装没装对。
3.3 编译、安装、加载驱动
make make installmake install会把编译出来的r8125.ko复制到/lib/modules/$(uname -r)/extra/目录下,然后自动调用depmod更新模块依赖关系。执行完先别急着重启,手动加载一下:
modprobe r8125看有没有报错。我习惯再用几条命令确认:
lsmod | grep r8125 dmesg | tail -20 ip link正常的话,ip link应该能看到一个网卡接口,名字可能是enp3s0、eno1这种,取决于你的主板和 systemd 命名规则。这时候网卡还是没有 IP 的,接着配置网络即可。
3.4 干掉 r8169 驱动冲突
这一步是重灾区。CentOS 7 内核里的r8169模块在系统启动时会尝试接管 RTL8125 设备,导致r8125加载的时候发现设备已经在别的模块手里,直接放弃。表现出来就是:modprobe r8125显示正常,但ip link里依然没有网卡。
解决办法是先把r8169模块从内核里摘掉,然后启动黑名单:
modprobe -r r8169 modprobe r8125测试没问题后,写入黑名单,防止下次启动又自动加载:
echo "blacklist r8169" > /etc/modprobe.d/blacklist-r8169.conf注意,黑名单只对r8169生效,不影响其他网卡驱动。写完黑名单后别忘再执行一次dracut --force重建 initramfs,否则重启阶段 initramfs 里依然会加载 r8169(我见到的重启后驱动失效,八成都是这个原因)。
3.5 配置静态 IP,完成最后一步
网卡识别后,按物理机实际网络规划配置静态 IP。CentOS 7 用的是ifcfg-*文件,网卡名以上面ip link看到的为准(假设是enp3s0):
vi /etc/sysconfig/network-scripts/ifcfg-enp3s0内容参考:
TYPE=Ethernet BOOTPROTO=static NAME=enp3s0 DEVICE=enp3s0 ONBOOT=yes IPADDR=192.168.10.20 NETMASK=255.255.255.0 GATEWAY=192.168.10.1 DNS1=192.168.10.1然后:
systemctl restart network ping -c 4 192.168.10.1能通就说明整个链路已经打通了。
4. 免编译方案:把预编译模块打包进系统
源码编译是通用方案,但有些场景下我不想在目标机器上装 gcc——毕竟生产服务器越干净越好,一堆编译工具链放在上面,无论是安全审计还是后续维护都麻烦。这时候可以用预编译内核模块的方案:在另一台相同系统、相同内核版本的机器上编译好r8125.ko,直接复制到目标机器加载。听起来简单,但有几个细节必须处理好。
4.1 找到和提取已编译的 .ko 文件
假设你在中转机上已经按第三章的流程装好了 r8125,模块文件位于:
/lib/modules/3.10.0-1160.el7.x86_64/extra/r8125.ko把它连同整个extra目录结构拷贝到目标机器的对应位置。内核版本必须完全一致,这是硬条件。拷贝方法还是靠 U 盘:
cp -a /lib/modules/$(uname -r)/extra /mnt/usb/ko/到目标机器上后:
mkdir -p /lib/modules/$(uname -r)/extra cp -a /mnt/usb/ko/r8125.ko /lib/modules/$(uname -r)/extra/ depmod -a modprobe r8125这样目标机器完全不需要 gcc 和 kernel-devel,也不需要配本地 yum 源,省事太多。
4.2 怎么把模块打成 RPM 包(适合批量交付)
如果手上有十几台机器要装同一个驱动,一台台敲命令太原始。用rpmbuild打完 RPM 包,内网一键rpm -ivh r8125-9.011.00-1.el7.x86_64.rpm就完事了。
Realtek 官方源码包里的src目录通常自带r8125.spec文件,可以直接用来打包。在能访问网络的中转机上:
yum install -y rpm-build cd /root/driver/r8125-9.011.00 rpmbuild -bb ./r8125.spec生成物在/root/rpmbuild/RPMS/x86_64/下。把它拷到目标机器安装:
rpm -ivh r8125-*.x86_64.rpmRPM 包的优点是会自己处理 depmod、启动加载、黑名单这些逻辑,安装完重启即用。但前提还是那个:目标机器内核版本和打包机器一致,否则加载照样报 version magic 错误。
4.3 源码编译和预编译怎么选
| 方案 | 需要工具链 | 需要网络/ISO 源 | 适合场景 | 踩坑概率 |
|---|---|---|---|---|
| 源码编译 | 需要 gcc/make/kernel-devel | 需要本地 ISO 源或 RPM 包 | 单台调试、机型多样 | 中,依赖问题多 |
| 预编译 .ko | 不需要 | 不需要 | 单台快速恢复、环境干净 | 低,但内核版本必须一致 |
| RPM 包交付 | 不需要 | 不需要 | 几十台批量装 | 低,打包一次到处用 |
我个人实际工作里最常用的是第三种:先找一台同内核版本的机器打好 RPM,内网一推,几分钟搞定。但第一次接触的时候建议先从源码编译走一遍,能帮你理解驱动加载的完整链路。
5. 重启、验速与日常使用的几个坑
驱动装完、网络通了,表面看已经收工。但根据我的经验,重启一次才算真正结束。很多人就是卡在这一步:当时怎么用怎么好,一重启网卡又没了。下面这些问题,我做过的每一台 CentOS 7 + RTL8125 机器几乎都会碰到,提前处理比事后排查省心得多。
5.1 重启后驱动不生效:initramfs 和黑名单顺序
重启后ip link里没网卡,第一件事看lsmod | grep r8125。如果 r8125 没加载,问题大概率出在 initramfs。CentOS 7 启动时加载的内核模块来自 initramfs 镜像,不是直接扫描/lib/modules。你虽然modprobe能加载,但重启流程还是按 initramfs 里的老配置走。
处理方式:
dracut --force然后重启验证。如果之前没写黑名单r8169,也可以在重装 initramfs 之前先把黑名单文件建好,确保 initramfs 里根本不存在 r8169。两个动作顺序不做强要求,但建议一起做掉,一次性杜绝两处隐患。
5.2 Secure Boot 把驱动拒之门外
很多物理机默认开启了 UEFI Secure Boot。编译出来的r8125.ko没有合法签名,Secure Boot 环境下内核会拒绝加载它,而且dmesg里的报错往往看得人一脸懵,什么Required key not available之类的,第一次遇到根本想不到是驱动签名问题。
判断方法:
mokutil --sb-state如果显示SecureBoot enabled,那就别硬刚签名了,进 BIOS 把 Secure Boot 关掉再启动。生产环境如果非要开 Secure Boot,那得走完整的模块签名流程,签发密钥、注册 MOK、签名驱动,整套流程折腾下来非常费时间,而且每升级一次内核就得重新签一次。我的建议是:CentOS 7 这种老系统在物理机上就别开 Secure Boot 了,省下的都是时间。
5.3 内核升级会导致驱动失效
CentOS 7 虽然已经 EOL,但内网如果有自己的软件源,偶尔还是会有内核安全更新。升级内核对 RTL8125 用户是个“大坑”:新内核起来后/lib/modules/新版本/extra/r8125.ko不存在,网卡直接消失。
解决思路只有一个:升级内核后,用新内核重新编译/安装一次驱动:
yum update kernel -y reboot # 重启后进入新内核执行 mount /dev/sdb1 /mnt/usb mkdir -p /root/driver && cp /mnt/usb/drv/r8125*.tar.bz2 /root/driver/ cd /root/driver && tar xjf r8125*.tar.bz2 && cd r8125*/ make && make install dracut --force如果你用的是 RPM 包方案,新内核起来后重新装一次 RPM 也一样。这里提醒一点:升级内核前先把新内核对应的 kernel-devel 也准备好,否则编译时又缺依赖,卡在重启后的死循环里。
5.4 ethtool 验证和吞吐实测
驱动加载不等于性能达标。我见过驱动加载了、网卡亮了、ping 也通,但速率执着地停在 1000Mb/s 的情况。验证方法:
ethtool enp3s0看Speed字段,正常 RTL8125 协商后应该是2500Mb/s。如果显示1000Mb/s,常见原因:
- 网线是五类线或者质量太差,2.5G 对线材要求比千兆高
- 对端交换机/对端网卡不支持 2.5G
- 网线水晶头接触不良
换个思路:如果短距离直连对端 2.5G 设备还是只有千兆,那就重点查驱动和供电。
宽带到底能跑多少,用 iperf3 实测最直观。对端也装好 iperf3 后:
# 服务端 iperf3 -s # 本机客户端 iperf3 -c 192.168.10.1 -t 30 -P 4好的 RTL8125 + 好的网线,TCP 吞吐一般在 1.8~2.3Gbps 之间。低于 1Gbps 就说明哪里没对齐,用ethtool -S enp3s0看有没有大量 CRC 错误。
5.5 关于散热和稳定性的一句话
RTL8125 这卡跑满 2.5G 的时候发热量比 Intel 网卡大一些,尤其是持续大流量的场景。物理机如果散热设计一般,建议注意一下机箱风道。这个不算致命问题,但长期高负载传输遇到偶发断流,优先查的不是驱动,是温度。
最后分享两个小习惯
r8125 这套流程我前前后后跑了十几台机器,现在基本形成了肌肉记忆。最后分享两个真正省过命的小习惯。
第一个:U 盘里永远放一个r8125-9.011.00.tar.bz2的原始源码包,不管用不用。因为 Realtek 官网的下载链接经常失效,今天能下载的地址下周可能就打不开了。源码包这种小体积、高价值的东西,值得在每个装机 U 盘里常驻一份。
第二个:每次给物理机装完驱动,顺手把内核版本、驱动版本、网卡 PCI ID 记到/root/README里。乍看多此一举,但半年后你回来处理这台机器的网络问题时,这段记录直接帮你省掉三分之一排查时间。人脑对细节的记忆是靠不住的,但文件系统记得住。
本文还有配套的精品资源,点击获取