5

我尝试编译简单的 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");
}

我的生成文件:

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: Nothing to be done for `all'。

怎么了?

谢谢你。

4

4 回答 4

5

makefile 中的默认命令是

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

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

make module m=YOUR_CURRENT_DIR

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

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

于 2010-10-31T15:29:04.760 回答
0

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

你是怎么编译的?您的构建中有正确的包含路径吗?构建路径由-Igcc 选项指定。确保您指向您的内核源代码树。

你编译内核了吗?当您执行 amake时,会设置某些允许您构建的东西。做 amake不会构建所有东西(如模块),但会为您设置初始的东西。

于 2010-10-31T15:20:06.620 回答
0

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

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

于 2010-10-31T15:22:30.580 回答
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  
于 2017-06-03T20:46:47.723 回答