如何在Linux Ubuntu中编译驱动程序/内核模块?

问题描述:

只是为了一些例子扩大,现在的问题是: 鉴于以下来源:如何在Linux Ubuntu中编译驱动程序/内核模块?

/* hello.c */ 

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

int init_module(void) 
{ 
printk(KERN_INFO "Hello world\n"); 
return 0; 
} 

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

/* end of hello.c */ 

和下面的Makefile:

obj-m += hello.o 
all: 
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 
clean: 
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 

当我键入make,而在相同的目录源和制作文件,我得到的消息:'没有什么可以为'全部' 编译似乎停在这里,没有目标文件被创建。

现在只是用于测试,我尝试了新的简单的Makefile: TARGET:=你好 $ {TARGET}的.o:$ {TARGET} .C

运行make给了我新的错误:hello.c中:1:致命错误:linux/module.h:没有这样的文件或目录。

然而,这文件的文件夹中可以找到:

/usr/src/linux-headers-2.6.35-22/include/linux 

以及在

/usr/src/linux-headers-2.6.35-22-generic/include/linux 

因为是kernel.h当文件

我缺少什么,什么想法?

在此先感谢

+1

您至少需要内核源代码才能获取所需的头文件... – 2012-01-28 21:50:12

+0

注意:完整的源代码不需要;构建环境(包括Makefiles,Kconfigs,scripts /和某些目录中的.h文件)就足够了。 – 2012-01-28 23:35:37

+0

尝试:http://fsmsh.com/1238 – 2012-02-13 06:02:51

确保在Makefile与“制作”开始的行由制表符缩进。 这就是'all:'下方的一行,'clean:'下面的一行应该以标签开头。