openSUSE Tumbleweed 中 rtl8188/8192ce 网卡工作不正常的解决办法

在 Linux 内核 4.9.0 中引入的一个小问题导致部分 rtl8188/8192ce 网卡工作不正常。有时候无法连接无线网络,提示「IP configuration is unavailable」;有时候虽然可以连接,但是网络极差,表现为在 ping 路由器的时候延迟非常大,并可能伴随较高的丢包率。

问题状态

这个问题是因为驱动中的一个小错误导致这两种类型的网卡可能会在启动时加载错误的固件(firmware)。目前该问题已经修复,但是可能要到 Linux kernel 4.10 中才会整合此补丁。通过 GitHub 上的该部分网卡驱动的源程序可以自己编译安装,打上补丁后无线网络问题就能解决了。

如果不想打补丁,也可以通过修改该网卡的参数来暂时缓解该问题。

详细内容可以参考下面的链接:

修改参数

禁用该网卡的省电模式可能能够解决问题。下面就修改参数禁用该网卡的所有省电方式(全局 ips、硬件 fwlps、软件 swlps)。

  1. 检查 rtl8192ce 驱动是否加载,
    $ lsmod | grep rtl81
     rtl8192ce              73728  0
     rtl_pci                36864  1 rtl8192ce
     rtl8192c_common        69632  1 rtl8192ce
     rtlwifi                98304  3 rtl_pci,rtl8192ce,rtl8192c_common
     mac80211              835584  3 rtl_pci,rtl8192ce,rtlwifi
  2. 查看 rtl8192ce 模块信息,
     $ sudo modinfo rtl8192ce

    在结尾处有该模块的参数信息。

  3. 查看 rtl8192ce 模块的默认参数
     $ systool -v -m rtl8192ce

    在 「Parameters:」 下面应该有,

     debug   =   "0"
     fwlps   =   "Y"
     ips   =   "Y"
     swnc   =   "N"
     swlps   =   "N"
  4. 创建一个新的文件 /etc/modprobe.d/rtl8192ce.conf(需要管理员权限),在其中添加下面的内容(禁用那些默认启用的参数),
     options rtl8192ce ips=0 fwlps=0

    记得保存

  5. 重新加载该模块,
    $ sudo modprobe -r rtl8192ce && sudo modprobe rtl8192ce

    如果不行就重启系统

  6. 可以按照 3. 的方法检查现用的参数。

打补丁

下面是自己打驱动补丁的方法。

该方法参考 https://bugzilla.redhat.com/show_bug.cgi?format=multiple&id=1415339 上提供的方案修改而来。因为 openSUSE Tumbleweed 中 rtl8192ce 网卡驱动的位置和文件类型稍稍有些不同于该帖子中的描述。

  1. 下载、解压和编译该驱动,
    $ cd ~
    $ curl https://codeload.github.com/lwfinger/rtlwifi_new/tar.gz/master -o rtlwifi_new.tar.gz
    $ cd rtlwifi_new-master
    $ make
  2. 备份当前驱动(备份的文件夹不能删除!因为还要用),
    $ cd /lib/modules/$(uname -r)/kernel/drivers/net/wireless/
    $ sudo mv realtek _realtek_
  3. 创建新的驱动文件夹,并将编译的文件复制进去,
    $ sudo mkdir -p realtek/rtlwifi/rtl8192c
    $ sudo mkdir -p realtek/rtlwifi/rtl8192ce
    $ sudo cp ~/rtlwifi_new-master/*.ko ./realtek/rtlwifi
    $ sudo cp ~/rtlwifi_new-master/rtl8192c/rtl8192c-common.ko ./realtek/rtlwifi/rtl8192c/
    $ sudo cp ~/rtlwifi_new-master/rtl8192ce/rtl8192ce.ko ./realtek/rtlwifi/rtl8192ce/
  4. 重新加载 rtl8192ce 驱动模块,
    $ sudo modprobe -r $(lsmod | grep ^rtl | awk '{print $1}' | xargs)
    $ sudo modprobe rtl8192ce

    此时无线网络应该能够自动连接并正常工作了。

  5. 检查一下看看,
    $ lsmod | grep ^rtl

其实 Linux kernel 4.10 都到 RC5 了,应该很快就会正式发布了。©

本文发表于水景一页。永久链接:<http://cnzhx.net/blog/ostw-kernel-4-9-rtl8192ce-driver-bug-fix/>。转载请保留此信息及相应链接。

雁过留声,人过留名

电子邮件地址不会被公开。 必填项已用*标注

特别提示:与当前文章主题无关的讨论相关但需要较多讨论求助信息请发布到水景一页讨论区的相应版块,谢谢您的理解与合作!请参考本站互助指南