make:没有规则来制定目标

时间:2013-10-13 16:24:38

标签: linux makefile

我写了一个简单的linux模块&它的文件

这是我的模块

    #include <linux/init.h>
    #include <linux/module.h>
    #include <linux/kernel.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void) {
  printk("<1> Hello world!\n");
  return 0;
}

static void hello_exit(void) {
  printk("<1> Bye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);

这是我的make文件

    obj-m :=Hello.o


KDIR = /usr/src/linux-headers-3.5.0-17

all:
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

clean: 
    rm -rf *.o *.ko *.mod.* *.symvers *.order

当我执行make -f MakeFile时 它给出了以下o / p

make -C /usr/src/linux-headers-3.5.0-17 SUBDIRS=/home/linux/Desktop modules
make[1]: Entering directory `/usr/src/linux-headers-3.5.0-17'

  WARNING: Symbol version dump /usr/src/linux-headers-3.5.0-17/Module.symvers
           is missing; modules will have no dependencies and modversions.

scripts/Makefile.build:44: /home/linux/Desktop/Makefile: No such file or directory
make[2]: *** No rule to make target `/home/linux/Desktop/Makefile'.  Stop.
make[1]: *** [_module_/home/linux/Desktop] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.5.0-17'
make: *** [all] Error 2

任何人都可以告诉我如何摆脱这些错误。 提前致谢

2 个答案:

答案 0 :(得分:2)

在Makefile中进行以下更改

首先通过键入uname -a

来检查正在运行的内核

然后转到cd / usr / src /

然后检查你的linux源代码名称

例如

uname -a Linux vinay-VirtualBox 3.2.0-50-generic-pae#76-Ubuntu SMP Tue 7月9日19:24:55 UTC 2013 i686 i686 i386 GNU / Linux

这里的源代码名称是linux-headers-3.2.0-50-generic-pae 在你的情况下同样的事情 e.g

linux-headers-3.2.0-23 linux-headers-3.2.0-23-generic-pae 所以使用linux-headers-3.2.0-23-generic-pae代替 linux-headers-3.2.0-23即在makefile中替换

即KDIR = / usr / src / linux-headers-3.5.0-17-generic-pae

或为了避免上述问题使用
KDIR == /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)
KDIR == /lib/modules/$(shell uname -r)/build

$(MAKE) -C $(KDIR) M=$(PWD) modules

答案 1 :(得分:0)

obj-m += xyz.o

KDIR:=/usr/src/linux-headers-3.5.0-46-generic

all:

       make -C $(KDIR) M=$(PWD) modules

clean:

       make -C $(KDIR) M=$(PWD) clean

您确定/usr/src/包含linux-headers-3.5.0-46通用文件吗? 如果不是这样,请下载:

sudo apt-get install linux-headers-3.5.0-46

sudo apt-get install linux-headers-3.5.0-46-generic