modprobe.d 黑名单到底是如何工作的?

modprobe.d 黑名单到底是如何工作的?

问题

我有冲突的驱动程序:xpad这是 Arch 的标准配置,并且xone我安装的尿素尿率。两者都声称支持我的 Xbox One 无线控制器,尽管只有xone驱动程序知道如何使用它。

$ modprobe -R usb:v045Ep02F9d0114dcFFdscFFdpFFicFFisc5Dip01in00
xpad
xone_dongle

AFAIU,罪魁祸首是驱动程序alias: usb:v045Ep*d*dc*dsc*dp*icFFisc5Dip01in*中的xpad包容性太强。

我只想要xone_dongle上面的模式的加载。但我不想xpad完全禁用驱动程序,因为我还使用有线 Xbox 360 控制器usb:v045Ep028Ed0114dcFFdscFFdpFFicFFisc5Dip01in00,我仍然希望由 来处理它xpad。我不需要它们同时工作,但至少如果我在干净启动后插入其中一个,则任何一个都可以工作。

尝试的解决方案

手册页的modprobe.d状态:

关键字blacklist表示该特定模块的所有内部别名都将被忽略。

听起来如果我将其列入黑名单xpad然后为其定义自己的别名,它应该按照我想要的方式工作:

/etc/modprobe.d/gamepad.conf

blacklist xpad
alias usb:v045Ep028Ed0114dcFFdscFFdpFFicFFisc5Dip01in00 xpad

但相反,它完全阻止xpad驱动程序加载,即使别名是正确的。

另外,即使我已xpad在配置中列入黑名单,modprobe -R仍然可以找到无线适配器的模式。

无结论

有人可以解释一下这实际上是如何运作的吗?有错误吗modprobemodprobe.d文档不完整吗?哪些方面modprobe应该受到modprobe.d配置的影响,哪些方面不应该受到影响?

答案1

如何modprobe工作?modprobe使用其加载和卸载 Linux 模块依赖关系自动从任何路径。接下来是-v选项(详细程度),您可以看到它modprobe到底做了什么。

在您的情况下,您必须卸载 Linux 模块,modprobe -rv module然后必须使用该insmod命令加载所需的模块而不需要其依赖项。

与 不同modprobeinsmod不会检查和加载任何依赖项(如果存在)。

要加载 Linux 模块,您必须设置内核模块的路径:

sudo insmod /path/to/kernel_module.ko

相关内容