realtek r8168 驱动程序在内核 5.8.0-50 上编译错误,(在 20.04.1 LTS 上)

realtek r8168 驱动程序在内核 5.8.0-50 上编译错误,(在 20.04.1 LTS 上)

我正在尝试将 r8168-dkms 安装到我的新 AMD Ryzen 电脑上的 20.04.1 全新安装上,但出现了编译错误。

uname -a output: 
Linux terry-pc 5.8.0-50-generic #56~20.04.1-Ubuntu SMP Mon Apr 12 21:46:35 UTC 
2021 x86_64 x86_64 x86_64 GNU/Linux

dpkg -i r8168-dkms_8.048.00-1_all.deb

生成日志:

适用于内核 5.8.0-50-generic (x86_64) 的 r8168-8.048.00 的 DKMS make.log 2021 年 4 月 23 日星期五下午 12:09:08 PDT make: 进入目录“/usr/src/linux-headers-5.8.0-50-generic” AR /var/lib/dkms/r8168/8.048.00/build/built-in.a CC [M] /var/lib/dkms/r8168/8.048.00/build/r8168_n.o CC [M] /var/lib/dkms/r8168/8.048.00/build/r8168_asf.o CC [M] /var/lib/dkms/r8168/8.048.00/build/rtl_eeprom.o CC [M] /var/lib/dkms/r8168/8.048.00/build/rtltool.o /var/lib/dkms/r8168/8.048.00/build/r8168_n.c: 在函数“rtl8168_proc_init”中:/var/lib/dkms/r8168/8.048.00/build/r8168_n.c:1670:47: 错误:从不兼容的指针类型传递“proc_create_data”的参数 4 [-Werror=incompatible-pointer-types] 1670 | &rtl8168_proc_fops, f->show)) { | ^~~~~~~~~~~~~~~~~~ | | | const struct file_operations * 在从 /var/lib/dkms/r8168/8.048.00/build/r8168_n.c:92 包含的文件中:./include/linux/proc_fs.h:103:31:注意:预期“const struct proc_ops *”,但参数类型为“const struct file_operations *”103 | extern struct proc_dir_entry *proc_create_data(const char , umode_t, | ^~~~~~~~~~~~~~~~ /var/lib/dkms/r8168/8.048.00/build/r8168_n.c: 在顶层:/var/lib/dkms/r8168/8.048.00/build/r8168_n.c:25825:31: 错误:从不兼容的指针类型“void ()(struct net_device *)”初始化“void ()(struct net_device *)” [-Werror=incompatible-pointer-types] 25825 | .ndo_tx_timeout = rtl8168_tx_timeout, | ^~~~~~~~~~~~~~~~~~ /var/lib/dkms/r8168/8.048.00/build/r8168_n.c:25825:31:注意:(靠近“rtl8168_netdev_ops.ndo_tx_timeout”的初始化)cc1:一些警告被视为错误make[1]:*** [scripts/Makefile.build:284:/var/lib/dkms/r8168/8.048.00/build/r8168_n.o] 错误 1 ​​make:*** [Makefile:1783:/var/lib/dkms/r8168/8.048.00/build] 错误 2 make:离开目录“/usr/src/linux-headers-5.8.0-50-generic”

有人遇到过这个问题并修复了吗?

答案1

2021 年 12 月 6 日:更新版本 8.049.02 的答案

2023 年 2 月 17 日:Realtek 版本 8.050.03 中的最新驱动程序之一将无法与最新的 LTS 内核 5.19.0-32-generic 配合使用。版本 8.051.02 可以正常工作。但是,我确实建议使用该r8168-dkms软件包,它将安装与 5.15 和 5.19 内核配合使用的 8.049.02 驱动程序。


确保根据需要更改驱动程序和内核的版本。

现在您已经安装了 Realtek 的 r8168-8.049.02 驱动程序,但遗憾的是它不包含驱动程序要接管到新内核更新中的 DKMS 信息。

为了解决这个问题,我们将dkms.conf为该驱动程序创建一个文件。

为新驱动程序创建一个目录:

sudo mkdir /usr/src/r8168-8.049.02

然后进入包含 r8168 驱动程序的文件夹(或下载并解压驱动程序从这里) 并将其所有内容复制到新创建的目录中:

sudo cp * /usr/src/r8168-8.049.02/

或者src/目录内容(如果存在)(这也应该包含该目录中的 Makefile)。

sudo cp src/* /usr/src/r8168-8.049.02/

dkms.conf然后在新的源目录中创建一个新文件:

sudo nano /usr/src/r8168-8.049.02/dkms.conf

并将以下行添加到文件:

PACKAGE_NAME="r8168"
PACKAGE_VERSION="8.049.02"
BUILT_MODULE_NAME[0]="$PACKAGE_NAME"
DEST_MODULE_LOCATION[0]="/updates/dkms"
AUTOINSTALL="YES"
REMAKE_INITRD="YES"

然后保存并关闭文件。

现在我们要将 dkms 驱动程序添加到内核:

sudo dkms add -m r8168 -v 8.049.02
sudo dkms build -m r8168 -v 8.049.02
sudo dkms install -m r8168 -v 8.049.02

然后使用 检查驱动程序dkms status。如果您发现构建的驱动程序与当前安装的驱动程序不同,请运行以下行来更正它:

sudo dkms uninstall -m r8168 -v 8.049.02 -k 5.8.0-50-generic && sudo dkms install -m r8168 -v 8.049.02 -k 5.8.0-50-generic --force

从现在开始,随着新内核的更新和升级,驱动程序现在应该自动安装到新内核中。

希望这可以帮助!

相关内容