[已解决] 请问下如何正确的屏蔽掉不用的硬件设备?

我装好系统后有两个音频设备,其中一个是显卡自带的 HDMI 输出。另外一块是创新的独立声卡。
我首先用 cat /proc/asound/modules 得到的结果是:

0 snd_hda_intel
1 snd_hda_intel

两个的名字是一样的,这样 的话使用 echo “blacklist snd_hda_intel” >> /etc/modprobe.d/50-blacklist.conf 就会把他全部屏蔽掉 。
使用 lspci 显示的的是这样

01:00.1 Audio device: NVIDIA Corporation GF110 High Definition Audio Controller (rev a1)
03:00.0 Audio device: Creative Labs Device 0012 (rev 01)

我试过吧 NVIDIA Corporation GF110 High Definition Audio Controller 这个填进去没用
请问这种情况要如何屏蔽其中一块设备呢?

这个… 我的建议是不理会它, 台式机的话看看 bios 可以禁用不?

那个是独立显卡上的 不关 bios 的事。。

lsmod

这个命令是列出当前已经装载的内核模块。这里面你的声卡模块也是一样的吗?

1 个赞

感谢 LS 帮助
lsmod 输出这样的:

snd_hda_codec_ca0132    40230  1 
snd_hda_intel          48171  4 
snd_hda_codec         205080  2 snd_hda_codec_ca0132,snd_hda_intel
snd_hwdep              13602  1 snd_hda_codec
snd_pcm               110211  2 snd_hda_intel,snd_hda_codec
x86_pkg_temp_thermal    14162  0                                                                                
snd_seq                69752  0                                                                                 
snd_timer              29423  2 snd_pcm,snd_seq                                                                 
snd_seq_device         14497  1 snd_seq                                                                         
nvidia              10417418  29                                                                                
intel_powerclamp       14705  0                                                                                 
coretemp               13435  0                                                                                 
kvm_intel             142707  0                                                                                 
kvm                   469295  1 kvm_intel                                                                       
snd                    87417  16 snd_hda_codec_ca0132,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm,snd_seq,snd_timer,snd_seq_device                                                                                                                                        

本来还有个 snd_hda_codec_hdmi , 我把它 blacklist 了,重启动后那个 nv 的 hdmi 声卡还在,接下来我就不知道该屏蔽哪个模块了。。。

lspci

开头有设备 slot 号,你的应该是 01:00.1
在 /sys 里找到对应的文件夹,比如

find /sys/devices -name *01:00.1

文件夹里有个 remove 文件,往里面写入非 0 值就能从内核列表里删掉这个 pci 设备,重启会恢复。
可以把

echo 1 > /sys/devices/pci0000:00/0000:01:00.1/remove

这样的命令写到 /etc/init.d/boot.local 里面。
参考: kernel.org/doc/Documentation/filesystems/sysfs-pci.txt

1 个赞

snd_hda_codec_ca0132 对应到你的创新声卡吧, snd_hda_intel 应该是 snd_hda_codec_ca0132 的依赖,snd_hda_codec_ca0132 后面第 3 列就是它依赖的模块的个数,第 4 列是依赖模块的详情,你这里没有列出来。
我看了我的台式机,是集成 realtek 声卡的,不过也有一个 snd_hda_intel 的。
我认为你已经把你显卡自带的声卡屏蔽了呀,snd_hda_codec_hdmi 就是这个吧,你是如何判断你的 nv 的 hdmi 声卡还在的?是还能发出声音?

右下角的音量图标里还是有两个声卡 可以选 ,一个 creative hda , 一个 nvidia xxxx hdmi ,yast 的音频设置里面那个 nvidia 也还在

你试试 @limon 的方法呢,我感觉他的思路更对些。

也可以参考这篇文章:
6by9.net/using-linux-sys-to-disable-ethernet-hardware-devices/

1 个赞

非常感谢 @bruce.oy@limon 的帮助,因为内核文档那篇看得不太懂,结合下面那篇文章就明白了·~~
谢谢~