在linux中使用makefile编译内核模块

时间:2015-03-06 13:45:42

标签: c linux makefile linux-kernel kernel-module

我是内核编程的新手。我写了一个你好世界的节目,但我无法评估它。我已经serached,所以在/ usr / src下创建了一个make文件然后执行sudo make命令来运行它。但它给出了以下错误:

make -C /lib/modules/3.2.0-23-generic-pae/build M=/usr/src modules
make[1]: Entering directory `/usr/src/linux-headers-3.2.0-23-generic-pae'
make[2]: *** No rule to make target `/usr/src/hello.c', needed by  `/usr/src   /hello.o'.  Stop.
make[1]: *** [_module_/usr/src] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.2.0-23-generic-pae'
make: *** [all] Error 2

制作档案:

obj-m += hello.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean

hello.c(在~Desktop / inet /中)

#include <linux/module.h>   
#include <linux/kernel.h>   
int init_module(void)
{
   printk(KERN_INFO "Hello world 1.\n");

 /* 
 * A non 0 return means init_module failed; module can't be loaded. 
 */
  return 0;
}

void cleanup_module(void)
{
  printk(KERN_INFO "Goodbye world 1.\n");
}

在makefile中,我注意每个新行只有一个制表空间!

请一些人说出问题!

2 个答案:

答案 0 :(得分:0)

Makefile移至模块源hello.c所在的位置。这意味着在~/Desktop/inet/。您似乎已将Makefile放入/usr/src/

$ sudo mv /usr/src/Makefile ~/Desktop/inet/
$ cd ~/Desktop/inet/
$ make

答案 1 :(得分:0)

只需使用make代替sudo make