Linux RTL8111/8168/8411 不能联网

注: 机翻,未校对。


如何让 Realtek RTL8111/RTL8168 在 Linux 下工作

这篇文章于 2016 年 8 月在我原来的博客上发布。尽管如今 Linux 下的 RTL8111/RTL8168 网络接口的情况变得越来越稳定,但它们仍然会导致数据包丢失或网络连接不稳定等问题。

通过这个简短的指南,展示如何安装 r8168 而不是 r8169 驱动程序。如今,大多数 Linux 发行版都默认使用 r8169 驱动程序。r8168 驱动程序有时更稳定,但由于许可证限制,默认情况下未启用。本指南介绍了安装 r8168 驱动程序的两种方法。

要求

本指南假定有一个有效的网络连接。仅当无法下载包含实际 RTL8111/RTL8168 和 r8169 驱动程序的软件包时,才需要额外的网络适配器(例如,因为已经遇到大量数据包丢失 / 连接中断)。另一种方法是从另一台计算机单独下载每个软件包(r8168 驱动程序和依赖项),然后使用 U 盘传输它。但是使用 USB 以太网适配器绝对是更方便的方式。

自动方式(仅适用于 Debian 和 Ubuntu)

Debian 几年前将 r8168 驱动程序添加到他们的非自由存储库中。话虽如此,如果还没有在 Debian 安装中启用非自由存储库,那么现在就必须这样做。如果使用的是最新的 Debian 版本(在撰写本文时,最新的版本是 bookworm),必须像这样调整 /etc/apt/sources.list 文件:

deb http://deb.debian.org/debian/bookworm main contrib non-free

对于 Ubuntu,它们的非自由存储库称为 universe。在 Ubuntu 22.04 中,它很可能已经启用。可以检查 /etc/apt/sources.list,如果 * 缺少 universe* 存储库,请调整文件,使其包含如下内容:

deb http://archive.ubuntu.com/ubuntu/jammy main restricted universe

启用 non-free / universe 存储库后,可以刷新软件包列表并安装 r8168 驱动程序,如下所示:

~$ sudo apt update && sudo apt install r8168-dkms

驱动程序是针对正在运行的 Linux 内核编译的。这些软件包利用 DKMS 来执行此操作。DKMS 确保在安装 Linux 内核更新时始终重建驱动程序。根据 CPU,编译可能需要几分钟时间。编译 / 安装完成后,重新启动计算机。现在应该能够按预期使用网络接口,而不会出现任何网络问题或包丢失。还可以在命令行上检查正在使用的驱动程序:

~$ lspci -v | grep -A8 Ethernet | grep -A8 Realtek
[...]
Kernel driver in use: r8168

手动方式(适用于所有分发,不推荐)

手动方式有点复杂,我绝对不再推荐这样做。但是,如果 Linux 发行版没有以一种或另一种方式提供 r8168 驱动程序,可能会被迫走这条路。这样做的一个巨大缺点是,每次更新内核时,都必须自行重新编译驱动程序。所以请记住这一点。否则,在内核更新和系统重新启动后,网卡很可能无法工作。

为了自行编译 r8168 驱动程序,必须安装内核头文件和编译实用程序,如 gcc、make 和 configure。对于 Debian 和 Ubuntu 系统,可以像这样安装所有依赖项:

~$ sudo apt update && sudo apt install build-essentials linux-headers-$(uname -r)

下一步是下载驱动程序。Realtek 的官方主页似乎不再提供驱动程序。因此,必须在 GitHub 上使用 mtorromeo 提供的镜像。你可以像这样使用 wget 直接下载驱动程序(请务必先在 GitHub 上查看最新版本):

~$ wget https://github.com/mtorromeo/r8168/archive/refs/tags/8.052.01.tar.gz

必须确保将来启动机器时不会加载 r8169 驱动程序。以下命令可确保这一点:

~$ sudo sh -c 'echo blacklist r8169 >> /etc/modprobe.d/blockr8169.conf'

