问题

 问题

这个问题似乎在过去几年里发生在很多人身上,我在几个论坛和问题中都找到了讨论。然而,大多数这样的讨论最终都没有明确的解决方案,或者没有明确说明,所以我在这里再次尝试。

 问题

 连接悄无声息地中断

我正在尝试使用我的笔记本电脑(Dell Precision M3800)连接到公共 wifi 网络(确切地说是大学网络)。连接最初成功,但过了一段时间(我不知道需要多长时间:有时只有几分钟,有时是几小时)它就停止工作了。

在这里停止工作,我的意思是显然连接仍然处于开启状态,当我尝试实际访问某个网站或 ping 某个地址时,最初什么也没有发生。值得注意的是,此时所有内容仍显示连接处于开启状态。网络管理器图标以及和nmcli dev的输出都表明我们已成功连接。nmcli gnmcli dev wifi

过了一段时间,虽然nmcli dev仍然nmcli g说一切正常,但nmcli dev wifi现在只检测到我们现在应该连接的连接(尽管我知道还有其他可用的 AP)。

 尝试重置连接

如果我什么都不做,情况就会保持上述状态。如果我现在尝试重置连接,我们就会得到标题中的错误。为此,我使用了sudo service network-manager restart。这是此时各种工具报告的状态:

  1. ip link仍然报告接口处于打开状态,并显示以下格式的行... wlp6s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> ...(请注意向上部分)。
  2. 另一方面,iw报告接口处于关闭状态:输出iw dev wlp6s0 linkNot connected.
  3. nmcli报告接口已关闭。具体来说,nmcli dev报告状态为disconnected, 也是一样nmcli g。有趣的是,nmcli g仍将 WIFI 报告为enabled。 的输出证实了这一点nmcli radio,它将所有内容报告为enabled
  4. 网络管理器图标只是显示disconnected没有可见的重新连接选项。

尝试再次打开接口,获取RT网络链路错误

此时我有点想不通了,所以我只是尝试通过 重置连接ip,但仍然没有将其记录为关闭。我使用sudo ip link set wlp6s0 down然后sudo ip link set wlp6s0 up。第一个命令成功,正如 的输出所证实的那样ip link。然而,第二个命令失败了

RTNETLINK 回答:输入/输出错误

提供了其他有趣的信息dmesg。当错误发生时,会给出大量错误iwlwifi。我上传了整个dmesg转储关于这个要点. 错误很可能与发生在L1049连接断开后,直到我强制重置网络管理器,我们才会得到 iwlwifi 错误循环,该循环始于L1100,而只是因为那是我奔跑的点而结束dmesg

当我尝试运行ip link set wlp6s0 up并得到我们所喜欢的错误时,打印了以下几行dmesg

[  +9.727062] iwlwifi 0000:06:00.0: Failed to wake NIC for hcmd
[  +0.000047] iwlwifi 0000:06:00.0: Error sending MAC_CONTEXT_CMD: enqueue_hcmd failed: -5
[  +0.000006] iwlwifi 0000:06:00.0: Failed to remove MAC context: -5
[ +13.220958] iwlwifi 0000:06:00.0: Could not load the [0] uCode section
[  +0.000007] iwlwifi 0000:06:00.0: Failed to start INIT ucode: -5
[  +0.000002] iwlwifi 0000:06:00.0: Failed to run INIT ucode: -5
[  +0.000001] iwlwifi 0000:06:00.0: Failed to start RT ucode: -5
[Feb27 12:59] iwlwifi 0000:06:00.0: Could not load the [0] uCode section
[  +0.000007] iwlwifi 0000:06:00.0: Failed to start INIT ucode: -5
[  +0.000002] iwlwifi 0000:06:00.0: Failed to run INIT ucode: -5
[  +0.000002] iwlwifi 0000:06:00.0: Failed to start RT ucode: -5

进一步的谷歌搜索让我在 archlinux 论坛上找到了这两个帖子(无线 AP 断开连接时停止广播RTNETLINK 回答:输入/输出错误,rt3290),这进一步表明网络适配器驱动程序存在问题。他们特别提到使用

