如何在运行时获取内核模块的完整依赖项列表

时间:2010-11-01 21:20:34

标签: linux kernel-module

有没有办法从命令行列出运行时在内核中加载的内核模块的完整依赖项列表?

让我稍微澄清一下我的问题。

我想做什么:

  1. 我使用lsmod
  2. 获取所有已加载模块的列表
  3. 然后通过运行循环删除/卸载当前加载的内核模块。我正在使用modprobe -r。当某些模块正在使用时,此步骤(显然)失败。 (我可以切换到使用rmmod -r,但不想因为它不安全而导致系统崩溃。)
  4. 然后我想再一次加载模块。
  5. 步骤2失败,因为在使用modprobe -r之前我无法获得所有模块依赖项。

    有任何想法,建议或意见吗?

3 个答案:

答案 0 :(得分:4)

  

然而lsmod o / p有时不完整。它也并不总是表明所有模块都依赖于给定的模块。

您在“使用者”列中的lsmod中看到的仅仅是您可以使用modinfo查看的静态符号依赖项。

但是,如果一段内核代码使用(try_)module_get对模块进行引用,则不会记录调用者。引用没有所有者(moduleA可以将指针传递给moduleB,然后module_put它...),没有任何内容可以记录Used by列。

答案 1 :(得分:2)

man lsmod:lsmod是一个简单的程序,可以很好地格式化/ proc / modules的内容,显示当前加载的内核模块。

编辑: 另见:depmod -n

答案 2 :(得分:2)

要获取modprobe将使用的模块依赖关系列表(即通常应该是完整列表,但请参阅user502515的答案),请使用

$ modprobe --show-depends <module>

请注意,此命令显示的信息多于modinfo的{​​{1}}行,因为它会以递归方式列出依赖关系(即依赖关系的依赖关系)。 它还考虑了modprobe配置文件中的depends:命令。

使用:

进行测试
alias