封尘网

让学习成为一种习惯!

笔记本中ubuntu通过重载设备解决无线网络连接问题

在笔记本中使用了ubuntu 20.04系统已经快三年了,最近总有不少更新,甚至是新版本22.10的推送更新,但是一直没有去升级。而最近一段时间偶尔会遇到电脑开机后找不到无线网卡。由于我笔记本没有接网线的,一直使用无线网卡工作。但这个问题在系统启动日志中没有找到异常记录,只需要重启一下电脑又恢复正常了。

 

虽然重启电脑只是一分钟不到的时间(电脑重启能解决80%左右的问题),但是如果能不重启就能解决的话,那就更好啦,今天记录一下问题的解决思路及过程。

 

发现问题

笔记本电脑开机后进入到ubuntu系统中发现没有了网络,右上解的WIFI图标都找不到。在设置里也看不到无线网络。

通过命令检查,发现只有三个网络接口,没有WIFI网卡

swper@15IKBN:~/Desktop$ ip link show |grep state
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
2: enp4s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default 

 

通过lspci找到该设备所加载的驱动模块,直接过滤出Network段信息

swper@15IKBN:~/Desktop$ lspci -vvnn|grep -A 9 Network
03:00.0 Network controller [0280]: Qualcomm Atheros QCA9377 802.11ac Wireless Network Adapter [168c:0042] (rev 31)
	Subsystem: Lenovo QCA9377 802.11ac Wireless Network Adapter [17aa:0901]
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 137
	Region 0: Memory at a4000000 (64-bit, non-prefetchable) [size=2M]
	Capabilities: <access denied>
	Kernel driver in use: ath10k_pci
	Kernel modules: ath10k_pci        #这个就是无线网卡在内核加载时的名称了

 

解决方法

卸载目前加载的模块

sudo rmmod ath10k_pci 

 

卸载后就看不到Kernel driver in use: ath10k_pci这一行了

swper@15IKBN:~/Desktop$ lspci -vvnn|grep -A 9 Network
03:00.0 Network controller [0280]: Qualcomm Atheros QCA9377 802.11ac Wireless Network Adapter [168c:0042] (rev 31)
	Subsystem: Lenovo QCA9377 802.11ac Wireless Network Adapter [17aa:0901]
	Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Interrupt: pin A routed to IRQ 18
	Region 0: Memory at a4000000 (64-bit, non-prefetchable) [size=2M]
	Capabilities: <access denied>
	Kernel modules: ath10k_pci

04:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 10)
	Subsystem: Lenovo RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [17aa:3884]

 

重新载入模块,重新加载模块后网卡又可以正常使用了

sudo modprobe ath10k_pci  #执行完后等待几秒就可以正常上网了

 

检查效果

可以看到已经出现了wlp3s0网卡信息了,右上角的WIFI图标也正常了。

swper@15IKBN:~/Desktop$ ip link show |grep state
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
2: enp4s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default 
5: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000

 

之前发现用不了,就是立刻重启,心里总感觉不舒服,为什么一个网络会不正常的。然后就想到上次遇到的声卡问题,所以就跟着操作发现,原来可以这样就能修复问题了。

 

最后为了方便,可以把上面命令写入到shell脚本中,发现网络也是这样的问题时就直接执行一下即可。

 

swper@15IKBN:~/Desktop$ cat reload_network.sh 

#!/usr/bin/env bash
#remove network pci

sudo rmmod ath10k_pci
sleep 2

#reload network pci 
sudo modprobe ath10k_pci