引导时跳过内核模块


Answers:


1

如上一个答案中所述,将模块列入黑名单是完全避免使用内核模块的最佳方法。除了列入黑名单,没有禁用该模块的通用方法。

一些Linux发行版确实提供了内核启动参数来执行此类操作。

  • 在Arch Linux中load_modules=off强制udev跳过自动加载。这样一来,您就可以在不加载模块的情况下启动,将导致问题的模块列入黑名单,以及在不加载问题模块的情况下正常重启。
  • Knoppix有一长串额外的启动参数(又称“作弊码”);这些是普通的内核启动参数和特定于Knoppix的其他参数的组合。

有关更多信息,请参见内核参数文档。有用于禁用特定子系统的参数。例如:

  • nousb 禁用内核USB支持
  • cgroup_disable=[name]禁用特定的控制器;但是,“内存”是唯一受特别支持的示例
  • libata.noacpi禁用libata(SATA控制器)中的ACPI使用;这是通过内核传递模块参数的示例

7

禁用特定的模块可以从引导装载程序,不过貌似发行依赖性确实如此。

一方面,Linux内核参数文档指出,截至2016年8月:

module_blacklist= [KNL]不要加载以逗号分隔的模块列表。对于调试问题模块很有用。

另一方面,Arch Kernel模块 Wiki中介绍了适用于openSUSE 42.1(Linux 4.1.31)的选项  :

您也可以从引导加载程序中将模块列入黑名单。只需添加

modprobe.blacklist=modname1,modname2,modname3

到引导加载程序的内核行,如内核参数中所述。当您将多个模块列入黑名单时,请注意,它们之间仅用逗号分隔。空格或其他内容可能会破坏语法。

(感谢unix.SE上的  @gertvdijk指出了这一点。)

还值得一提的是以下方法

为了防止内核使用grub命令行加载某些模块,您需要使用以下语法将它们作为参数传递给内核行。

$module_name.blacklist=yes

我不知道他们从哪里得到的,但是如果其他方法都失败了,尝试任何其他方法肯定不会受到伤害。


我对“ $ module_name.blacklist = yes”为什么起作用有相同的问题,我认为它与内核代码的这一部分有关:git.kernel.org/pub/scm/linux/kernel/git/stable/linux- stable.git /…
Johnlcf

1

您应该可以将其添加到/etc/modprobe.d/blacklist或黑名单“ modulename”


这将起作用,但是需要引导到另一个内核(如果有)或LiveCD系统。
quack quixote 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.