麒麟系统禁用声卡驱动
一、无法卸载的原因?
- 模块被依赖:其他模块(如
snd_ac97_codec
)依赖snd_ens1371
,需先卸载依赖模块。 - 进程占用:ALSA、PulseAudio 或其他服务正在使用该模块。
- 内核锁定:模块可能被标记为不可卸载(如驱动内嵌到内核功能中)。
二、分步解决方案
1. 停止所有音频相关服务
# 结束 PulseAudio 进程
pulseaudio -k
# 停止 ALSA 服务(部分系统适用)
sudo systemctl stop alsa-state.service
# 确保没有用户进程占用
sudo pkill -9 pulseaudio
sudo pkill -9 alsa
2. 按顺序卸载依赖模块
从 lsmod
输出可知,依赖关系为:
snd_ens1371 ← snd_ac97_codec ← ac97_bus
snd_ens1371 ← snd_rawmidi
snd_ens1371 ← gameport
需按逆序卸载:
sudo modprobe -r snd_rawmidi gameport snd_ac97_codec ac97_bus
sudo modprobe -r snd_ens1371
3. 强制终止占用进程(如果仍失败)
# 查找占用声卡设备的进程
sudo fuser -v /dev/snd/*
# 终止相关进程(替换 <PID> 为实际进程号)
sudo kill -9 <PID>
# 重新尝试卸载
sudo modprobe -r snd_ens1371
4. 使用 rmmod -f
强制卸载(慎用)
sudo rmmod -f snd_ens1371
注意:此操作可能导致内核不稳定,仅限临时调试!
三、永久禁用驱动
1. 将模块加入黑名单
sudo nano /etc/modprobe.d/blacklist-snd-ens1371.conf
添加以下内容:
blacklist snd_ens1371
blacklist snd_ac97_codec
blacklist snd_rawmidi
blacklist gameport
保存后更新 initramfs:
sudo update-initramfs -u
2. 禁用自动加载(可选)
创建配置文件:
sudo nano /etc/modprobe.d/disable-snd-ens1371.conf
添加:
install snd_ens1371 /bin/false
install snd_ac97_codec /bin/false
可以是上面的自定义文件禁用驱动,可以直接使用下面的方式:
3. 重启系统
sudo reboot
四、验证是否生效
-
重启后检查模块状态:
lsmod | grep snd
如果无
snd_ens1371
及其相关模块,表示禁用成功。 -
检查声卡是否被识别:
aplay -l
如果无输出,说明声卡已被禁用。
五、恢复驱动(如果需要)
- 删除黑名单文件:
sudo rm /etc/modprobe.d/blacklist-snd-ens1371.conf sudo rm /etc/modprobe.d/disable-snd-ens1371.conf
- 更新 initramfs:
sudo update-initramfs -u
- 重启系统:
sudo reboot
六、替代方案:禁用设备
如果驱动无法卸载,可通过 udev
规则禁用设备:
sudo nano /etc/udev/rules.d/99-disable-ens1371.rules
添加以下内容(根据 lspci -nn
的设备 ID 修改):
ACTION=="add", SUBSYSTEM=="sound", ATTR{id}=="ENS1371", ENV{ID_MM_DEVICE_IGNORE}="1"
保存后重启系统。
总结
- 优先通过
modprobe -r
按依赖顺序卸载。 - 黑名单 + 禁用自动加载 是永久禁用驱动的最佳方案。
- 强制卸载 (
rmmod -f
) 可能导致系统异常,仅在调试时使用。
如果问题仍未解决,请提供 dmesg | grep snd
输出进一步分析。
迷茫的人生,需要不断努力,才能看清远方模糊的志向!