我正在尝试创建一个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
值是什么时候?
答案 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>