Wi-Fi 随机掉线

Wi-Fi 随机掉线

所以我的电脑在 Ubuntu 18.04 上运行,自从我安装了它以来,WiFi 随机下降,我无法重新启动它,因为它对 GUI 没有做任何事情,当我输入“服务网络管理器重新启动”时,它会循环并显示:“ iwlwifi 0000:02:00.0:无法运行 INIT ucode:-5”和“无法启动 RT ucode:-5”。我已经尝试从 Intel 网站为我的网卡(Intel 3160)安装驱动程序,但它没有改变任何东西。谢谢

这是 wifi 掉线后的 dmesg 输出。

    [ 1606.095583] CPU: 3 PID: 0 Comm: swapper/3 Not tainted 4.13.0-36-generic #40~16.04.1-Ubuntu

    [ 1606.095585] Hardware name: LENOVO 80M0/Mini, BIOS C0CN23WW 03/31/2015

    [ 1606.095589] task: ffff89bb7a44c200 task.stack: ffffa42fc06ac000

    [ 1606.095615] RIP: 0010:iwl_trans_pcie_grab_nic_access+0xe7/0xf0 [iwlwifi]

    [ 1606.095619] RSP: 0018:ffff89bb7fd83db8 EFLAGS: 00010086

    [ 1606.095624] RAX: 000000000000003d RBX: ffff89bb765d0018 RCX: 0000000000000000

    [ 1606.095628] RDX: 0000000000000000 RSI: 00000000000000f6 RDI: 0000000000000300

    [ 1606.095631] RBP: ffff89bb7fd83dd8 R08: 0000000000000001 R09: 000000000000032b

    [ 1606.095634] R10: 0000000000000007 R11: 000000000000032b R12: 0000000000000000

    [ 1606.095638] R13: ffff89bb765d8f20 R14: ffff89bb7fd83de8 R15: ffff89bb765d0018

    [ 1606.095643] FS:  0000000000000000(0000) GS:ffff89bb7fd80000(0000) knlGS:0000000000000000

    [ 1606.095646] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033

    [ 1606.095650] CR2: 00007fd4b6fc6000 CR3: 0000000018c0a000 CR4: 00000000001006e0

    [ 1606.095653] Call Trace:

    [ 1606.095658]  <IRQ>

    [ 1606.095683]  iwl_read_prph+0x38/0x90 [iwlwifi]

    [ 1606.095710]  iwl_trans_pcie_log_scd_error+0x126/0x1f0 [iwlwifi]

    [ 1606.095734]  ? iwl_pcie_txq_inc_wr_ptr+0xf0/0xf0 [iwlwifi]

    [ 1606.095758]  iwl_pcie_txq_stuck_timer+0x4b/0x70 [iwlwifi]

    [ 1606.095767]  call_timer_fn+0x37/0x140

    [ 1606.095773]  run_timer_softirq+0x1f1/0x460

    [ 1606.095780]  ? ktime_get+0x3e/0xa0

    [ 1606.095787]  ? lapic_next_deadline+0x26/0x30

    [ 1606.095794]  __do_softirq+0xf2/0x287

    [ 1606.095803]  irq_exit+0xb6/0xc0

    [ 1606.095809]  smp_trace_apic_timer_interrupt+0x74/0xa0

    [ 1606.095815]  smp_apic_timer_interrupt+0xe/0x10

    [ 1606.095820]  apic_timer_interrupt+0x1af/0x1c0

    [ 1606.095824]  </IRQ>

    [ 1606.095831] RIP: 0010:cpuidle_enter_state+0x135/0x2f0

    [ 1606.095835] RSP: 0018:ffffa42fc06afe68 EFLAGS: 00000246 ORIG_RAX: ffffffffffffff10

    [ 1606.095841] RAX: 0000000000000000 RBX: 0000000000000005 RCX: 000000000000001f

    [ 1606.095844] RDX: 0000000000000000 RSI: 000000003b19be84 RDI: 0000000000000000

    [ 1606.095848] RBP: ffffa42fc06afea0 R08: 000000000000742c R09: 0000000000000018

    [ 1606.095851] R10: ffffa42fc06afe38 R11: 00000000000019d4 R12: 0000000000000005

    [ 1606.095855] R13: ffff89bb7fdab020 R14: ffffffff95f7a218 R15: 00000175ec205011

    [ 1606.095864]  ? cpuidle_enter_state+0x123/0x2f0

    [ 1606.095871]  cpuidle_enter+0x17/0x20

    [ 1606.095877]  call_cpuidle+0x23/0x40

    [ 1606.095882]  do_idle+0x18c/0x1f0

    [ 1606.095888]  cpu_startup_entry+0x73/0x80

    [ 1606.095893]  start_secondary+0x193/0x1d0

    [ 1606.095900]  secondary_startup_64+0x9f/0xa0

    [ 1606.095905] Code: 00 00 e8 9d 59 c0 d4 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 2e 92 c0 89 c6 e8 5a e7 3d d4 <0f> ff eb c1 0f 1f 44 00 00 0f 1f 44 00 00 55 49 c7 c0 08 2f 92 

    [ 1606.096025] ---[ end trace f4a85b56dc9c8220 ]---

    [ 1606.195965] iwlwifi 0000:02:00.0: Queue 10 is active on fifo 2 and stuck for 10000 ms. SW [104, 110] HW [90, 90] FH TRB=0x05a5a5a5a

    [ 1608.000851] iwlwifi 0000:02:00.0: Failed to wake NIC for hcmd

    [ 1608.001110] iwlwifi 0000:02:00.0: Error sending ADD_STA: enqueue_hcmd failed: -5

    [ 1618.230154] iwlwifi 0000:02:00.0: Queue 5 is active on fifo 2 and stuck for 10000 ms. SW [13, 14] HW [90, 90] FH TRB=0x05a5a5a5a

