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.c
foo_linux.o
…/checkout/src/linux-driver/foo_linux.c