如果内核模块失败,如何自动重新加载内核模块?
我的笔记本上有 Wi-Fi Qualcom 网卡,但有时无法加载。我编写了一个简单的脚本fixwifi
,我称之为 ,它基本上删除、等待,然后再次加载模块:
#!/bin/bash
sudo modprobe -r ath10k_pci
sleep 1
sudo modprobe ath10k_pci
有问题的模块有时会在启动时失败,有时会在从睡眠状态唤醒时失败,并将以下内容打印到日志中(来自 的输出dmesg
):
[ 40.336212] ath10k_pci 0000:07:00.0: wmi service ready event not received
[ 40.426511] ath10k_pci 0000:07:00.0: Could not init core: -110
目前,每当我看到模块失败时,我都会打开终端并执行fixwifi
...但这是体力劳动,我认为可以自动化。
有没有某种方法可以自动化这个过程(或者,上帝,修复它?!)?我正在考虑编写一个 systemd 单元,但是如何获得有关模块失败的通知?我是否经常轮询或查看系统日志?
系统:带有 systemd 的 Ubuntu 22.04。
摘自lshw
:
*-network
description: Wireless interface
product: QCA9377 802.11ac Wireless Network Adapter
vendor: Qualcomm Atheros
physical id: 0
bus info: pci@0000:07:00.0
logical name: wlp7s0
version: 31
serial: ...
width: 64 bits
clock: 33MHz
capabilities: bus_master cap_list ethernet physical wireless
configuration: broadcast=yes driver=ath10k_pci driverversion=5.15.0-52-generic firmware=WLAN.TF.2.1-00021-QCARMSWP-1 ip=... latency=0 link=yes multicast=yes wireless=IEEE 802.11
resources: irq:145 memory:a4000000-a41fffff