2016-07-14 6 views
1

私は今、カーネルモジュールを学んでいるので、仮想マシンにkernel 4.4.0-28-genericというUbuntu 16.04をセットアップしました。カーネルモジュールの学習、module.ko原因モジュールが既にロードされていますか?

私は、これは私はすでに/home/test/WorkSpace/Kernel/linux-source-4.4.0にカーネルソースパッケージ/usr/src/linux-source-4.4.0.tar.bz2を解凍

# dpkg -l | grep linux 
ii console-setup-linux     1.108ubuntu15       all   Linux specific part of console-setup 
ii libselinux1:amd64     2.4-3build2        amd64  SELinux runtime shared libraries 
ii linux-base       4.0ubuntu1        all   Linux image base package 
ii linux-firmware      1.157.2         all   Firmware for Linux kernel drivers 
ii linux-generic      4.4.0.28.30        amd64  Complete Generic Linux kernel and headers 
ii linux-headers-4.4.0-28    4.4.0-28.47        all   Header files related to Linux kernel version 4.4.0 
ii linux-headers-4.4.0-28-generic  4.4.0-28.47        amd64  Linux kernel headers for version 4.4.0 on 64 bit x86 SMP 
ii linux-headers-generic    4.4.0.28.30        amd64  Generic Linux kernel headers 
ii linux-image-4.4.0-28-generic   4.4.0-28.47        amd64  Linux kernel image for version 4.4.0 on 64 bit x86 SMP 
ii linux-image-extra-4.4.0-28-generic 4.4.0-28.47        amd64  Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP 
ii linux-image-generic     4.4.0.28.30        amd64  Generic Linux kernel image 
ii linux-libc-dev:amd64     4.4.0-28.47        amd64  Linux Kernel Headers for development 
ii linux-sound-base      1.0.25+dfsg-0ubuntu5      all   base package for ALSA and OSS sound systems 
ii linux-source       4.4.0.28.30        all   Linux kernel source with Ubuntu patches 
ii linux-source-4.4.0     4.4.0-28.47        all   Linux kernel source for version 4.4.0 with Ubuntu patches 
ii util-linux       2.27.1-6ubuntu3.1      amd64  miscellaneous system utilities 

をパッケージ化しインストール。

私のシステムのunameは

# uname -a 
Linux ubuntu-ldm 4.4.0-28-generiC#47-Ubuntu SMP Fri Jun 24 10:09:13 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 

であり、私はテストモジュールのhello.c

#include <linux/init.h> 
#include <linux/module.h> 

MODULE_LICENSE("Dual BSD/GPL"); 

static int hello_init (void) { 
     printk (KERN_ALERT "Hello, World\n"); 
     return 0; 
} 

static void hello_exit (void) { 
     printk (KERN_ALERT "Goodbye, cruel world\n"); 
} 

module_init (hello_init); 
module_exit (hello_exit); 

Makefileの

obj-m += module.o 

module-objs := hello.o 

all: 
     make modules M=`pwd` -C /home/test/WorkSpace/Kernel/linux-source-4.4.0 

clean: 
     make modules clean M=`pwd` -C /home/test/WorkSpace/Kernel/linux-source-4.4.0 

しかし、何かが私を混乱書きます。私は自分のモジュールを作成し、insmodにしてみてください、と私はエラー

# sudo insmod module.ko 
insmod: ERROR: could not insert module module.ko: Invalid module format 

何原因このエラーを得ましたか。

誤ったバージョンのカーネルソースを使用しましたか? osgx

ため


私はinsmodのしようとした後に追加の行がdmesgのの出力ではありません。 modinfoはこの

# modinfo module.ko 
filename:  /home/test/WorkSpace/LDM/hello/module.ko 
license:  Dual BSD/GPL 
depends: 
vermagic:  4.4.13 SMP mod_unload 

を示し、新規の.koののmodinfoは

# modinfo module.ko 
filename:  /home/joshua/WorkSpace/LDM/hello/module.ko 
license:  Dual BSD/GPL 
srcversion:  82C361DBCB1C9BB5CA1DB07 
depends: 
vermagic:  4.4.0-28-generic SMP mod_unload modversions 
ある

を、私はそれを作り直し、Makefileのソースパスを変更しよう、と私は新しいの.koを取得します

しかし、まだそこに問題があり、dmesgのログには、この

[ 28.540701] module: module verification failed: signature and/or required key missing - tainting kernel 
[ 28.540879] module: module is already loaded 
01のようになります。

システムにすでにmoduleという名前のモジュールがあるように見えますので、私はモジュールが動作する後、hello.koとして新しいターゲット名を作る、hello.oMakefileのでターゲット名を変更してみてください。

しかし、lsmod | grep moduleを実行したとき、moduleというモジュールはありません。

+0

ジョシュア、あなたは 'dmesg'コマンドの出力に追加のラインを持っていますそのようなinsmod後?モジュールに 'modinfo'の出力はありますか? 'make module M = \' pwd \ '-C/lib/modules/$(uname -r)/ build'を使ってビルドしてください。これは、現在のカーネルのビルドディレクトリです。 kernel.org(それらは異なっていますが、あなたはあなたのカーネル用に正確に構築する必要があります; ubuntuにはdkms https://en.wikipedia.org/wiki/Dynamic_Kernel_Module_Supportがあり、カーネルアップデート時にモジュールを再コンパイルします)。 – osgx

+0

@osgx新しい情報フォーマットの質問を更新しました。 –

+1

それをmodule.koと呼ぶことはできません。 –

答えて

関連する問題