私はLinuxカーネルビルドシステム(Kbuild、カーネル≧2.6.28)と、より大きなプロジェクトのディレクトリ構造とビルドシステムに直面しています。私たちのプロジェクトでは、外の木のLinuxカーネルモジュールが含まれている、と私たちのディレクトリ構造は、(明らかに簡略化され、)次のようになります。独立したオブジェクトディレクトリにツリー外の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
にコンパイルする必要があると指定するにはどうすればよいですか?
私はその部分を読んだ、と私はこれが私をどのように役立つかのよう途方に暮れてよ。この例では、 'complex_main.c'と' complex_main.o'は同じディレクトリにあります。ビルドツリーでは、ソースとビルド製品は完全に別です。 – Gilles