最近几年新出的主板很多都配备了Realtek 2.5G网卡,比如常见的RTL8125芯片。这种网卡在Windows下使用完全没问题,但如果你像我一样需要在Ubuntu 18.04上使用,就会遇到一个尴尬的问题——系统装好后发现网卡根本识别不了。
这个问题其实很好理解:Ubuntu 18.04发布于2018年,而2.5G网卡是近几年才流行起来的硬件。老系统内核自带的驱动根本不认识这些新硬件,就像给老人看最新款的智能手机,他可能连开机键在哪都找不到。
我最近就遇到了这个情况。公司有台服务器必须使用Ubuntu 18.04,但主板偏偏配了块Realtek 2.5G网卡。装完系统后ifconfig命令只能看到lo回环接口,连基本的网络配置都没法做。经过一番折腾,总算找到了完整的解决方案,现在就把这个从驱动编译到持久化配置的全过程分享给大家。
在开始之前,我们得先确认网卡的具体型号。如果你是从Windows转过来的,可以在设备管理器里查看"网络适配器"下的设备名称。如果已经装了Ubuntu但没网络,可以试试这个命令:
bash复制lspci | grep -i ethernet
对于Realtek 2.5G网卡,输出通常会包含"RTL8125"字样。我用的华硕主板显示的是"Realtek PCIe 2.5GbE Controller",对应的就是RTL8125芯片。
确认型号后,我们需要去Realtek官网下载对应的Linux驱动。这里有个小技巧:Realtek官网的导航不太友好,建议直接搜索"Realtek Linux driver download"。
找到"2.5G Ethernet LINUX driver r8125"这个选项,下载最新版本。我写这篇文章时最新版是9.009.01,文件名是r8125-9.009.01.tar.bz2。下载完成后,建议先校验下MD5值,确保文件完整。
把下载的驱动包放到家目录下,然后解压:
bash复制tar -xvf r8125-9.009.01.tar.bz2
cd r8125-9.009.01
解压后你会看到里面有个autorun.sh脚本。这个脚本会自动检测系统环境并编译驱动。我们先给它执行权限然后运行:
bash复制sudo chmod +x autorun.sh
sudo ./autorun.sh
这个过程中脚本会做以下几件事:
如果一切顺利,你现在应该能看到网络接口了。可以用ifconfig或者ip addr命令检查。
不过现实往往没那么顺利。我遇到过几次编译失败的情况,最常见的问题是缺少内核头文件。如果看到"kernel headers not found"之类的错误,需要先安装:
bash复制sudo apt update
sudo apt install linux-headers-$(uname -r) build-essential
另一个常见问题是签名验证失败。Ubuntu默认要求内核模块必须有有效签名。如果遇到这个问题,可以临时关闭签名验证:
bash复制sudo mv /lib/modules/$(uname -r)/build/certs/signing_key.pem /lib/modules/$(uname -r)/build/certs/signing_key.pem.bak
编译完成后再恢复原状。当然,生产环境不建议这么做,最好还是配置正确的模块签名。
前面用autorun.sh安装的驱动有个大问题:每次内核更新后驱动就会失效。这是因为驱动没有集成到DKMS(Dynamic Kernel Module Support)系统中。
要永久解决这个问题,我们需要把驱动加入DKMS。首先确保系统安装了DKMS:
bash复制sudo apt install dkms
然后把驱动源码复制到/usr/src目录:
bash复制sudo cp -rf ~/r8125-9.009.01 /usr/src
进入驱动目录,创建一个dkms.conf文件:
bash复制cd /usr/src/r8125-9.009.01
sudo nano dkms.conf
文件内容如下(根据你的实际版本修改):
conf复制PACKAGE_NAME="Realtek_r8125"
PACKAGE_VERSION="9.009.01"
DEST_MODULE_LOCATION="/updates/dkms"
BUILT_MODULE_NAME="r8125"
BUILT_MODULE_LOCATION="src/"
MAKE="'make' -C src/ all"
CLEAN="'make' -C src/ clean"
AUTOINSTALL="yes"
保存后,依次执行以下命令将驱动加入DKMS系统:
bash复制sudo dkms add -m r8125 -v 9.009.01
sudo dkms build -m r8125 -v 9.009.01
sudo dkms install -m r8125 -v 9.009.01
sudo depmod -a
sudo modprobe r8125
现在驱动已经集成到DKMS中了,以后内核更新时系统会自动重新编译驱动。
虽然DKMS能解决大部分问题,但有时内核更新后驱动还是会出问题。为此我们可以准备一个恢复脚本:
bash复制sudo nano /usr/local/bin/net_recovery.sh
脚本内容:
bash复制#!/bin/bash
dkms remove r8125/9.009.01 --all
dkms install -m r8125 -v 9.009.01
depmod -a
modprobe r8125
systemctl restart networking
给脚本执行权限:
bash复制sudo chmod +x /usr/local/bin/net_recovery.sh
以后遇到网络问题时,只需运行:
bash复制sudo net_recovery.sh
如果你希望更彻底地解决问题,可以考虑管理内核更新。查看当前内核版本:
bash复制uname -r
暂时禁止内核自动更新:
bash复制sudo apt-mark hold linux-image-$(uname -r)
sudo apt-mark hold linux-headers-$(uname -r)
需要恢复更新时:
bash复制sudo apt-mark unhold linux-image-$(uname -r)
sudo apt-mark unhold linux-headers-$(uname -r)
驱动安装完成后,可以用这些命令验证:
bash复制lsmod | grep r8125 # 检查驱动是否加载
dmesg | grep r8125 # 查看驱动加载日志
ethtool -i eth0 # 查看网卡驱动信息
如果网络仍然不正常,可以尝试:
bash复制sudo systemctl restart networking
bash复制sudo nano /etc/netplan/01-netcfg.yaml
确保配置正确后应用:
bash复制sudo netplan apply
2.5G网卡在Linux下可能需要一些调优才能发挥最佳性能。可以尝试以下设置:
bash复制sudo ethtool -K eth0 gro off gso off tso off
sudo ethtool -C eth0 rx-usecs 0 tx-usecs 0
这些设置可以降低CPU占用,提高吞吐量。具体参数可以根据实际网络环境调整。