1
votes

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 ?

2
Your makefile looks like not so good to start, try to simplify it, take a look at example 2-2 here tldp.org/LDP/lkmpg/2.6/html/lkmpg.htmlAlex Hoppus

2 Answers

0
votes

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.

0
votes

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