Greg Freemyer greg.freemyer at
Tue Jul 2 09:31:30 EDT 2013

On Tue, Jul 2, 2013 at 9:07 AM, David kiarie <davidkiarie4 at> 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.


More information about the Kernelnewbies mailing list