如何找到已编译内核模块的版本?

时间:2011-01-29 19:44:17

标签: linux kernel-module

通过查询加载的模块或.ko文件,我可以非常方便地找到加载的内核模块的版本。

有没有一种标准的方法来执行此操作而不用挖掘源代码?

2 个答案:

答案 0 :(得分:8)

$ 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:

答案 1 :(得分:1)

运行时方法

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上使用this setup进行测试。

<强> version

versionMODULE_VERSION宏设置。如果未给出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是否与已修改的版本匹配:

modinfo mymod.ko

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

来自模块代码内部的THIS_MODULE

您可以使用THIS_MODULE->version,例如:What is the significance of THIS_MODULE in Linux kernel module drivers?