Linux内核参数中modprobe.blacklist和rd.driver.blacklist的区别

Differences between modprobe.blacklist and rd.driver.blacklist in Linux kernel parameters

上下文

我主要看到了三种通过向内核附加参数将 driver 模块列入黑名单的方法:(i) modprobe.blacklist=driver_name, (ii) rd.driver.blacklist=driver_name(iii) 最后两个。这通常是通过将这些参数附加到 /etc/default/grub 处的 GRUB_CMDLINE_LINUX 变量来完成的。

在实践中,我无法找出它们之间的真正区别。但我想它也可能会随着你的环境而改变。有疑问,我一直在同时使用它们,并且它适用于我的 Fedora 31。

我的研究

rd.driver.blacklist

man dracut.cmdline

rd.driver.blacklist=<drivername>[,<drivername>,...]
           do not load kernel module <drivername>. This parameter can be
           specified multiple times.

modprobe.blacklist

man modprobe

(...). modprobe will also use module options specified on the kernel command line in the form of <module>.<option> and blacklists in the form of modprobe.blacklist=<module>.

问题总结

那么,Linux中driver的黑名单modprobe.blacklistrd.driver.blacklist有什么区别?我应该什么时候使用它们?

rd.driver.blacklist 是内核命令行的配置选项,当内核从 Linux 引导映像( initramfs 加载时应用).在这里,您将调用从初始文件系统映像加载的某些内核模块。

稍后,在根文件系统联机后,即已挂载并且操作系统正在加载可加载模块...您可以使用 modprobe.blacklist 来影响 loadable[= 的处理46=] 模块。 modprobe 实际上读取内核命令行,以查找影响可加载模块的参数。因此,虽然这个参数看起来适用于 Linux 内核的加载,但实际上并非如此。 modprobe 找到它并使用 modprobe.blacklist 以及其他可加载模块参数。

所以是使用ramdisk选项,还是modprobe选项...取决于相关驱动程序是否驻留在引导映像(由 dracut 放在那里),或驻留在 OS 的根文件系统中(由 modprobe 处理)。

参考资料

dracut 053
搜索 rd.driver.blacklist

SUSE Linux Enterprise Desktop 文档/管理指南/系统/Managing Kernel Modules
转到:23.2.2 使用 modprobe

将内核模块列入黑名单

红帽客户门户网站/产品和服务/知识库/How do I prevent a kernel module from loading automatically?
前往:
Red Hat Enterprise 的完成步骤 Linux 仅限 8
仅适用于 Red Hat Enterprise Linux 7 的完成步骤