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

Linux kernel 在构建内核模块时,为什么需要/lib/modules?,linux-kernel,kernel,Linux Kernel,Kernel,在Kbuild树中,当我们编写一个简单的hello.ko程序时,为什么我们需要在构建规则中使用-C/lib/module/。为什么需要这样做?它可以单独建造吗?它的用途是什么?通常按照您在make文件中编写的命令构建模块 make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 在上面的示例中,-C用于在读取makefile之前更改目录。因此,当make执行它时,转到目录/lib/modules/$(shell

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

通常按照您在make文件中编写的命令构建模块

        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
在上面的示例中,-C用于在读取makefile之前更改目录。因此,当make执行它时,转到目录/lib/modules/$(shell uname-r)/build

在Linux中通常构建的是一个软链接到内核源代码或需要构建模块的源代码


从该源代码中,make命令读取内核make文件并构建您的模块。

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

给出上述选项不是强制性的,即
/lib/modules
主要目的是
获取配置的源代码目录

您可以设置为直接配置的源代码,或者您可以提供上面的/lib/modules/,它们具有用于构建源代码的软链接

KDIR,

您可以设置完整的内核源目录(已配置和编译),也可以只设置内核头目录(最低需要)。 两种解决方案

1)完整内核源代码

2)只有内核头(linux头-*包在
Debian/Ubuntu发行版)

在这两种情况下,源或头必须配置为
许多宏或函数取决于配置

-C
选项调用
内核Makefile
,传递
模块
在M变量的目录中,内核Makefile知道如何编译模块

例如,如果您将内核配置为
Arm体系结构或机器
,则
配置的内核生成文件
将告诉您如何编译以及模块应为哪个体系结构构建

要编译,内核模块
需要访问内核
标题,包含函数、类型和
常数

可以单独构建吗?

不,您不能单独构建,因为您的模块应该知道要为哪个内核构建它,以及需要编译哪个配置,以便在插入模块时
应匹配所有相应的符号和配置。所有这些都可以通过配置内核的顶级Makefile来完成

你最好在姐妹网站上提问,比如SuperuserI,我无法理解。下面的答案明确提供了答案。特别是,也可以在Linux内核源代码目录中找到。这个问题似乎与主题无关,因为它应该在unix.stachexchange.com上,所以您是说实际上是调用内核生成文件来构建它。因此,我们使用/lib/modules//build。我说得对吗?如果这是真的,它为什么调用内核生成树Makefile?当您提供-C选项时,它调用内核生成文件,请参阅实用程序make的手册页以了解更多说明。shryas:阅读以下链接:linux.about.com/library/cmd/blcmdl1_make.htm