sudo modprobe -r iwlwifi
sudo modprobe iwlwifi

第一个命令成功了,输出ip link不再显示wlp6s0界面,这证实了这一点。不幸的是,一旦驱动程序被关闭,它就不会再启动了(当然,它确实会再次启动,因为它会再次出现在 中sudo modprobe | grep iwl,但界面仍然不会再次出现ip link)。第二个命令失败,没有终端输出,并显示以下dmesg日志:

[Feb27 16:45] Intel(R) Wireless WiFi driver for Linux
[  +0.000002] Copyright(c) 2003- 2015 Intel Corporation
[  +0.000830] iwlwifi 0000:06:00.0: loaded firmware version 17.608620.0 op_mode iwlmvm
[  +0.016423] iwlwifi 0000:06:00.0: Detected Intel(R) Dual Band Wireless AC 7260, REV=0xFFFFFFFF
[  +0.024695] Timeout waiting for hardware access (CSR_GP_CNTRL 0xffffffff)
[  +0.000012] ------------[ cut here ]------------
[  +0.000009] WARNING: CPU: 6 PID: 4523 at /build/linux-hwe-4GXcua/linux-hwe-4.13.0/drivers/net/wireless/intel/iwlwifi/pcie/trans.c:1873 iwl_trans_pcie_grab_nic_access+0xe7/0xf0 [iwlwifi]
[  +0.000001] Modules linked in: iwlmvm(+) mac80211 iwlwifi cfg80211 ccm rfcomm bnep snd_hda_codec_hdmi arc4 uvcvideo videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_core videodev media joydev pn544_mei mei_phy pn544 hci nfc intel_rapl x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel hid_multitouch kvm irqbypass crct10dif_pclmul crc32_pclmul ghash_clmulni_intel pcbc snd_hda_codec_realtek snd_hda_codec_generic btusb btrtl dell_laptop snd_hda_intel btbcm aesni_intel snd_hda_codec dell_smm_hwmon aes_x86_64 btintel bluetooth snd_hda_core snd_hwdep crypto_simd ecdh_generic glue_helper cryptd intel_cstate snd_pcm intel_rapl_perf dell_wmi dell_smbios input_leds dcdbas snd_seq_midi serio_raw wmi_bmof sparse_keymap snd_seq_midi_event snd_rawmidi intel_pch_thermal snd_seq rtsx_pci_ms memstick
[  +0.000033]  snd_seq_device snd_timer snd acpi_als kfifo_buf mei_me lpc_ich mei shpchp soundcore ie31200_edac industrialio dptf_power int3403_thermal int3406_thermal int3402_thermal dell_smo8800 dell_rbtn processor_thermal_device int3400_thermal int340x_thermal_zone mac_hid acpi_thermal_rel intel_soc_dts_iosf parport_pc ppdev lp parport autofs4 hid_logitech_hidpp hid_logitech_dj usbhid hid i915 nouveau rtsx_pci_sdmmc mxm_wmi ttm i2c_algo_bit drm_kms_helper syscopyarea sysfillrect sysimgblt psmouse fb_sys_fops ahci libahci drm rtsx_pci wmi video [last unloaded: cfg80211]
[  +0.000026] CPU: 6 PID: 4523 Comm: modprobe Tainted: G        W       4.13.0-36-generic #40~16.04.1-Ubuntu
[  +0.000000] Hardware name: Dell Inc. Dell Precision M3800/Dell Precision M3800, BIOS A10 08/17/2015
[  +0.000001] task: ffff9037d6261740 task.stack: ffffb44d43ef0000
[  +0.000006] RIP: 0010:iwl_trans_pcie_grab_nic_access+0xe7/0xf0 [iwlwifi]
[  +0.000001] RSP: 0018:ffffb44d43ef3ae0 EFLAGS: 00010082
[  +0.000001] RAX: 000000000000003d RBX: ffff9037d77e0018 RCX: 0000000000000000
[  +0.000001] RDX: 0000000000000000 RSI: ffff9037efb96578 RDI: ffff9037efb96578
[  +0.000001] RBP: ffffb44d43ef3b00 R08: 0000000000000001 R09: 00000000000005a4
[  +0.000000] R10: 0000000000000000 R11: 00000000000005a4 R12: 0000000000000000
[  +0.000001] R13: ffff9037d77e8f20 R14: ffffb44d43ef3b10 R15: ffff9037d77e0230
[  +0.000001] FS:  00007f82e7a0a700(0000) GS:ffff9037efb80000(0000) knlGS:0000000000000000
[  +0.000001] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  +0.000001] CR2: 00007ffc8c365b08 CR3: 000000038bc2e004 CR4: 00000000001606e0
[  +0.000001] Call Trace:
[  +0.000006]  iwl_read_prph+0x38/0x90 [iwlwifi]
[  +0.000004]  iwl_pcie_apm_init+0x1c0/0x230 [iwlwifi]
[  +0.000005]  iwl_trans_pcie_start_hw+0x76/0x1f0 [iwlwifi]
[  +0.000009]  iwl_op_mode_mvm_start+0x6e4/0xb10 [iwlmvm]
[  +0.000005]  _iwl_op_mode_start.isra.10+0x4c/0xa0 [iwlwifi]
[  +0.000004]  iwl_opmode_register+0x6c/0xd0 [iwlwifi]
[  +0.000002]  ? 0xffffffffc0742000
[  +0.000007]  iwl_mvm_init+0x35/0x1000 [iwlmvm]
[  +0.000003]  do_one_initcall+0x55/0x1b0
[  +0.000003]  ? __vunmap+0x81/0xb0
[  +0.000002]  ? kmem_cache_alloc_trace+0x154/0x1b0
[  +0.000001]  ? kfree+0x165/0x170
[  +0.000003]  do_init_module+0x5f/0x209
[  +0.000002]  load_module+0x196a/0x1d70
[  +0.000002]  ? ima_post_read_file+0x7d/0xa0
[  +0.000003]  SYSC_finit_module+0xe5/0x120
[  +0.000001]  ? SYSC_finit_module+0xe5/0x120
[  +0.000002]  SyS_finit_module+0xe/0x10
[  +0.000003]  entry_SYSCALL_64_fastpath+0x24/0xab
[  +0.000001] RIP: 0033:0x7f82e75384d9
[  +0.000001] RSP: 002b:00007ffc8c368c08 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
[  +0.000001] RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 00007f82e75384d9
[  +0.000001] RDX: 0000000000000000 RSI: 000055cbf8d6626b RDI: 0000000000000001
[  +0.000000] RBP: 00007ffc8c367c10 R08: 0000000000000000 R09: 0000000000000000
[  +0.000001] R10: 0000000000000001 R11: 0000000000000246 R12: 000055cbf914aad0
[  +0.000001] R13: 00007ffc8c367bf0 R14: 0000000000000005 R15: 0000000000040000
[  +0.000001] Code: 00 00 e8 9d b9 25 dd eb ab 48 89 df be 24 00 00 00 c6 05 69 f1 01 00 01 e8 67 eb fe ff 48 c7 c7 c8 ce 8c c0 89 c6 e8 5a 47 a3 dc <0f> ff eb c1 0f 1f 44 00 00 0f 1f 44 00 00 55 49 c7 c0 08 cf 8c 
[  +0.000024] ---[ end trace a5e22ad3df2362ea ]---
[  +1.001198] iwlwifi 0000:06:00.0: Could not load the [0] uCode section
[  +0.000007] iwlwifi 0000:06:00.0: Failed to start INIT ucode: -5
[  +1.965039] iwlwifi 0000:06:00.0: Failed to run INIT ucode: -5

