Linux内核模块编译

时间:2010-10-31 15:07:44

标签: c linux kernel kernel-module

我尝试编译简单的linux内核模块:

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

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

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

我的makefile:

obj-m = testmodule.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

现在我的.c文件中没有错误。

但是当我在终端尝试make时:make:没有什么可以为'all'做的。

怎么了?

谢谢。

4 个答案:

答案 0 :(得分:5)

makefile中的默认命令是

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

指示make到cd / lib / modules / $(KVERSION)/ build并运行

make module m=YOUR_CURRENT_DIR

反过来,makefile没有找到任何事情要做。据推测,makefile期望在当前目录中找到一些特定的结构。

您需要更仔细地阅读指导您设置此makefile的任何说明。

答案 1 :(得分:0)

你真的没有提供足够的信息来确定正确的答案,但我会给你一些东西要研究。

你是如何编译的?您的构建中是否包含正确的包含路径?构建路径使用gcc的-I选项指定。确保您指向内核源代码树。

你有构建内核吗?当您执行make时,会设置某些允许您构建的内容。执行make并不构建所有内容(如模块),但会为您设置初始内容。

答案 2 :(得分:0)

确保您的发行版安装了提供这些包含文件的内核头文件/开发包。

如果已安装,请搜索计算机上这些包含文件的位置,并将这些目录添加到编译器中,包括搜索路径(-I选项)。

答案 3 :(得分:0)

这是因为您的Makefile在发出make命令之前不包含任何选项卡

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

通常你的文件应如下所示:

obj-m = test.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