为了创建新的内核模块,我们需要使用内核的顶级Makefile:
make -C /lib/modules/$(shell uname -r)/build M=`pwd`
-C
指定顶级Makefile的路径。
我的问题是在创建新模块时,Makefile的需求是什么?当我的makefile应该足够了......
答案 0 :(得分:2)
虽然使用与用户空间程序相同的编译器(gcc
)编译内核模块,但是需要将许多特殊参数传递给编译器以创建模块。而且,其中一些参数取决于构建模块的内核。
是的,你可以创建Makefile,它将适当的参数传递给编译器并创建一个模块。
然而,使用现有内核的Makefile更加简单,它关心这些参数。在这种情况下,makefile只需要提供您希望编译到模块中的源文件。
此外,构建内核模块不仅仅是编译它。除了调用编译器之外,还应该采取一些额外的操作来准备模块。
,例如,需要preropcess Modules.symvers
文件来获取模块中使用的内核核心功能的提取信息。如果没有该步骤,则无法将创建的模块插入到内核中。