11

我的情况是,通过查询加载的模块或 .ko 文件来查找加载的内核模块的版本会非常方便。

有没有一种标准的方法可以在深入研究源代码的情况下做到这一点?

4

2 回答 2

9
$ apropos modinfo
modinfo              (8)  - display information about a kernel module
$ modinfo cpuid.ko
filename:       cpuid.ko
author:         H. Peter Anvin <hpa@zytor.com>
description:    x86 generic CPUID driver
license:        GPL
vermagic:       2.6.37 SMP preempt mod_unload PENTIUM4 gcc-4.4.5
depends:
于 2011-01-29T19:52:33.880 回答
4

运行时方法

insmod /module_version.ko

cat /sys/modules/module_version/version
# => 1.0

cat /sys/module/module_version/srcversion
# => AB0F06618BC3A36B687CDC5

modinfo /module_version.ko | grep -E '^(src|)version'
# => version:        1.0
# => srcversion:     AB0F06618BC3A36B687CDC5

在内核 4.9.6 上使用此设置进行测试。

/sys/modules/module_version/version

versionMODULE_VERSION宏设置。

MODULE_VERSION如果模块中未使用宏,则该文件不存在。

/sys/module/module_version/srcversion

srcversion是用于编译内核模块的源代码的MD4哈希。它是在构建时从https://github.com/torvalds/linux/blob/v4.9/scripts/mod/modpost.c#L1978使用https://github.com/torvalds/linux/blob/自动计算的v4.9/scripts/mod/sumversion.c#L400

要启用它,请执行以下任一操作:

srcversion文件仅在上述条件之一成立时才存在。

然后,您可以检查构建.ko的是否与 insmodded 匹配:

modinfo mymod.ko

当您开发自己的内核模块并在机器之间复制模块时,这是一个非常有用的完整性检查。

从内部模块代码本身与THIS_MODULE

可以使用THIS_MODULE->version,这里举个例子:Linux内核模块驱动中THIS_MODULE的意义是什么?

于 2017-03-02T13:17:23.287 回答