Linux カーネル ビルド システム (Kbuild、カーネル ≥2.6.28) と、より大きなプロジェクトのディレクトリ構造とビルド システムに直面しています。私たちのプロジェクトには、ツリー外の Linux カーネル モジュールが含まれており、ディレクトリ構造は次のようになります (明らかに単純化されています)。
checkout/src/common/*.c source files (common to Linux and other platforms)
checkout/src/linux-driver/*.c source files (for the Linux kernel driver)
checkout/build/linux/Kbuild Kbuild
tmp/linux-2.6.xx/ where the Linux kernel is unpacked and configured
output/linux-arm-debug/ where object files must end up
ビルド プロセスでは の下を変更してcheckoutはならず、モジュールのビルドでは の下を変更してはなりませんtmp/linux-2.6.xx。すべての出力ファイルは、最終的にoutput/linux-arm-debug(または、ビルド時に選択されたアーキテクチャおよびデバッグ バリアント) の下にある必要があります。
を読みkbuild/modules.txt、Kbuildファイルの書き込みを開始しました。
MOD_OUTPUT_DIR = ../../../output/linux-$(ARCH)-$(DEBUG)
obj-m += $(MOD_OUTPUT_DIR)/foo_mod.o
$(MOD_OUTPUT_DIR)/our_module-objs := $(MOD_OUTPUT_DIR)/foo_common.o $(MOD_OUTPUT_DIR)/foo_linux.o
これは、オブジェクトファイルを、存在する場所とは別のディレクトリに保存することを処理しますKbuild。からfoo_common.oコンパイルする必要があることをどのように指定できますか?…/checkout/src/common/foo_common.cfoo_linux.o…/checkout/src/linux-driver/foo_linux.c