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'.
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
On Tue, Jul 2, 2013 at 6:37 PM, 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
Press a tab here just before $(MAKE) and remember your editor (e.g. vim) should not have setting to convert tabs into spaces. Makefile strictly requires a tab. You must be knowing all these already since you are familiar with Makefiles.
endif It give the following output when I run make :
make: Nothing to be done for `default'.
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
-Rajat
Hi David, As Rajat said, we need to give TAB space before an executable command in the Makefile. However, here is the simple Makefile, for your reference. KDIR:=/lib/modules/$(shell uname -r)/build obj-m:=hello.o default: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules I hope this helps to you. Regards, Srinivas On Tue, Jul 2, 2013 at 6:37 PM, 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'.
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
participants (4)
-
David kiarie -
Greg Freemyer -
Rajat Sharma -
Srinivas Ganji