今天早上,我将两个22.04.3 LTS
运行 HWE 的 Ubuntu 安装升级到内核6.5.0-14-generic
。重启两个系统后,网卡没有RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
出现。启动到较旧的 6.2.0-39-generic 内核后,网卡工作正常。尝试重新安装r8168-dkms
驱动程序时,安装驱动程序版本8.049.02
失败。运行时sudo lshw -C network
显示网卡为UNCLAIMED
。
问题是r8168-dkms
默认存储库中的驱动程序运行的版本8.049.02-1ubuntu1
与内核不兼容6.5.0-14-generic
。
$ apt-cache policy r8168-dkms
r8168-dkms:
Installed: 8.049.02-1ubuntu1
Candidate: 8.049.02-1ubuntu1
Version table:
*** 8.049.02-1ubuntu1 100
100 /var/lib/dpkg/status
8.049.02-1ubuntu1.2 500
500 http://us.archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages
500 http://us.archive.ubuntu.com/ubuntu jammy-updates/universe i386 Packages
8.049.02-1ubuntu1 500
500 http://us.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages
500 http://us.archive.ubuntu.com/ubuntu jammy/universe i386 Packages
当您尝试8.049.02
在6.5.0-14-generic
内核中构建驱动程序时,您会收到以下错误消息:
$ sudo dkms build r8168/8.049.02
Building module:
cleaning build area...
make -j8 KERNELRELEASE=6.5.0-14-generic -C /lib/modules/6.5.0-14-generic/build M=/var/lib/dkms/r8168/8.049.02/build..........(bad exit status: 2)
ERROR (dkms apport): binary package for r8168: 8.049.02 not found
Error! Bad return status for module build on kernel: 6.5.0-14-generic (x86_64)
Consult /var/lib/dkms/r8168/8.049.02/build/make.log for more information.
$ cat /var/lib/dkms/r8168/8.049.02/build/make.log
/var/lib/dkms/r8168/8.049.02/build/r8168_n.c:27733:24: error: implicit declaration of function ‘skb_gso_segment’; did you mean ‘skb_gso_reset’? [-Werror=implicit-function-declaration]
27733 | segs = skb_gso_segment(skb, features);
| ^~~~~~~~~~~~~~~
| skb_gso_reset
即使您更改源代码以匹配它did you mean...
仍会失败。但是,驱动程序在较旧的内核8.049.02
中构建得很好。6.2
5.15
是否有更新的驱动程序可供我使用?
PS:我不会使用r8169
我的r8168
芯片组的驱动程序,因为它一开始可以正常工作,但过一会儿就会出现不可预测的行为,有时甚至需要硬重启我的系统才能恢复界面。
答案1
笔记:我注意到,如果我启动 Windows 10,当我在没有硬电源循环的情况下重新启动 Ubuntu 时,NIC 将无法正常工作。这实际上是由于 Windows 中的驱动程序版本出于某种原因造成了此问题。为了解决这个问题,我重新启动 Windows 并10.69
从Realtek自己。现在从 Windows 重新启动回到 Ubuntu 就没有任何问题了。
驱动程序安装:
我想提交一个错误,r8168-dkms
但是它表明它不是一个官方软件包。
22.04 LTS 存储库中的当前版本8.049.02
或r8168-dkms
驱动程序似乎与内核不兼容6.5.0-14-generic
,dkms
无法安装该驱动程序。
启动回正常工作的内核并8.052.01
从以下位置下载 Realtek 驱动程序这里。
ps 该autorun.sh
文件未设置驱动程序,dkms
需要您在下次内核更新时重新安装该驱动程序。
在安装新的驱动程序之前,我建议8.049.02
从树中删除该驱动程序,这样dkms
就不会尝试将其安装到会失败的较新的内核中。
sudo dkms remove r8168/8.049.02 --all
下载驱动程序后,继续并提取文件。
tar xvf r8168-8.052.01.tar.bz2
输入新创建目录。
cd r8168-8.052.01/src
为驱动程序创建一个新的内核源目录。
sudo mkdir /usr/src/r8168-8.052.01
并将所有文件复制到新目录。
sudo cp -v * /usr/src/r8168-8.052.01/
dkms.conf
为驱动程序创建一个新文件。
sudo nano /usr/src/r8168-8.052.01/dkms.conf
现在将以下内容添加到文件中。
PACKAGE_NAME="r8168"
PACKAGE_VERSION="8.052.01"
BUILT_MODULE_NAME[0]="$PACKAGE_NAME"
DEST_MODULE_LOCATION[0]="/updates/dkms"
AUTOINSTALL="YES"
REMAKE_INITRD="YES"
保存文件并运行下一行来构建和安装驱动程序。
sudo dkms add r8168/8.052.01
sudo dkms build r8168/8.052.01 -k 6.5.0-14-generic
sudo dkms install r8168/8.052.01 -k 6.5.0-14-generic
确保更改上面两行的内核版本 (6.5.0-XX-generic) 以匹配您当前尝试安装的内核。
现在,当您检查时,dkms status
您应该会看到新的驱动程序已安装到内核中。
$ dkms status
r8168/8.052.01, 5.15.0-91-generic, x86_64: installed
r8168/8.052.01, 6.2.0-39-generic, x86_64: installed
r8168/8.052.01, 6.5.0-14-generic, x86_64: installed
重新启动系统并启动到最新的内核,RTL8111/8168/8411 PCI Express 千兆以太网控制器应该可以正常运行。
答案2
检查内核内置的 r8169 现在是否能与控制器配合良好。清除r8168-dkms
对我来说有效