我正面临 Linux 内核构建系统(Kbuild,内核≥2.6.28)的目录结构和更大项目的构建系统。我们的项目包含一个 out-of-tree 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
?