在Kbuild树中,当我们编写一个简单的hello.ko程序时,为什么我们需要在构建规则中使用-C / lib / module /。为什么需要这个?可以单独构建吗?它的目的是什么?
答案 0 :(得分:2)
while building kernel modules why do we need /lib/modules?
上述选项不是强制性的,/lib/modules
主要意图是get configured source-code directory
。
您可以设置为直接配置的源代码,或者您可以提供以上内容,即/ lib / modules /具有内置源代码的软链接。
KDIR,
您可以设置完整的内核源目录(已配置和已编译)或仅设置内核头文件目录(最少需要)。 两种解决方案
1)Full kernel sources
2)Only kernel headers (linux-headers-* packages in
Debian/Ubuntu distributions)
两种情况下的来源或标题必须为configured
。许多macros or functions depend on the configuration
-C
选项调用kernel Makefile
,传递module
directory in the M variable ,the kernel Makefile knows how to compile a module
。
例如,如果您为Arm architecture or machine
配置内核,那么configured kernel Makefile
将告诉您如何编译以及构建模块的方法。
要编译,内核模块needs access to the kernel
headers, containing the defnitions of functions, types and
constants
。
Can it be build solely?
不,你不能单独构建,因为你的模块应该知道你想要构建它的内核以及需要编译的配置,以便在插入模块时
应匹配所有相应的符号和配置。所有这些都可以通过toplevel Makefile of configured kernel
完成。
答案 1 :(得分:1)
通常按照在make文件中写入的命令构建模块
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
在上面的-C中用于在读取makefile之前更改目录。所以当make执行时,它会进入目录/ lib / modules / $(shell uname -r)/ build。
在Linux中,通常构建是内核源的软链接或需要构建模块的源。
从该源开始,make命令读取内核make文件并构建模块。