Estoy confrontando el sistema de compilación del kernel de Linux (Kbuild, kernel ≥2.6.28) con la estructura de directorios y el sistema de compilación para un proyecto más grande. Nuestro proyecto contiene un módulo del núcleo Linux fuera del árbol, y nuestra estructura de directorios se parece a esto (simplificado, obviamente):Construyendo un módulo kernel de Linux fuera de árbol en un directorio de objetos separado
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
El proceso de construcción No hay que modificar nada bajo checkout
, y construir el módulo debe no modificar nada en tmp/linux-2.6.xx
. Todos los archivos de salida deben terminar en output/linux-arm-debug
(o cualquier variante de arquitectura y depuración que se haya seleccionado en el momento de la compilación).
He leído kbuild/modules.txt
, y empecé a escribir mi archivo 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
Este se encarga de almacenar los ficheros objeto en un directorio diferente de donde Kbuild
vidas. Ahora, ¿cómo puedo especificar que foo_common.o
necesita ser compilado desde …/checkout/src/common/foo_common.c
y foo_linux.o
desde …/checkout/src/linux-driver/foo_linux.c
?
he leído esa parte, y estoy en una pérdida en cuanto a cómo esto me ayuda. En ese ejemplo, 'complex_main.c' y' complex_main.o' están en el mismo directorio.En mi árbol de compilación, las fuentes y los productos de compilación están completamente separados. – Gilles