使用 modinfo 获取 Linux 内核模块信息

每次启动 Linux 系统时,系统都会加载大量内核模块,用于为文件系统、新硬件等提供另外支持。
获取有关特定内核模块的信息可能是一项重要的故障排除技巧。
在本文中,我们将解释如何使用 modinfo命令获取模块信息,例如描述、依赖关系、作者或者相关目标文件名。

默认情况下,任何可加载的内核模块都安装在 /lib/modules目录中。
对于每个特定内核,创建一个单独的目录以包含要与该特定内核一起使用的模块:

# ls /lib/modules/
3.14.5-200.fc20.x86_64  3.14.6-200.fc20.x86_64  3.14.8-200.fc20.x86_64

从上面的例子我们可以看到这个特定的系统安装了三个内核。
在任何给定时间只能运行一个内核:

# uname -a
Linux localhost.localdomain 3.14.8-200.fc20.x86_64 #1 SMP Mon Jun 16 21:57:53 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

上面的 uname命令输出显示 3.14.8-200.fc20是当前系统的运行内核,因此从 /lib/modules/3.14.8-200.fc20.x86_64/目录加载的模块正在使用中.要列出所有当前加载的内核模块,我们可以使用 lsmod命令:

$ lsmod
...
e1000e                258512  0 
ghash_clmulni_intel    13216  0 
i2c_algo_bit           13257  1 i915
drm_kms_helper         50652  1 i915
drm                   283747  4 i915,drm_kms_helper
ptp                    18725  1 e1000e
pps_core               19130  1 ptp
...

从这里我们可以使用 modinfo命令dig有关任何特定模块的模式信息。
首先,我们可以得到通用的模块描述:

$ modinfo -d e1000e
Intel(R) PRO/1000 Network Driver

这个特定模块的实际目标文件位置是什么:

$ modinfo -n e1000e
/lib/modules/3.14.8-200.fc20.x86_64/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko

要查看任何给定的已安装 Linux 内核的目标文件位置,可以使用“-k”开关。

$ modinfo -k 3.14.5-200.fc20.x86_64 -n e1000e
/lib/modules/3.14.5-200.fc20.x86_64/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko

作者的相关资料:

$ modinfo -a e1000e
Intel Corporation,

或者要查找模块的依赖信息,我们可以使用 -F开关:

$ modinfo -F depends e1000e 
ptp

不带参数执行 modinfo将导致 modinfo命令打印所有可用信息。

日期:2020-07-07 20:57:04 来源:oir作者:oir