obj-m:= hello.o
KVERSION = $(shell uname -r)
all:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
Before make -C press tab for space
Frage
I just started learning linux device driver. I just wrote a simple device driver code and tried compiling it but when ever i do a make i get the following error
make: Nothing to be done for `default'
Here is my device driver code.
#include <linux/module.h>
#include <linux/version.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Manoj");
MODULE_DESCRIPTION("My First Driver");
static int __init ofd_init ( void ) {
printk (KERN_INFO "ofd registered");
return 0;
}
static int __exit ofd_exit ( void ) {
printk (KERN_INFO "ofd unregistered");
return 0;
}
module_init ( ofd_init );
module _exit ( ofd_exit );
And my Makefile is like this
# 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
And in the path /lib/modules/3.2.0-58-generic-pae/build is also present. can anyone please tell why this particular make file not working ?
Lösung
obj-m:= hello.o
KVERSION = $(shell uname -r)
all:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
Before make -C press tab for space
Andere Tipps
The problem is in the make file.
Give a tab space before the command.
This is a general rule in writing a Makefile.
Change
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
to
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
For more information about the error refer this link.