Как найти версию скомпилированного модуля ядра?

Я нахожусь в ситуации, когда было бы очень удобно найти версию загруженного модуля ядра, запросив загруженный модуль или .файл ko.

есть ли стандартный способ сделать это без копаться в исходном коде?

2 ответов


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

способ выполнения

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.

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

чтобы включить его, либо:

на srcversion присутствует только тогда, когда дается.

затем вы можете проверить, что построенный .ko соответствует insmodded с:

modinfo mymod.ko

это очень полезная проверка здравомыслия, когда вы разрабатываете свои собственные модули ядра и копируете модули между машинами.

изнутри самого кода модуля с THIS_MODULE

можно использовать THIS_MODULE->version, вот пример: что значение THIS_MODULE в драйверах модулей ядра Linux?