【问题标题】:What is the role of kernel's top level Makefile while compiling a new module?编译新模块时内核的顶级 Makefile 的作用是什么?
【发布时间】:2017-10-12 12:01:39
【问题描述】:
为了创建一个新的内核模块,我们需要使用内核的顶级 Makefile 作为:
make -C /lib/modules/$(shell uname -r)/build M=`pwd`
-C 指定顶级 Makefile 的路径。
我的问题是在创建新模块时需要这个 Makefile 是什么?当我的 makefile 应该足够了...
【问题讨论】:
标签:
c
makefile
linux-kernel
kernel
kernel-module
【解决方案1】:
虽然内核模块使用与用户空间程序相同的编译器 (gcc) 进行编译,但需要将 许多特殊参数 传递给编译器以创建模块。此外,其中一些参数取决于构建模块的内核。
是的,您可以创建 Makefile,它将适当的参数传递给编译器并创建一个模块。
但是,使用关心这些参数的现有内核的 Makefile 要简单得多。在这种情况下,您的 makefile 只需要提供您希望编译到模块中的源文件。
另外,构建内核模块不仅仅是一个编译它。除了调用编译器之外,还应采取一些额外的措施来准备模块。
例如,需要预处理Modules.symvers 文件以提取模块中使用的内核核心函数的信息。如果没有这一步,创建的模块将无法插入内核。