5

シンプルなLinuxカーネルモジュールをコンパイルしようとしています:

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

int init_module(void)
{
        printk("Hello world 1.\n");
        return 0;
}

void cleanup_module(void)
{
        printk(KERN_ALERT "Goodbye world 1.\n");
}

私のメイクファイル:

obj-m = testmodule.o
KVERSION = $(shell uname -r)
all:
        make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
        make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean

これで、.c ファイルにエラーはありません。

しかし、ターミナルで make しようとすると:

どうしたの?

ありがとうございました。

4

4 に答える 4

5

makefileのデフォルトのコマンドは

make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules

これは、makeに/ lib / modules / $(KVERSION)/buildにcdして実行するように指示します

make module m=YOUR_CURRENT_DIR

次に、そのmakefileは何もすることを見つけていません。おそらく、そのmakefileは、現在のディレクトリで特定の構造を見つけることを期待しています。

このmakefileを設定するための指示を注意深く読む必要があります。

于 2010-10-31T15:29:04.760 に答える
0

あなたは本当に正しい答えを決定するのに十分な情報を提供していませんが、調べるためにいくつかのことを示します.

どのようにコンパイルしていますか?ビルドに正しいインクルード パスがありますか? ビルド パスは、-Igcc のオプションで指定されます。カーネル ソース ツリーを指していることを確認してください。

カーネルを構築しましたか?を実行するmakeと、ビルドできるように特定のものがセットアップされます。a をmake実行してもすべて (モジュールなど) がビルドされるわけではありませんが、初期設定が行われます。

于 2010-10-31T15:20:06.620 に答える
0

これらのインクルード ファイルを提供するカーネル ヘッダー/開発パッケージがディストリビューションにインストールされていることを確認してください。

それらがインストールされている場合は、これらのインクルード ファイルがコンピューター上のどこにあるかを検索し、これらのディレクトリをコンパイラ インクルード検索パス (-Iオプション) に追加します。

于 2010-10-31T15:22:30.580 に答える