编译新模块时内核顶层 Makefile 的作用是什么?

What is the role of kernel's top level Makefile while compiling a new module?

为了创建一个新的内核模块,我们需要使用内核的顶级 Makefile 作为:

make -C /lib/modules/$(shell uname -r)/build M=`pwd`

-C指定顶层Makefile的路径。

我的问题是在创建新模块时这个 Makefile 有什么用?当我的 makefile 应该足够时...

虽然内核模块是使用与用户space程序相同的编译器(gcc)编译的,但需要将许多特殊参数传递给用于创建模块的编译器。此外,其中一些参数取决于构建模块所针对的内核。

是的,您可以创建 Makefile,它将适当的参数传递给编译器并创建一个模块。

然而,使用关心这些参数的现有内核的 Makefile 要简单得多。在这种情况下,您的 makefile 只需要提供您希望编译到模块中的源文件。


另外,构建内核模块不仅仅是编译而已。除了调用编译器之外,还应采取一些额外的操作来准备模块。

例如,需要预处理Modules.symvers文件以提取模块中使用的内核核心函数的信息。如果没有这一步,创建的模块将无法插入内核。