ifneq ($(KERNELRELEASE),)
obj-m := mymodule.o
mymodule-objs := file_one.o file_two.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
endif
1. Reading the makefile and then find that the KERNELRELEASE haven't defined because KERNELRELEASE equal null at firstly
2. Execute commands in the else scope, then come to the $(MAKE) -C $(KDIR) M=$(PWD) modules
3. Then change directory into $(KDIR),read the makefile in this path ($KDIR),we called it kbuild
4. Return to the current path $(PWD)
5. Kbuild is started and read makefile again specificted by M=$(PWD). KERNELRELEASE is defined now for kbuild have maked it.
6. Then come to the obj-m and my-module-objs setting, and kbuild finishes the remain works, creating the kernel modules .