debian12 系统挂起之后wifi连接不上

debian12
内核版本:6.5
网卡型号:rtl8852ce

刚开始装官网提供的debian的时候就没有网卡驱动,尝试了官方提供的firmware包,和rtw98项目,均失败,最后更新了内核,能连wifi。但是每次系统挂起之后再打开就连不上wifi,很奇怪的错误,希望大佬解惑

Debian 12 的官方镜像已经提供了闭源固件包,另外驱动(driver)和固件(firmware)是两种不同的东西。
至于为什么挂起后唤醒连不上 WiFi,你应该检查系统日志看看有没有更多信息。

建议贴一下系统和网卡信息: 运行命令 inxi -SMCN,展示输出。

经过一番搜索,发现Debian 12 的 6.1 内核确实不支持该网卡,更高版本的内核应该支持(具体而言似乎是 6.2 起)。
介于您安装了 linux 6.5,也许问题出在新版本内核和系统某些组件的不兼容。应该查看 dmesg / journalctl 有没有相关的日志信息。

截图 2024-01-12 11-23-15
这是我使用dmsge之后显示的和rtw89相关的内容,我看不懂 :upside_down_face:

image
刚开始我没有装inxi这个工具,这是运行inxi -SMCN之后显示的内容,请问有什么建议吗?

根据您提供的硬件和 dmesg 信息,我有理由相信您的网卡存在无法正常从低功耗模式恢复的问题。这也许是驱动或固件相关问题。

一种可行的缓解方案是,禁用无线网卡的省电功能。如果您的系统是默认配置,正在使用 NetworkManager 管理网络,那么可以创建一个配置文件:

/etc/NetworkManager/conf.d/wifi-powersave-off.conf

[connection]
wifi.powersave = 2

wifi.powersave 值为 2 时会禁用省电功能。

如果您使用了 tlp 用于节约电池消耗(您提供的 inix 信息里没有报告 Machine 信息,所以只能猜测),可能也需要关闭相应的无线网卡省电功能。

或者您的主板固件可能存在问题(比如某些联想或戴尔的特定型号),所以无法正确恢复网卡状态,也许会需要通过修改内核模块参数来禁用一些功能。

对于 rtw89_pci,可用的参数可能有 :disable_clkreqdisable_aspm_l1disable_aspm_l1ss
对于 rtw89_core,可用的参数可能有:disable_ps_mode

关于这些参数的详细信息,可以使用 modinfo 查看,另外下面的链接有额外的描述:

非常感谢您花时间在我提出的问题上,我尝试了提供的方法,但是,添加这个配置文件好像没有起到什么作用,另外我的电脑型号是拯救者r9000p2023,应该是没有开启tlp的。

这个仓库我在更新内核之前尝试过这个方法,也可能是我的方法不对,当时甚至连不上网。

System:
Host: ts Kernel: 6.5.0-0.deb12.4-amd64 arch: x86_64 bits: 64 Desktop: GNOME
v: 43.9 Distro: Debian GNU/Linux 12 (bookworm)
Machine:
Type: Laptop System: LENOVO product: 82WM v: Legion R9000P ARX8
serial:
Mobo: LENOVO model: LNVNB161216 v: SDK0T76479 WIN
serial: UEFI: LENOVO v: LPCN47WW date: 09/15/2023
CPU:
Info: 16-core model: AMD Ryzen 9 7945HX with Radeon Graphics bits: 64
type: MT MCP cache: L2: 16 MiB
Speed (MHz): avg: 400 min/max: 400/5461 cores: 1: 400 2: 400 3: 400 4: 400
5: 400 6: 400 7: 400 8: 400 9: 400 10: 400 11: 400 12: 400 13: 400 14: 400
15: 400 16: 400 17: 400 18: 400 19: 400 20: 400 21: 400 22: 400 23: 400
24: 400 25: 400 26: 400 27: 400 28: 400 29: 400 30: 400 31: 400 32: 400
Network:
Device-1: Realtek driver: rtw89_8852ce
Device-2: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet
driver: r8169
这是inxi -SMCN的系统和网卡信息

你尝试了哪种办法?描述有些模糊不清。

如果让 NetworkManager 禁用 WiFi 休眠无效,你应该尝试那几个内核模块参数组合。

1 个赞

如果所有解决方案均无效,您可能需要提供更多信息,而不是只有几张截图(尽管如此,不保证能解决该问题)。正确的做法是复现错误后,

dmesg > 输出文件名

然后将该文件发送到论坛或者 pastebin 这样的地方。

注意 dmesg 输出的是内核环形缓冲区内容,较早的内容可能会被后面内容覆盖。

1 个赞

如果不确定如何添加内核模块参数,该链接

描述的很详细。

至于具体模块名,你可能需要用 lsmod | grep rtw 命令查看具体 rtw89* 模块的名字是什么,使用 sudo modinfo 模块名 查看 parm 部分字段,确定具体参数名。

