Como explicado nos comentários do Makefile, há duas partes neste Makefile. Isso porque será lido duas vezes. Primeiro, quando você chama make na linha de comando, então pelo kbuild.
# if KERNELRELEASE is not defined, we've been called directly from the command line.
# Invoke the kernel build system.
ifeq (${KERNELRELEASE},)
KERNEL_SOURCE := /usr/src/linux
PWD := $(shell pwd)
default:
${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} modules
clean:
${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} clean
Se KERNELRELEASE
não estiver definido, é porque o arquivo é lido por make. Você tem um Makefile que chama make com a opção -C
para alterar o diretório para onde sua origem do kernel está.
Make então lê o Makefile lá (no diretório de origem do kernel). SUBDIRS
é onde está o código-fonte do seu módulo. (Acho que SUBDIRS
está obsoleto e M
é usado agora).
O sistema de compilação do kernel irá procurar pelo Makefile no diretório do seu módulo para saber o que construir. KERNELRELEASE
será definido, então essa parte será usada:
# Otherwise KERNELRELEASE is defined; we've been invoked from the
# kernel build system and can use its language.
else
obj-m := ofd.o
endif
Você encontrará mais informações em a documentação do kernel .