我的笔记本电脑上安装了 Ubuntu 18.04(内核:5.4.0-53-generic),无线网卡为 Intel(R) Dual Band Wireless AC 9462,REV=0x354。有时我注意到我的 wifi 行为异常,间歇性出现严重延迟,有时会断开连接,然后无法重新连接到接入点。
首先,我注意到我的输出中有以下两行dmesg
(在此处查看完整输出):
[ 6.572592] iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-QuZ-a0-jf-b0-50.ucode failed with error -2
[ 6.572606] iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-QuZ-a0-jf-b0-49.ucode failed with error -2
我注意到这iwlwifi-QuZ-a0-jf-b0-48.ucode
是我的 中最后一个现有版本/lib/firmware/
。通过下载并将iwlwifi-QuZ-a0-jf-b0-50.ucode
53、55 和 59 添加到该目录,我可以首先修复该问题。因此 中没有报告任何问题dmesg
:
mhr@mhr-Vostro-5490:~$ dmesg | grep iwlwifi
[ 9.090633] iwlwifi 0000:00:14.3: enabling device (0000 -> 0002)
[ 9.107845] iwlwifi 0000:00:14.3: TLV_FW_FSEQ_VERSION: FSEQ Version: 58.3.35.22
[ 9.108038] iwlwifi 0000:00:14.3: loaded firmware version 50.3e391d3e.0 op_mode iwlmvm
[ 9.165959] iwlwifi 0000:00:14.3: Detected Intel(R) Dual Band Wireless AC 9462, REV=0x354
[ 9.290913] iwlwifi 0000:00:14.3: base HW address: 4c:1d:96:30:83:6a
[ 9.663805] iwlwifi 0000:00:14.3 wlp0s20f3: renamed from wlan0
但大约一周后问题又出现了。我的 wifi 从启动到随机一段时间后都运行正常,然后开始出现异常(连接不良、速度慢、与接入点断开连接),当然有时这种情况永远不会发生,一切都很好。一旦我的网络出现故障,我就可以看到 iwlwifi 生成冗长且难以理解的错误消息,报告在dmesg
(查看完整输出):
[ 123.483358] iwlwifi 0000:00:14.3: Hardware error detected. Restarting.
[ 134.234398] iwlwifi 0000:00:14.3: Queue 2 is stuck 225 184
[ 134.234633] iwlwifi 0000:00:14.3: Microcode SW error detected. Restarting 0x0.
答案1
添加一些背景信息。我也经常遇到这种情况。我的适配器是 Wi-Fi 6 AX200 (v1)。错误与此类似。我只有在连接到 Mesh WiFI 网络时才会遇到这种情况。而不是通过常规 WiFI 网络。但不确定这是否相关。
答案2
我编写了一个程序,以便在问题再次出现时bash script
方便地重新启动我的模块。iwlwifi
我在这里分享它只是作为对我有用的临时解决方案。此脚本接受要传递给的输入参数modprobe iwlwifi
。我还没有找到可以肯定解决问题的参数,因此我暂时将其留空。
#!/bin/bash
params=""
delay=5
# if [ "$EUID" -ne 0 ]; then
if [ $USER != 'root' ]; then
echo "Must be run as root!"
exit
fi
# if [ $# -eq 0 ]; then
# echo "Script run with no input arguments..."
# fi
for i in $*; do
params=" $params $i"
done
echo "removing iwlwifi module..."
modprobe -r iwlwifi
if [ -z "$params" ]; then
echo "iwlwifi will be reinserted with no additional settings specified..."
else
echo "iwlwifi will be reinserted with the following params:$params"
fi
echo -n "reinserting in $delay seconds"
for ((i=0; i<$delay; i++)); do
sleep 1
echo -n .
done
echo
modprobe iwlwifi $params
echo "end of script" `basename "$0"`