我在暂停 ubuntu 18.10 时遇到了一些问题。'systemctl suspend' 似乎挂起了等待网络,而没有达到调用 '/lib/systemd/system-sleep' 中的可执行文件的状态。
我尝试在挂起笔记本之前删除 ath10k_pci 模块。因此,我在 '/lib/systemd/system-sleep' 中添加了一个 'ath10k.sh' 脚本:
#!/bin/bash
if [ "${1}" == "pre" ]; then
touch /tmp/start_rm_ath10k
modprobe -fr ath10k_pci
touch /tmp/end_rm_ath10k
fi
使用“pre”选项在控制台上调用此脚本会删除 ath10k_pci 模块并触及“/tmp”/ 中的两个文件(如预期)。此操作完美无缺,系统在没有网络的情况下仍可继续正常工作。
现在,如果我启动“systemctl suspend”,屏幕会立即关闭,但“ath10k.sh”将不会执行,而且对我来说,笔记本似乎没有被暂停。
之后,当我查看笔记本时,我注意到负载平均值不断上升。此外,“ps -e v”列出了几个处于“D”状态的进程:
- [kworker/3:1+events_freezable]
- [kworker/u8:2+events_unbound]
- /sbin/wpa_supplicant -u -s -O /运行/wpa_supplicant
- /usr/sbin/cups-浏览
- iw dev wlp2s0 设置 power_save 关闭
- ip 路由显示默认
‘dmesg’显示:
ath10k_pci 0000:02:00.0: firmware crashed!
ath10k_pci 0000:02:00.0: failed to delete WMI vdev 1: -108
如果我使用 pm-utils,并且我在“/etc/pm/sleep.d”中放置相应的脚本以在挂起之前删除 ath10k_pci 模块,则“pm-suspend”可以完美运行。
我还注意到“pm-suspend”首先执行“/etc/pm/sleep.d”中的脚本,然后关闭屏幕,而“systemctl suspend”会立即使屏幕变黑,然后似乎挂在那里 - 我不确定这是否是一个暗示......
我猜测 systemcl 在调用“/lib/systemd/system-sleep”中的任何可执行文件之前会调用其他东西,这样做会导致 ath10k 固件意外崩溃,然后我的脚本才能删除 ath10k_pci 模块以避免这次崩溃。
因此,我需要一些帮助,我的问题是:我该怎么做才能确保在“systemctl suspend”启动链中的其他内容之前删除 ath10k_pci 模块?如果“modprobe -fr ath10k_pci”是挂起或休眠时执行的第一件事之一,那就太好了。
答案1
这是一个不同的答案,其中包含针对我的 ath10k_pci 驱动程序的解决方案,因为我没有让 systemd 睡眠/恢复功能正常工作。
就我的情况而言(Ubuntu 18.04.3,qca6174 hw2.1 固件),经过两天的折腾,我终于能够使用较旧的固件 qca6174 版本解决问题。
我无法在自动挂起之前卸载 ath10k_pci 模块,无法通过 systemd 单元或使用 /lib/systemd/system/system-sleep 中的脚本。
挂起内存总是会导致我的系统在进入睡眠状态之前冻结。
安装最新的 qca6174 固件也无济于事。
有帮助的是 2016 年的旧固件版本!现在我安装了 qca6174 hw2.1 版本 141,尽管我的笔记本运行的是内核 5 的 18.04.3。
我从这里得到了这个提示:https://askubuntu.com/a/978385/1004167所以我从那里获得了固件:https://launchpad.net/ubuntu/xenial/amd64/linux-firmware/1.157并将 ath10k_pci/QCA6174/hw2.1 文件(我的卡正在使用)复制到我的 /lib/firmware/ath10k/QCA6174/hw2.1 文件夹中。
重新启动后,我不需要先卸载驱动程序再挂起(删除了我的脚本)。
对我来说,现在进入睡眠和恢复功能已经可以正常工作,就像从 16.04 升级之前一样。我现在唯一需要了解的是,如何防止复制的文件被升级覆盖。
希望这对某人有帮助:-)