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

Ank*_*wal 3 linux kernel-module

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

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

我正在尝试做的事情:

  1. 我使用以下方法获取所有加载模块的列表 lsmod
  2. 然后通过运行循环删除/卸载当前加载的内核模块。我正在使用modprobe -r. 此步骤失败(显然),因为某些模块正在使用中。(我可以切换到 using rmmod -r,但不想这样做,因为它不安全并且会导致系统崩溃。)
  3. 然后我想再一次加载模块。

失败的是第 2 步,因为在使用modprobe -r.

任何想法、建议或意见?

use*_*515 5

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

您在 lsmod 的“Used by”列中看到的仅仅是静态符号依赖项,您也可以使用modinfo.

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


ack*_*ack 5

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

$ modprobe --show-depends <module>
Run Code Online (Sandbox Code Playgroud)

请注意,此命令显示的信息比modinfo'sdepends:行更多,因为它递归地列出依赖项(即依赖项的依赖项)。它还考虑了aliasmodprobe 配置文件中的命令。

测试使用:

$ modprobe -V
kmod version 14
Run Code Online (Sandbox Code Playgroud)