root@vm# insmod ./test01.ko
insmod: ERROR: could not insert module ./tes01.ko: Invalid module format
私のCファイルtest01.c
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void)
{
printk(KERN_INFO "Hello World!");
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Unloading test01 module\n");
}
モジュールベースの test01.c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
static int __init load_module(void)
{
printk(KERN_INFO "Hello World!");
return 0;
}
static void __exit unload_module(void)
{
printk(KERN_INFO "Unloading test01 module\n");
}
module_init(load_module);
module_exit(unload_module);
メイクファイル
obj-m += test01.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
make は modinfo の正常な出力を動作させます
root@vm$ modinfo test01.ko
filename: /test01/test01.ko
srcversion: 5AF577C6F26F6B146320283
depends:
vermagic: 4.0.0-rc5+ SMP mod_unload modversions
私のカーネルバージョン uname -a
3.19.0-rc1+
dmseg 出力
[ 1470.217197] test01: disagrees about version of symbol module_layout
問題は、カーネル バージョンが 3.19 であるのに、modinfo からの vermagic が 4.0 であることです。しばらく前に、カーネルソースをコンパイルし(どれかわかりません)、次の方法でインストールしましたmake -j2 && sudo make modules_install
カーネルのバージョンが一致しない理由がわかりません。