2010-11-01 30 views
1

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

让我澄清一下我的问题。

我所试图做的事:

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

这是第2步失败,因为在使用modprobe -r之前无法获取所有模块相关性。

任何意见,建议或意见?

回答

4

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

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

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

2

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

编辑: 又见:depmod -n

+0

我知道lsmod的。但是lsmod o/p有时不完整。它也并不总是指示所有依赖于给定模块的模块。 – abc 2010-11-01 21:27:45

2

要获得模块依赖关系的列表,将被modprobe使用(即它通常应该是完整的清单,但看到user502515答案),使用

$ modprobe --show-depends <module> 

注意,这个命令可以显示更多信息比modinfodepends:行,因为它递归地列出了依赖关系(即依赖关系的依赖关系)。 它还考虑到modprobe配置文件中的alias命令。

使用测试:

$ modprobe -V 
kmod version 14 
相关问题