接下来,可以提取以前下载的驱动程序存档:

~$ tar xfvz r8168-8.052.01.tar.gz

通过提取驱动程序存档,有一个具有相同名称方案的新文件夹,可以将其更改为:

~$ cd r8168-8.052.01
  • 注意:该数字可能会更改,具体取决于将来的驱动程序版本。因此,如果需要,请不要忘记更改版本号。*

现在在正确的目录中,终于可以开始编译驱动程序了。为此,只需输入以下命令:

~/r8168-8.052.01$ sudo ./autorun.sh

然后,应该会看到如下所示的输出:

Check old driver and unload it.
rmmod r8168
Build the module and install
At main.c:222:
- SSL error:02001002:system library:fopen:No such file or directory: bss_file.c:175
- SSL error:2006D080:BIO routines:BIO_new_file:no such file: bss_file.c:178
sign-file: certs/signing_key.pem: No such file or directory
Backup r8169.ko
rename r8169.ko to r8169.bak
DEPMOD 4.4.0-31-generic
load module r8168
Updating initramfs. Please wait.
update-initramfs: Generating /boot/initrd.img-4.4.0-31-generic
Completed.

现在可以忽略 SSL 错误。驱动程序应已成功编译并安装到系统中。驱动程序已加载,应该可以工作。

若要确保真正使用和加载驱动程序,可以使用与上述相同的命令:

~$ lspci -v | grep -A8 Ethernet | grep -A8 Realtek
[...]
Kernel driver in use: r8168

在我的旧博客上,一位名叫 Tim 的用户也提到了 ethtool,它也有同样的作用,并帮助检查是否使用了正确的驱动程序:

~$ sudo ethtool -i enp1s0
driver: r8168
version: 8.042.00-NAPI
firmware-version:
expansion-rom-version:
bus-info: 0000:07:00.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
  • 注意:必须将 enp1s0 更改为网卡的设备名称。这可以是 eth0、eth1、enp2s0 等。*

    如果提到 r8168,则驱动程序已正确安装,现在应该能够使用网卡,而不会丢失或中断任何包。


via: How to get an Realtek RTL8111/RTL8168 working under Linux TUXBYTE FEB 07, 2024

https://tuxbyte.com/p/how-to-get-an-realtek-rtl8111rtl8168


驱动下载


相关推荐

  1. Linux RTL8111/8168/8411 不能联网

    2024-07-13 07:02:04       24 阅读
  2. 联网IC

    2024-07-13 07:02:04       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 07:02:04       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 07:02:04       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 07:02:04       57 阅读
  4. Python语言-面向对象

    2024-07-13 07:02:04       68 阅读

热门阅读

  1. 图论基础概念(详细讲解)

    2024-07-13 07:02:04       23 阅读
  2. ARFoundation系列讲解 - 94 Immersal 简介

    2024-07-13 07:02:04       23 阅读
  3. Knife4j的原理及应用详解(一)

    2024-07-13 07:02:04       22 阅读
  4. Linux Vim基础教程

    2024-07-13 07:02:04       24 阅读
  5. 在Qt C++项目中调用7z API实现压缩和解压

    2024-07-13 07:02:04       16 阅读
  6. 详解C#委托与事件

    2024-07-13 07:02:04       27 阅读
  7. 在Spring Boot项目中集成监控与报警

    2024-07-13 07:02:04       27 阅读
  8. 第二讲 数据结构

    2024-07-13 07:02:04       21 阅读
  9. 11网络层-分组转发算法

    2024-07-13 07:02:04       27 阅读
  10. MySQL与Redis优化

    2024-07-13 07:02:04       24 阅读
  11. C++中的RTTI(运行时类型识别)的定义

    2024-07-13 07:02:04       26 阅读
  12. 「字符串匹配算法 1/3」朴素和Rabin-Karp

    2024-07-13 07:02:04       27 阅读
  13. Vue 组件之间的通信方式

    2024-07-13 07:02:04       25 阅读