On Tue, Jul 2, 2013 at 9:07 AM, David kiarie <davidkiarie4@gmail.com> wrote:
Hi everybody, I currently started learning how to write Linux drivers.I am following Linux Device Drivers Third Edition. I have everything set right but the makefile provided seem not to work.I am familiar with makefiles but the kernel build system confuses me Here is the makefile:
# If KERNELRELEASE is defined, we've been invoked from the # kernel build system and can use its language. ifneq ($(KERNELRELEASE),) obj-m := hello.o # Otherwise we were called directly from the command # line; invoke the kernel build system. else KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules endif It give the following output when I run make :
make: Nothing to be done for `default'.
I guess you see ifneq($(KERNELRELEASE),). And you see that the "default:" statement is in the else clause of the if. Thus I am guessing that you are invoking the makefile by hand and you have the KERNELRELEASE variable set. The logic used above requires KERNELRELEASE _not_ be defined when manually invoking the makefile. It should _only_ be set when invoked by the kernel's overall build system which will set it internally. Greg