カーネル モジュール makefile のインクルード パスを追加するにはどうすればよいですか? test_module.c に「test_kernel.h」をインクルードしたい。「test_kernel.h」は別のディレクトリ「inc」にあります。Makefile で次の解決策を試しましたが、機能しません。
obj-m += test_module.o
test_module:
$(MAKE) -C "$(LINUX_DIR)" -Iinc $(MAKE_OPTS) modules
カーネル モジュール makefile のインクルード パスを追加するにはどうすればよいですか? test_module.c に「test_kernel.h」をインクルードしたい。「test_kernel.h」は別のディレクトリ「inc」にあります。Makefile で次の解決策を試しましたが、機能しません。
obj-m += test_module.o
test_module:
$(MAKE) -C "$(LINUX_DIR)" -Iinc $(MAKE_OPTS) modules
あなたはあなたので利用する必要がありEXTRA_CFLAGSますMakefile。これらの行で何かを試してください:
obj-m += test_module.o
EXTRA_CFLAGS=-I$(PWD)/inc
test_module:
$(MAKE) -C "$(LINUX_DIR)" $(MAKE_OPTS) modules
ここのセクション3.7Compilation Flagsセクションを参照してください。
お役に立てれば!
ファイルにインクルードを正しく指定しましたか?
例えば:
#include "inc/something.h"
それ以外の
#include <inc/something.h>
-IはGCCフラグであり、Makeフラグではありません。1 変数を「サブ」Makeプロセスに渡す必要があります。おそらくこのようなもの:
$(MAKE) -C "$(LINUX_DIR)" CPPFLAGS="-Iinc" $(MAKE_OPTS) modules
ここCPPFLAGSで、は暗黙のルールで使用される標準のMake変数です。代わりに独自の変数を自由に使用し、サブメイクで適切に使用されていることを確認してください。
Makeマニュアルには、Makeインスタンス間の変数の通信に関する詳細が記載されています:http ://www.gnu.org/software/make/manual/make.html#Variables_002fRecursion 。
私にとって、そのうちの1つが成功するまで、多くの試行が失敗しました。$(src)パスで使用するとccflags-y、たとえば次のようになります。
# Include Paths
ccflags-y += -I$(src)/../../lib/include
ソースフォルダーから 2 つ上のディレクトリ "/lib/include" の場合。
これは、 Kernel.orgの声明から導き出されたものです。
src ツリーにあるファイルを参照するときは、常に $(src) を使用してください。特に、ソース コードが Linux カーネル ツリーの外部にあるディレクトリにある場合は注意してください。