Realtek 以太网卡随机断开连接

Realtek 以太网卡随机断开连接

我的笔记本电脑有一块 Realtek RTL8168 以太网卡,运行良好。但有时连接会断开,我必须拔掉电缆再重新插上才能重置连接。

我试过预装的 r8169 模块,但现在我使用的是使用 Realtek 网站源代码构建的 r8168 模块。两个驱动模块都出现了问题。

$ lspci | grep Ethernet
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

$ dmesg
#stops working, no reports
#unplugging
[ 9324.277753] r8168: eth0: link down
[ 9328.636380] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
#replugging
[ 9334.316610] r8168: eth0: link up
[ 9334.316744] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
#Working again

附言:grep NetworkManager /var/log/syslog在发生连接中断时,我发现了以下内容:

#EDIT:These messages are printed when I plug out the cable. Before, there is nothing
Jan 28 23:40:31 dracarys NetworkManager[912]: <info> (eth0): carrier now OFF (device state 100, deferring action for 4 seconds)
Jan 28 23:40:35 dracarys NetworkManager[912]: <info> (eth0): device state change: activated -> unavailable (reason 'carrier-changed') [100 20 40]
Jan 28 23:40:35 dracarys NetworkManager[912]: <info> (eth0): deactivating device (reason 'carrier-changed') [40]
Jan 28 23:40:35 dracarys NetworkManager[912]: <info> (eth0): canceled DHCP transaction, DHCP client pid 6975
Jan 28 23:40:35 dracarys NetworkManager[912]: <warn> DNS: plugin dnsmasq update failed
Jan 28 23:40:35 dracarys NetworkManager[912]: <info> Removing DNS information from /sbin/resolvconf
Jan 28 23:40:35 dracarys NetworkManager[912]: <info> NetworkManager state is now DISCONNECTED
#replug
Jan 28 23:40:40 dracarys NetworkManager[912]: <info> (eth0): carrier now ON (device state 20)
Jan 28 23:40:40 dracarys NetworkManager[912]: <info> (eth0): device state change: unavailable -> disconnected (reason 'carrier-changed') [20 30 40]
Jan 28 23:40:40 dracarys NetworkManager[912]: <info> Auto-activating connection 'Wired connection 1'.
Jan 28 23:40:40 dracarys NetworkManager[912]: <info> Activation (eth0) starting connection 'Wired connection 1'
Jan 28 23:40:40 dracarys NetworkManager[912]: <info> (eth0): device state change: disconnected -> prepare (reason 'none') [30 40 0]
Jan 28 23:40:40 dracarys NetworkManager[912]: <info> NetworkManager state is now CONNECTING

然后它又起作用了

有什么办法可以解决这个问题吗?如果您需要更多信息,请告诉我。

编辑$ modinfo r8168

filename:       /lib/modules/3.13.0-37-generic/kernel/drivers/net/ethernet/realtek/r8168.ko
version:        8.038.00-NAPI
license:        GPL
description:    RealTek RTL-8168 Gigabit Ethernet driver
author:         Realtek and the Linux r8168 crew <[email protected]>
srcversion:     7600C3366E422907A1D79F1
alias:          pci:v00001186d00004300sv00001186sd00004B10bc*sc*i*
alias:          pci:v000010ECd00008168sv*sd*bc*sc*i*
depends:        
vermagic:       3.13.0-37-generic SMP mod_unload modversions 
parm:           eee_enable:int
parm:           speed:force phy operation. Deprecated by ethtool (8). (ushort)
parm:           duplex:force phy operation. Deprecated by ethtool (8). (int)
parm:           autoneg:force phy operation. Deprecated by ethtool (8). (int)
parm:           aspm:Enable ASPM. (int)
parm:           s5wol:Enable Shutdown Wake On Lan. (int)
parm:           rx_copybreak:Copy breakpoint for copy-only-tiny-frames (int)
parm:           timer_count:Timer Interrupt Interval. (int)
parm:           debug:Debug verbosity level (0=none, ..., 16=all) (int)

答案1

注意::这个答案绝不是最终答案。我根据网上的一些研究以及个人经验提出了几个可能的解决方案。

替换内核模块

通过在线研究,似乎最好的解决方案通常是用较新的更新版本替换 Ubuntu 安装附带的 r8168 模块。例如,这篇 crunchbang 帖子

这篇 Ubuntu 论坛帖子2012 年的文档中有一个用于更新的 r8168 模块版本的脚本。您可以执行sudo apt-get install linux-headers-$(uname -r)sudo apt-get install --reinstall linux-headers-$(uname -r),然后按照 matera.ttp 的说明进行操作。Praseonym 也在那里发帖,他建议使用陣容,它应该会为每个内核更新重建模块。现在,您应该已经安装了 dkms,您可以使用 来检查它which dkms。因此,您可以使用 Praseonym 的说明或 matera.ttp 的 。想法是一样的。

