我在一次系统更新后,网卡驱动变成了r8168,事实上之前我已经删除了这个驱动包,因为用它我的网络受限,用系统内核里的r8169可以正常上网。问了一下系统自带的AI助手,它给了以下答案,实测有用,就是把r8168加入黑名单,系统就不再错误绑定网卡驱动了。以下是智能助手的回答:
要禁用 r8168 驱动、改用系统自带的 r8169 驱动,本质是撤销此前为 Realtek RTL8111/8168 网卡手动安装或启用 r8168 的操作,并确保内核加载的是默认通用驱动 r8169。以下是完整、安全、可逆的操作步骤(适用于 Debian/Ubuntu/Deepin 等主流 Linux 发行版):
一、确认当前实际使用的驱动
在终端中执行:
lspci -k | grep -A 3 -i ethernet
查看输出中类似这一行:
Kernel driver in use: r8168 ← 当前正在运行的驱动
Kernel modules: r8168 r8169 ← 系统可加载的模块(两个都存在)
若显示 r8168 正在使用,说明需禁用它;若已是 r8169,则无需操作。
二、卸载并禁用 r8168 模块
1. 卸载当前已加载的 r8168 模块(立即生效,不重启)
sudo modprobe -r r8168
若提示 FATAL: Module r8168 is in use,请先关闭有线网络(如 sudo ip link set enp0s3 down 或断开网线),再重试。
2. 防止开机自动加载 r8168
编辑黑名单配置文件:
sudo nano /etc/modprobe.d/blacklist-r8168.conf
在文件中添加一行:
blacklist r8168
保存退出(Ctrl+O → Enter → Ctrl+X)。
此举可阻止内核在启动时加载 r8168,为 r8169 让出设备绑定权。
3. 确保 r8169 不被屏蔽(检查是否误加了 blacklist r8169)
运行:
grep -r “blacklist r8169” /etc/modprobe.d/
若返回结果(如 /etc/modprobe.d/blacklist.conf: blacklist r8169),请删除该行或注释掉(在行首加 #),否则 r8169 也无法加载。
三、清理 r8168 相关残留(可选但推荐)
• 删除 DKMS 安装的 r8168(如曾用 r8168-dkms 包安装):
sudo apt remove --purge r8168-dkms
sudo dkms status | grep r8168 && sudo dkms remove r8168/8.053.00 --all # 版本号按实际替换
• 删除手动编译安装的 r8168 模块:
sudo rm /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/r8168.ko
sudo depmod -a
• 清理 initramfs 中的 r8168(关键!否则重启后仍可能加载):
sudo sed -i ‘/r8168/d’ /etc/initramfs-tools/modules
sudo update-initramfs -u -k all
• 清理 /etc/modules 中的 r8168 自启项:
sudo sed -i ‘/r8168/d’ /etc/modules
四、强制让 r8169 接管网卡(关键步骤)
即使 r8168 已卸载,有时设备仍被“绑定”在旧驱动上。需触发重新探测:
卸载当前网卡设备(假设设备号为 0000:02:00.0,通过 lspci -nn | grep 8168 获取)
echo “0000:02:00.0” | sudo tee /sys/bus/pci/drivers/r8168/unbind 2>/dev/null
通知内核重新 probe,自动匹配 r8169
sudo modprobe r8169
sudo sh -c ‘echo “0000:02:00.0” > /sys/bus/pci/drivers/r8169/bind’
获取设备号方法:
lspci -nn | grep “10ec:8168|10ec:8111”
输出示例:02:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
设备号即:0000:02:00.0(注意补全前缀 0000:)
五、验证是否成功切换为 r8169
lspci -k | grep -A 3 -i ethernet
正确结果应显示:
Kernel driver in use: r8169
Kernel modules: r8168 r8169
再检查网络接口是否恢复:
ip link show | grep -A2 “state UP|state DOWN”
或
sudo ethtool enp0s3 | grep “Link detected”
六、(可选)永久优化:设置 r8169 优先绑定
为避免未来内核更新后再次错绑,可创建 udev 规则强制绑定:
echo ‘SUBSYSTEM==“pci”, ATTR{vendor}==“0x10ec”, ATTR{device}==“0x8168”, DRIVER==“”, RUN+=“/bin/sh -c ‘echo 0000:%p > /sys/bus/pci/drivers/r8169/bind’”’ | sudo tee /etc/udev/rules.d/99-r8169-priority.rules
sudo udevadm control --reload
注意:%p 是 udev 变量,会自动展开为设备路径(如 0000:02:00.0),无需手动填写。
如按以上步骤操作,系统将完全回归使用内核原生 r8169 驱动,r8168 不再参与任何环节。
如遇异常(如无法联网、无网卡设备),可随时恢复:
→ 删除 /etc/modprobe.d/blacklist-r8168.conf
→ 执行 sudo modprobe r8168
→ 重启即可回退。
需要我为你生成一键脚本或适配特定发行版(如 Deepin 23 / Ubuntu 24.04),欢迎随时告知。