在使用 systemd 方面,我是个菜鸟。我运行的是 Ubuntu 15.04,配有 Hauppauge 2250 电视调谐器。不幸的是,2250 的驱动程序/模块“saa7164”与暂停/恢复不兼容,因此恢复后直播电视将无法播放。因此,我使用以下文件来停止/恢复 tvheadend 和 saa7164:
sudo gedit /lib/systemd/system-sleep/50_tvheadend
其中包含以下脚本:
#!/bin/sh
case "$1" in
pre/*)
echo "Entering sleep..." > /tmp/sleep.log
echo "Entering sleep"
cat /proc/acpi/wakeup >> /tmp/sleep.log
service tvheadend stop
sleep 1
modprobe -r tveeprom
modprobe -r dvb_core
modprobe -r v4l2_common
modprobe -r videodev
modprobe -r saa7164
sleep 3
echo "After modprobe..." >> /tmp/sleep.log
cat /proc/acpi/wakeup >> /tmp/sleep.log
;;
post/*)
echo "Awaking from sleep..." >> /tmp/sleep.log
echo "Waking up"
modprobe saa7164
modprobe videodev
modprobe v4l2_common
modprobe dvb_core
modprobe tveeprom
sleep 3
echo "After modprobe..." >> /tmp/sleep.log
service tvheadend start
sleep 1
\cat /proc/acpi/wakeup >> /tmp/sleep.log
;;
esac
为了保险起见,我让每个人都可以执行这个文件:
sudo chmod 755 /lib/systemd/system-sleep/50_tvheadend
但这不起作用。所以我在终端中运行了启动和停止 tvheadend 的命令,成功了。但当我尝试在终端中使用“modprobe -r saa7164”停止 saa7164 驱动程序时,它出错了。所以我按照以下说明操作如何卸载正在使用的内核模块,但我的脚本尝试卸载“lsmod | grep saa7164”中列出的所有模块,但失败了。因此,我尝试在终端中运行以下命令:
htpc@htpc-desktop:~$ sudo modprobe -r saa7164
modprobe: FATAL: Module saa7164 is in use
htpc@htpc-desktop:~$ lsmod | grep saa7164
saa7164 131072 -1
tveeprom 24576 1 saa7164
dvb_core 126976 1 saa7164
v4l2_common 16384 1 saa7164
videodev 159744 2 saa7164,v4l2_common
htpc@htpc-desktop:~$ sudo modprobe -r tveeprom
modprobe: FATAL: Module tveeprom is in use.
htpc@htpc-desktop:~$ lsmod | grep tveeprom
tveeprom 24576 1 saa7164
如何卸载 saa7164 驱动程序/模块?
答案1
我认为在删除模块之前,您还需要停止任何使用该模块的程序。您没有运行 MythTV 吗?
答案2
您可以尝试通过停止正在使用该驱动程序的服务或在系统设置中禁用该驱动程序来卸载该驱动程序。为此,请尝试运行以下命令:
sudo rmmod saa7164
sudo rmmod tveeprom
如果上述命令失败,请尝试使用强制选项:
sudo rmmod -f saa7164
sudo rmmod -f tveeprom
如果上述命令也失败了,您可以尝试将驱动程序列入黑名单,以防止在启动时加载。您可以通过将以下几行添加到 /etc/modprobe.d/blacklist.conf 来实现此目的:
blacklist saa7164
blacklist tveeprom
保存并关闭文件,然后重新启动系统。驱动程序不应在启动时加载,您应该能够卸载它。