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

我装好系统后有两个音频设备,其中一个是显卡自带的 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 的帮助,因为内核文档那篇看得不太懂,结合下面那篇文章就明白了·~~
谢谢~