结论/问题

我猜这一切的可能原因是驱动程序错误。但我不明白为什么这种情况只发生在某些网络上,而不发生在其他网络上。

此外,考虑到重新启动笔记本电脑至少暂时解决问题,有没有办法模拟重启过程中驱动程序发生的情况,以便能够做到这一点没有重启本身

更多硬件详细信息

网络适​​配器型号详细信息如下lspci -k | grep -A3 Network

06:00.0 Network controller: Intel Corporation Wireless 7260 (rev 6b)
    Subsystem: Intel Corporation Dual Band Wireless-AC 7260
    Kernel driver in use: iwlwifi
    Kernel modules: iwlwifi

该设备是戴尔 Precision M3800 笔记本电脑,运行 ubuntu 16.04 64 位。

 其他相关信息

  1. 据我所知,没有其他设备在连接时会出现同样的问题,同样的设备大多在其他任何 wifi 网络上均未出现此问题。有时会发生这种情况,但这种情况很少见,通常只需重置连接即可轻松解决。这似乎意味着问题一定出在这个特定设备与这个特定网络的组合上,这就是它如此令人厌恶的原因。

  2. 我以前在这个设备上安装过 Windows 10,也出现了同样的问题。这可以说是最糟糕的情况,因为如果我在 wifi 不工作的情况下尝试重新启动,笔记本电脑通常会在重新启动期间挂起并最终出现 BSOD。在我尝试安装不同的网络适配器驱动程序后,这种情况不太常见,但为了再次打开界面,我仍然必须通过控制面板多次执行一个奇怪的禁用和重新启用网络适配器的过程。

 提出此问题的其他帖子

  • 无法通过 systemd-networkd 设置 wifiarchlinux 论坛)。与我的情况并不完全相关,因为那里的 OP 使用的是systemd-networkd。尝试通过 启动接口时会显示该消息ip link set wlp2s0f0 up。OP 声称已通过更正错误的wpa_supplicant配置文件解决了该问题,但我不知道这是否适用于当前情况。

  • [已解决] 无线连接问题archlinux 论坛)。尝试使用 启动接口时再次出现错误消息ip link set wlp2s0 up。原因似乎是同时运行的NetworkManagerdhcpcd之间发生冲突。OP 声称已dhcpcd通过禁用 解决了该问题systemctl。可能不适用于此处。

  • Wifi 无法使用 RTNETLINK 回答:输入/输出错误archlinux 论坛)。可能和上面的问题一样,但是楼主放弃了这个帖子。

  • [已解决] RTNETLINK 回答:输入/输出错误archlinux 论坛)。 给出错误ip link set wlo1 up。 未找到解决方案。

  • wifi 无法使用,并显示各种错误消息 [关闭]问库本图)。给出的错误ip link set wlo1up。帖子关闭,不清楚。

  • 无线网络无故断开并停止工作ubuntu论坛)。建议的解决方案是使用sudo sed -i 's/wifi.powersave = 3/wifi.powersave = 2/' /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf禁用网络管理器启用无线电源管理。OP 从未回复帖子说这对他是否有效,但这对我来说不起作用。

  • 还可以找到其他一些帖子,尤其是在Arch Linux 论坛以及问库本图

答案1

我发现这一系列错误报告与同一类问题有关:错误启动板bugzilla.kernel.org 1bugzilla.kernel.org 2bugzilla.kernel.org 3

在上面第一个链接中引用 Emmanuel Grumbach (egrumbach) 的话:

这是电气问题。我无能为力

所以这似乎是由于物理卡中的错误/故障而引起的问题。

答案2

我在配备英特尔迅驰 Wireless-N 2200(rev c4)wifi 卡的联想 X230 上遇到了同样的输入/输出问题,该电脑运行 Linux 6.2.14 作为 Guix 系统安装的一部分。

在尝试卸载/重新加载模块以及停止/重新启动服务后,我在 dmesg 中看到了 uCode 错误。搜索此错误消息让我找到了以下链接: https://unix.stackexchange.com/questions/555784/iwlwifi-failed-to-run-init-ucode-5

按照这个 [0] 答案的建议,手动移除并重新扫描无线设备,让我无需重启机器即可重置我的 wifi 连接。

[0]https://unix.stackexchange.com/a/555785/590643

相关内容