insmod: error could not insert module test.ko: -1 Invalid module format
原因:驅動文件編譯的內核版本與當前運行系統的內核版本不一致導致。
1. 通過modinfo 查看test.ko的內核版本vermagic
2. 通過uname -r查看系統的內核版本
對於嵌入系統,當確認系統的內核版本與編譯版本差異不大,又急用ko時,可以去編譯環境下find關鍵字UTS_RELEASE, 將該定義宏修改為要運行系統內核版本,再重新編譯一版驅動,就可以通過magic校驗。
UTS_RELEASE通常可能會在如下頭文件中定義:
include/linux/vermagic.h
include/generated/utsrelease.h
對於本地系統,部分可以做如下調整。
/usr/src/linux/Makefile:
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 130
EXTRAVERSION = -extversion
/usr/src/linux/.config:
CONFIG_LOCALVERSION="-debug"
然后,執行make時:
localhost linux # make
scripts/kconfig/conf --silentoldconfig Kconfig
CHK include/linux/version.h
CHK include/generated/utsrelease.h
UPD include/generated/utsrelease.h
對應的utsrelease.h的內容為:
#define UTS_RELEASE "2.6.130-extversion-debug"