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