Linux kernel 需要帮助理解内核模块的Makefile吗

Linux kernel 需要帮助理解内核模块的Makefile吗,linux-kernel,makefile,kernel-module,Linux Kernel,Makefile,Kernel Module,我是内核开发的新手。我试图理解以下Hello World的makefile!节目。但我不能完全弄明白 obj-m += hello.o all: sudo make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: sudo make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 我无法理解“obj-m+=hello.o”是什么

我是内核开发的新手。我试图理解以下Hello World的makefile!节目。但我不能完全弄明白

obj-m += hello.o


all:

    sudo make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:

    sudo make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
我无法理解“obj-m+=hello.o”是什么意思。我知道m在这里的意思是模块,就是模块

还有,为什么我们不定义hello.o的依赖项

最后,我无法完全理解all:And clean:下定义的编译规则:


任何帮助都将不胜感激

obj-m
是一个Makefile变量。它实际上由两部分组成:“obj”表示引用的目标是一个内核对象,而“m”部分表示对象将像模块一样构建

该变量由内核构建规则考虑。由于内核模块遵循某种约定,运行Makefile将导致从源文件
hello.c
创建模块
hello.ko
(如果一切正常)

“obj”变量也可以使用不同的后缀。例如,“obj-y”将尝试将引用的对象链接到主内核映像,而不是创建模块。后缀也可能指内核
.config
文件变量,如下所示:

obj-$(CONFIG_HOTPLUG) += hotplug.o
在这种情况下,如果
CONFIG\u HOTPLUG
被设置为“y”,hoplug对象将被编译到主内核中;如果设置为“m”,则将创建一个单独的
hotplug.ko
可加载模块。如果未设置为任何值(导致“obj-”),则将完全忽略热插拔