如何理解Linux内核模块的“构建单独文件”?

时间:2014-06-11 08:29:36

标签: linux module makefile kernel

摘自Linux内核documentation

  

2.4构建单独的文件

It is possible to build single files that are part of a module.
This works equally well for the kernel, a module, and even for
external modules.

Example (The module foo.ko, consist of bar.o and baz.o):
    make -C $KDIR M=$PWD bar.lst
    make -C $KDIR M=$PWD baz.o
    make -C $KDIR M=$PWD foo.ko
    make -C $KDIR M=$PWD /

我无法理解这些命令的含义。

  

制作-C $ KDIR M = $ PWD bar.lst

是不是意味着:找bar.c并将其编译成bar.1st?

  

制作-C $ KDIR M = $ PWD foo.ko

是否意味着:寻找所有* .o并将它们链接到foo.ko?它是否也寻找* .1st?

  

制作-C $ KDIR M = $ PWD /

这是什么意思?

2 个答案:

答案 0 :(得分:0)

这些命令都意味着"做makefile所说的任何内容都是构建命名目标所必需的#34;。这样做所涉及的行动是我无法说出的,并且将完全取决于具体目标是什么。

如果你想知道,make会对给定命令做什么,为它提供-n参数。

答案 1 :(得分:0)

首先让我们了解

make -C $KDIR M=$PWD [target]

此处目标可以是定义为目标的任何内容(即bar.o:)

通常我们在make文件中使用依赖项。

在给定示例中为三个文件

foo.c bar.c baz.c

foo.c具有module_init即入口点

该语句指出我们可以一次构建所有文件。 或单个文件,最后将它们链接在一起。

简而言之,您可以尝试仅编译bar.c而不编译其他两个文件。只产生bar.o

一旦生成所有.o文件,您就可以创建.ko文件。

推荐linux/fs/ufs/Makefile

在其中您可以编译一次ufs.ko或 balloc.o cylinder.o dir.o file.o ialloc.o inode.o等 并编译ufs以创建ufs.ko