调整模块设置

对于许多网络问题,调整模块配置可能有助于解决问题,但坦率地说,我怀疑这不是一个问题,因为你使用 r8169 也得到了同样的效果。尽管如此,还是试一试吧。

/etc/modprobe.d/目录中,创建r8168.conf文件。在该文件中写入:

options eee_enable=1

保存并重新启动。

现在,你可以用其他选项做同样的事情。例如,我的第一个猜测是添加options timer_count=3600到 r8168.conf 文件中。为什么是 3600 ?假设该参数与时间有关,那么很可能是秒。

我发现了一个实际上不起作用的情况,问题与 bios 有关。请参阅此页面:http://ubuntuforums.org/showthread.php?t=2138125&page=2

如果一切都失败了

我在其他帖子中也提到过,有时硬件是问题所在,无论你做多少调整都无济于事。就个人经验而言,我处理过两个 rtl8192 无线芯片组,其中一个发出奇怪的声音错误,但另一个几乎完美无缺。

我建议你研究一下以太网卡的可能替代品。我的建议是带以太网插槽的便携式 USB 集线器,就像这些

答案2

我认为您需要安装更稳定的 Realtek (RTL8111/RTL8168) 以太网卡官方驱动程序。

1.获取root权限

在终端中输入“su”或(当您使用 Ubuntu 时)“sudo -s”来获取 root 权限。

2. 获取需求

要构建和安装驱动程序,我们需要内核头文件和构建工具(如 gcc)。要获取它们,只需在终端中轻松输入:

apt-get install build-essential

3. 获取驱动程序

现在,请转到 Realtek 的官方下载页面,获取适用于 RTL8111/RTL8168 以太网卡的 Linux/UNIX 驱动程序并下载最新的驱动程序版本。

关联:Realtek 下载页面

4. 解压档案

该驱动程序已压缩到存档中。因此,请使用以下命令将其解压缩:

tar xfvj r8168-8.025.00.tar.bz2

注意:请不要忘记用您下载的驱动程序版本替换“r8168-8.025.00.tar.bz2”!

5. 将老司机列入黑名单

我们必须将旧驱动程序 (r8169) 列入黑名单,以防止系统加载它。为此,只需在“/etc/modprobe.d/blacklist.conf”中设置一个新条目,名为:

blacklist r8169

或者再次进入终端

echo “blacklist r8169″ >> /etc/modprobe.d/blacklist.conf

仅用一个命令即可完成此操作。

6. 构建并安装新驱动程序

现在,安装新驱动程序的所有要求都已完成。现在让我们更改驱动程序目录,该目录我们之前已通过几个步骤解压:

cd r8168-8.025.00

注意:再次提醒,请不要忘记将“r8168-8.025.00”更改为您下载的版本。

现在我们唯一要做的就是构建驱动程序并安装它。要构建它,只需输入:

make clean modules

几秒钟后(取决于您的 CPU),驱动程序已构建,您可以使用以下命令安装它:

make install

7. 欢迎 r8168

我们最后一步是让系统知道 r8168 驱动程序。使用以下命令

depmod -a

你重建内核模块依赖关系,并使用

insmod ./src/r8168.ko

将新的内核模块(驱动程序)插入内核。

8. 使其可启动

要始终使用新模块,您必须创建一个新的 initrd 启动文件。只需执行

mkinitramfs -o /boot/initrd.img-`uname -r` `uname -r`

在终端中。在这里,我们借助“uname -r”命令创建 initrd 文件,该命令允许我们获取实际运行的内核的版本。

至少,您必须在“/etc/modules”文件中添加一个名为“r8168”的新条目,以便在启动后自动加载驱动程序。或者,您可以使用一个命令再次执行最后一步:

echo “r8168″ >> /etc/modules

就是这样!重启后,RTL8111/RTL8168 的性能将达到最佳,而且不会再出现其他网络问题(不会出现故障)。

重启后,您可以使用以下命令检查是否加载了正确的驱动程序:

lspci -v

使用此命令,您应该在列表中找到您的 RTL8111/RTL8168 网卡和附加命令“正在使用的内核驱动程序:r8168”。

答案3

几天前我在 Realtek 网站上发现了新版本的驱动程序 (8.039.900)。我下载、编译并安装了它,从此再也没有遇到过任何连接中断的情况。

更新 r8168:

最新的驱动源可以下载这里

解压下载的档案并运行

sudo make

在解压文件夹中。编译后,当前安装的 r8168 模块将自动被新版本替换(我认为这应该只在运行时发生make install

要加载新版本,请运行

sudo modprobe -r r8168 && sudo modprobe r8168

PS:不要使用此驱动程序附带的安装脚本。它会在尝试编译新模块之前卸载旧模块(无论是 r8168 还是 r8169)。如果编译失败,如果您没有 WiFi 或另一张以太网卡,您将无法上网。

相关内容