Как найти версию скомпилированного модуля ядра?
Я нахожусь в ситуации, когда было бы очень удобно найти версию загруженного модуля ядра, запросив загруженный модуль или .файл 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
чтобы включить его, либо:
- set
MODULE_VERSION
модуль - компилировать с
CONFIG_MODULE_SRCVERSION_ALL
. генерируется для всех модулей, в том числе безMODULE_VERSION
set:modinfo srcversion: как создать это из моего источник?
на srcversion
присутствует только тогда, когда дается.
затем вы можете проверить, что построенный .ko
соответствует insmodded с:
modinfo mymod.ko
это очень полезная проверка здравомыслия, когда вы разрабатываете свои собственные модули ядра и копируете модули между машинами.
изнутри самого кода модуля с THIS_MODULE
можно использовать THIS_MODULE->version
, вот пример: что значение THIS_MODULE в драйверах модулей ядра Linux?