麒麟系统禁用声卡驱动

一、无法卸载的原因?

  1. 模块被依赖:其他模块(如 snd_ac97_codec)依赖 snd_ens1371,需先卸载依赖模块。
  2. 进程占用:ALSA、PulseAudio 或其他服务正在使用该模块。
  3. 内核锁定:模块可能被标记为不可卸载(如驱动内嵌到内核功能中)。

二、分步解决方案

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

可以是上面的自定义文件禁用驱动,可以直接使用下面的方式:

image

3. 重启系统

sudo reboot

四、验证是否生效

  1. 重启后检查模块状态:

    lsmod | grep snd
    

    如果无 snd_ens1371 及其相关模块,表示禁用成功。

  2. 检查声卡是否被识别:

    aplay -l
    

    如果无输出,说明声卡已被禁用。
    image

image


五、恢复驱动(如果需要)

  1. 删除黑名单文件:
    sudo rm /etc/modprobe.d/blacklist-snd-ens1371.conf
    sudo rm /etc/modprobe.d/disable-snd-ens1371.conf
    
  2. 更新 initramfs:
    sudo update-initramfs -u
    
  3. 重启系统:
    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 输出进一步分析。

posted @ 2025-04-22 09:54  皇帽讲绿帽带法技巧  阅读(224)  评论(0)    收藏  举报