如何手动创建 Linux 内核模块依赖项?
例如,在某个时间点,模块 vboxdrv 会自动加载。但是,当发生这种情况时,我也想自动加载模块 vfat (仅作为示例)。
因此,如何创建依赖关系,当模块 1 加载时,它会触发模块 2 的自动加载?
我不需要在启动时使用 initramfs 加载模块,我只是想要 - 这么说 - 这种依赖关系,当 1 被加载时,2 也会被加载。你知道我的意思 ;-)
谢谢
答案1
/etc/modprobe.d/vboxdrv-includes-vfat.conf
您可以使用“软依赖”命令添加配置文件:
softdep vboxdrv post: vfat
手册页modprobe.d(5)记录语法:
softdep 模块名称 前:模块... 后:模块...
softdep 命令允许您指定软的或可选的模块依赖项。 modulename 可以在没有安装这些可选模块的情况下使用,但通常会缺少一些功能。例如,存储 HBA 的驱动程序可能需要加载另一个模块才能使用管理功能。
pre-deps 和 post-deps 模块是 modprobe 将尝试按 modulename 参数中给出的主模块之前和之后的顺序安装(或删除)的其他模块的名称和/或别名的列表
或者,如果softdep
未按预期工作(例如,如果 modprobe 太旧而无法理解软依赖项),您可以在同一目录中的文件中使用安装命令来编写模块插入脚本:
安装模块名称命令...
此命令指示 modprobe 运行您的命令,而不是像平常一样将模块插入内核中。该命令可以是任何 shell 命令:这允许您执行您可能希望的任何类型的复杂处理。例如,如果模块“fred”与已安装的模块“barney”配合得更好(但它不依赖于它,因此 modprobe 不会自动加载它),您可以说“install fred /sbin/modprobe barney” ; /sbin/modprobe --ignore-install fred",这将执行您想要的操作。请注意 --ignore-install,它会阻止第二个 modprobe 再次运行相同的安装命令。另请参阅下面的删除。
该命令作为提供附加模块依赖项问题的解决方案的长期前景并不确定,并且旨在用有关其最终删除或在未来版本中的某个时刻弃用的警告来替换该命令
答案2
您可以附加一行定义这样的依赖关系modules.dep
echo "${module1}: ${module2}" >> "/lib/modules/$(uname -r)/modules.dep"
(注意:稍后运行depmod
可能会破坏您的更改,并且您必须重新申请)
参考: