iwlwifi 偶尔会失败,出现“硬件错误”、“队列卡住”和“微码 SW 错误”

iwlwifi 偶尔会失败,出现“硬件错误”、“队列卡住”和“微码 SW 错误”

我的笔记本电脑上安装了 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.ucode53、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"`

相关内容