8
A
回答
8
$ apropos modinfo
modinfo (8) - display information about a kernel module
$ modinfo cpuid.ko
filename: cpuid.ko
author: H. Peter Anvin <[email protected]>
description: x86 generic CPUID driver
license: GPL
vermagic: 2.6.37 SMP preempt mod_unload PENTIUM4 gcc-4.4.5
depends:
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
version
由MODULE_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
要启用它计算,或者:
- 设置
MODULE_VERSION
用于模块 - 编译
CONFIG_MODULE_SRCVERSION_ALL
。srcversion
然后获取所有模块生成的,包括那些没有MODULE_VERSION
组:modinfo srcversion: How do I generate this from my source?
的srcversion
给出当仅存在。
然后,您可以检查内置.ko
匹配insmodded一个具有:
modinfo mymod.ko
这是当你正在开发自己的内核模块和机器之间的复制模块一个非常有用的完整性检查。
虽然这个答案解决了我的问题,但我相信vermagic值反映了模块编译的内核版本,而不是模块的版本。为了测试这个,我尝试了“modprobe nvidia”,因为nvidia不包含在内核中,所以必须有不同的版本号。 “modprobe nvidia”返回了vermagic值的内核版本。 – 2011-01-29 22:56:40