查看 /sys/module/模块名/parameters/* 下的文件及其内容可以确定当前参数值。

1 个赞

非常感谢您的解答,现在这个问题已经解决了,就像你说的一样,是联想bios的问题。我第一次用看这个仓库里的内容的时候,并没有注意到这个睡眠后的唤醒问题。现在我按照这个仓库中描述,和你的回答,执行了下面的几条命令,查看驱动模块名lsmod | grep rtw 这里显示我的驱动模块名字是rtw89_8852ce,然后拷贝文件到对应的位置sudo cp suspend_rtw89 /usr/lib/systemd/system-sleep/sudo cp 70-rtw89.conf /etc/modprobe.d/,然后重新加载驱动程序sudo modprobe -rv rtw89_8852ce sudo modprobe -v rtw89_8852ce,现在问题解决了,再次感谢,这是我第一次在社区问问题,非常愉快的经历

这是我之前浏览这个仓库忽略的部分

实际上如果你直接拷贝 suspend_rtw89 这个文件:

是没有任何作用的。因为它针对的是 rtw_8852ae 这个模块。既然它没有生效的情况下您的系统仍然工作正常,说明您不需要该修改。

相关讨论:


另外如果你原样复制了:

生效的可能是该文件的第二行。之所以建议您用 lsmod | grep rtw 查看模块名,是因为我不确定 kernel 6.5 的模块叫 rtw89_pci 还是 rtw89pci。该配置文件禁用了该网卡的 活动状态电源管理(Active-State Power Management)功能,避免因为不支持该功能或者支持存在问题导致的网卡失去响应。

确实是这样,我删除了suspend_rtw89这个文件,只保留70-rtw89.conf,然后再重新加载这个驱动。从睡眠中唤醒之后仍然能正常加载驱动。另外和你想的一样,生效的确实是70-rtw89.conf这个文件的第二行,我执行sudo modprobe -v rtw89_8852ce之后,得到了下面的输出,显示在rtw89_pci.ko中追加了 disable_aspm_l1=y disable_aspm_l1ss.

insmod /lib/modules/6.5.0-0.deb12.4-amd64/kernel/drivers/net/wireless/realtek/rtw89/rtw89_pci.ko disable_aspm_l1=y disable_aspm_l1ss 
insmod /lib/modules/6.5.0-0.deb12.4-amd64/kernel/drivers/net/wireless/realtek/rtw89/rtw89_8852c.ko 
insmod /lib/modules/6.5.0-0.deb12.4-amd64/kernel/drivers/net/wireless/realtek/rtw89/rtw89_8852ce.ko 

虽然能正常使用了,但是当我dmesg | grep rtw 的时候,好像还是有错误发生

[    2.674046] rtw89_8852ce 0000:04:00.0: firmware: direct-loading firmware rtw89/rtw8852c_fw.bin
[    2.676989] rtw89_8852ce 0000:04:00.0: loaded firmware rtw89/rtw8852c_fw.bin
[    2.677780] rtw89_8852ce 0000:04:00.0: Firmware version 0.27.56.10, cmd version 0, type 1
[    2.677782] rtw89_8852ce 0000:04:00.0: Firmware version 0.27.56.10, cmd version 0, type 3
[    2.933797] rtw89_8852ce 0000:04:00.0: chip rfe_type is 1
[    3.000322] rtw89_8852ce 0000:04:00.0 wlp4s0: renamed from wlan0
[  425.113674] rtw89_8852ce 0000:04:00.0: firmware: direct-loading firmware rtw89/rtw8852c_fw.bin
[  425.116608] rtw89_8852ce 0000:04:00.0: loaded firmware rtw89/rtw8852c_fw.bin
[  425.117329] rtw89_8852ce 0000:04:00.0: Firmware version 0.27.56.10, cmd version 0, type 1
[  425.117331] rtw89_8852ce 0000:04:00.0: Firmware version 0.27.56.10, cmd version 0, type 3
[  425.373810] rtw89_8852ce 0000:04:00.0: chip rfe_type is 1
[  425.444342] rtw89_8852ce 0000:04:00.0 wlp4s0: renamed from wlan0
[ 4146.793011] rtw89_8852ce 0000:04:00.0: SER catches error: 0x1000
[ 4146.839386] rtw89_8852ce 0000:04:00.0: firmware failed to ack for leaving ps mode
[ 4146.841660] rtw89_8852ce 0000:04:00.0: SER catches error: 0x1001
[ 4146.841755] rtw89_8852ce 0000:04:00.0: SER catches error: 0x1002
[ 4146.884350] rtw89_8852ce 0000:04:00.0: c2h class 1 func 3 not support
[ 4193.002193] rtw89_8852ce 0000:04:00.0: [RX_DCK] S1 RXDCK timeout
[ 4196.142253] rtw89_8852ce 0000:04:00.0: [RX_DCK] S1 RXDCK timeout
[ 4338.315760] rtw89_8852ce 0000:04:00.0: firmware: direct-loading firmware rtw89/rtw8852c_fw.bin
[ 4338.318652] rtw89_8852ce 0000:04:00.0: loaded firmware rtw89/rtw8852c_fw.bin
[ 4338.319448] rtw89_8852ce 0000:04:00.0: Firmware version 0.27.56.10, cmd version 0, type 1
[ 4338.319450] rtw89_8852ce 0000:04:00.0: Firmware version 0.27.56.10, cmd version 0, type 3
[ 4338.579791] rtw89_8852ce 0000:04:00.0: chip rfe_type is 1
[ 4338.640666] rtw89_8852ce 0000:04:00.0 wlp4s0: renamed from wlan0
[ 4437.937455] rtw89_8852ce 0000:04:00.0: [RX_DCK] S1 RXDCK timeout

也许您应该尝试在 70-rtw89.conf 中再添加一行内核参数:

options rtw89_core disable_ps_mode=y

这会关闭网卡的省电功能。也许会消除该错误。
如果网卡无法从省电模式中恢复,这可能会导致网络性能下降、丢包或断开连接,因为驱动似乎在尝试重启网卡。不过还是以测试结果为准。

1 个赞