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

时间:2014-05-01 05:13:08

标签: 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.o

的依赖关系

最后,我无法完全弄清楚所有的定义编译规则:and clean:

任何帮助都将受到高度赞赏。!!

1 个答案:

答案 0 :(得分:2)

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

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

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

obj-$(CONFIG_HOTPLUG) += hotplug.o

在这种情况下,如果CONFIG_HOTPLUG设置为' y ' hoplug对象将被编译到主内核中;如果设置为' m'然后将创建一个单独的hotplug.ko可加载模块。如果没有设置为任何内容(导致' obj - '),将彻底省略hotplug。