【问题标题】:Compiling a simple device driver code编译一个简单的设备驱动程序代码
【发布时间】:2014-05-05 22:34:19
【问题描述】:

我刚开始学习linux设备驱动程序。我刚刚编写了一个简单的设备驱动程序代码并尝试编译它,但是当我执行 make 时,我得到以下错误

make: Nothing to be done for `default'

这是我的设备驱动程序代码。

#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 );

而我的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

并且在路径 /lib/modules/3.2.0-58-generic-pae/build 中也存在。 谁能告诉为什么这个特定的make文件不起作用?

【问题讨论】:

标签: c linux-kernel linux-device-driver kernel-module


【解决方案1】:

obj-m:= hello.o

KVERSION = $(shell uname -r)

all:

    make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules

干净:

    make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean

在 make -C 之前按 Tab 空格

【讨论】:

    【解决方案2】:

    问题出在 make 文件中。

    在命令前留一个制表符。

    这是编写 Makefile 的一般规则。

    改变

    default:
      $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
    

    default:
            $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
    

    有关错误的更多信息,请参阅this link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 2018-05-23
      相关资源
      最近更新 更多