答案1

这不使固定问题是 wifi 最终会再次崩溃——这个脚本所做的就是让你再次拥有 wifi,而不需要重新启动(另存为 fixwifi.sh 并以 sudo 运行):

#!/bin/sh

# If an interface name was not passed in then assume that wlan0 is the interface name.
if [ -z "$1" ]; then
    interface="wlan0"
else
    interface=$1
fi

# Figure out what pci slot Linux has assigned the Network controller: Intel Corporation Wireless 7260
wirelessPCI=$(lspci |grep "Wireless 7260")
pci=$(echo ${wirelessPCI} | awk '{ print $1 }')
devicePath="/sys/bus/pci/devices/0000:$pci/remove"

# Not the best solution as this script can hang. 
# But since if this script fails the ONLY way to revive the wifi anyway is a reboot...
# Feel free to improve the script if you have the scriptfu ninja skills to do so.
while true; do

    # Tell Linux to remove the wifi card from the PCI device list only if it exists in the first place.
    if [ -f $devicePath ]; then
        echo 1 | sudo tee $devicePath > /dev/null
        sleep 1
    fi

    # Reprobe the driver modules in case we have removed them in a failed attempt to wake the network card.
    sudo modprobe iwlmvm
    sudo modprobe iwlwifi

    # Try to have Linux bring the network card back online as a PCI device. 
    echo 1 | sudo tee /sys/bus/pci/rescan > /dev/null
    sleep 1

    # Check if Linux managed to bring the network card back online as a PCI device.
    if [ -f $devicePath ]; then

        # Looks like we are back in business. 
        # So we try to set the PCI slot with some voodoo I don't understand that the Intel devs told me to try.
        # https://bugzilla.kernel.org/show_bug.cgi?id=191601
        sudo setpci -s $pci 0x50.B=0x40

        # Bring the wireless network interface up.
        sudo ifconfig $interface up

        # Did the wifi interface actually go live?
        exitCode=$?
        if [ $exitCode -eq 0 ];then

            # Not sure why in the hell this is not the default for wireless intefaces.
            # It is well documented that: (power_management === ON) === Wifi-Stupidity
            sudo iwconfig $interface power off

            # The exit code will be the exit code of our attempt at turning power management off for $interface/wlan0.
            break
        fi
    else
        # It's worse than that the wifi's dead Jim! Dead Jim! Dead!
        # We tell Linux to remove the the wifi driver modules and loop back in an attempt to revive the wifi.
        sudo modprobe -r iwlmvm
        sudo modprobe -r iwlwifi
    fi
done

相关内容