Linux内核模块编程Makefile

时间:2013-01-16 05:09:44

标签: makefile kernel

我正在尝试创建一个helloworld模块。我必须写一个makefile,如下所示。

ifneq ($(KERNELRELEASE), )
obj-m := hello.o
else
KDIR := /path/to/kernel/sources
all:
    make -C  $(KDIR) M= 'pwd' modules
endif

我发现这个makefile运行了两次。如何通过仅调用一次来运行两次?

这里使用的obj-m值是什么时候?

2 个答案:

答案 0 :(得分:4)

此makefile只有一条规则:

all:
    make -C $(KDIR) M= 'pwd' modules

英文:“转到目录$(KDIR)并执行Make(目标是modules)”。

所以当使用这个makefile调用Make时, it 使用另一个makefile调用Make。

你应该从更简单的事情开始。如果你告诉我们你想要做什么,我们可以提供帮助。

答案 1 :(得分:0)

似乎此文件可能有一条规则,但仅当KERNELRELEASE为空时。 obj-m只有在KERNELRELEASE 为空时才会被定义,在这种情况下,Makefile不会真正做任何事情......我猜是obj-m内核将使用包含此Makefile(在已定义KERNELRELEASE之后)的内核,以防您实际将其构建到内核而不是动态加载的模块中。 / p>