2016-03-25 13 views
0

2つの.cファイルを持つカーネルモジュールをコンパイルしようとしています。私はこれを実行すると私のMakefileが、私はMakefileのが今のヘッダーを検索する場所を知っていないようだ 2つのソースファイルを持つカーネルモジュールをコンパイル中にエラーが発生しました

cc -c -o dummy.o dummy.c 
dummy.c:3:24: fatal error: linux/init.h: No such file or directory 

を取得するには、次の

module-y: dummy.o library.o 
obj-m += module.o 

default: 
    make -C /lib/modules/`uname -r`/build M=$(PWD) modules 

です。

私はCFLAGSを使用してインクルードディレクトリを追加しようとしましたが、とても面倒で難しくなりました。

単一の.cファイルを使用するときに(魔法のように)使用されるインクルードディレクトリを使用して、これらの2つの.oファイルを生成したいとします。その場合はすべて正常に動作します。

2つのソースファイルを使用するときにインクルードディレクトリを修正するにはどうすればよいですか?

+0

あなたは '-I/init'またはそのようにコンパイルする必要はないのですか? –

+0

私はそれを使用してそこに例を見ていない。少なくとも1つのソースの場合、必ずしも必須ではありません。 – JC1

+0

このページ: 'https:// www.kernel.org/doc/Documentation/kbuild/modules.txt'は' kbuild'の公式文書です。カーネル用の外部モジュールを構築するための例を参考にしてください。特に ':='とそれに類するマクロ定義の種類 – user3629249

答えて

1

私は次のようなMakefileを書き、それが働いた:。

ifneq ($(KERNELRELEASE),) 
# kbuild part of makefile 
obj-m := module.o 
module-y := library.o dummy.o 

else 
# normal makefile 
KDIR ?= /lib/modules/`uname -r`/build 

default: 
     $(MAKE) -C $(KDIR) M=$$PWD modules 
endif 
関連する問題