构建内核模块时为什么需要/ lib / modules?

时间:2013-11-06 06:06:49

标签: linux-kernel kernel

在Kbuild树中,当我们编写一个简单的hello.ko程序时,为什么我们需要在构建规则中使用-C / lib / module /。为什么需要这个?可以单独构建吗?它的目的是什么?

2 个答案:

答案 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文件并构建模块。