2017-06-19 4 views
1

私はカーネルモジュールを構築しようとしています。私はここではFedora 25このようなファイルまたはディレクトリのエラーはありません。なにが問題ですか?

によ私のMakefileです:

obj-m += simple.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 

これはsimple.cファイルです:

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

/* This function is called when the module is loaded. */ 
int simple_init(void) 
{ 
    printk(KERN_INFO "Loading Module\n"); 

    return 0; 
} 

/* This function is called when the module is removed. */ 
void simple_exit(void) { 
printk(KERN_INFO "Removing Module\n"); 
} 

/* Macros for registering module entry and exit points. */ 
module_init(simple_init); 
module_exit(simple_exit); 

MODULE_LICENSE("GPL"); 
MODULE_DESCRIPTION("Simple Module"); 
MODULE_AUTHOR("SGG"); 

私はmakeコマンドを使用した後に取得していますエラー:

make -C /lib/modules/4.11.3-202.fc25.x86_64/build M=/home/nubian/Downloads/ch02/ch2 modules 
make[1]: *** /lib/modules/4.11.3-202.fc25.x86_64/build: No such file or directory. Stop. 
Makefile:7: recipe for target 'default' failed 
make: *** [default] Error 2 
+0

'/ lib/modules/4.11.3-202.fc25.x86_64/build'は、カーネルモジュールが構築されているディレクトリへのリンクでなければなりません。それは...ですか? http://elixir.free-electrons.com/linux/v4.9.33/source/README#L124 – stark

+0

を参照してください。これは、kernel-develをインストールしようとしたときに表示されるメッセージです。最後のメタデータの有効期限チェック:1:09:07前の月Jun 19 12:26:54 2017. パッケージkernel-devel-4.11.5-200.fc25.x86_64は既にインストールされており、スキップしています。 –

+0

カーネル '4.11.3-202.fc25'を実行していますが、' kernel-devel-4.11.5-200.fc25'パッケージをインストールしていることに注意してください。これらは一致しないので、ビルドは成功できません。パッケージを新しいカーネルに更新したが、まだシステムをリブートしていない可能性があるので、実際にはそのカーネルを実行していないでしょうか? – MadScientist

答えて

0

あなたは再帰的なメイクを呼び出す際には、必ず$(MAKE)決してmakeを使用する必要があります。しかし、それはあなたの問題ではありません。

問題は、現在実行中のカーネルがインストールされているモジュールビルド環境がないことです。インストールすると、カーネル用のモジュールをビルドするために必要なディレクトリが作成されます。

たとえばyum installコマンドをthis pageで参照してください。

+0

こんにちは、ありがとうございます。私はすでにkernel-develパッケージをインストールしていますが、同じエラーメッセージが表示されます。 –

+0

実行中のカーネルは、通常インストールされているFedoraカーネルであってはなりません。 '$(shell uname -r)'コマンドは、現在実行中のカーネルのバージョンを返します。これは、makefileが検索しようとしているディレクトリです。 – MadScientist

関連する問題