【问题标题】:How to understand "Building Separate Files" for a Linux kernel module?如何理解 Linux 内核模块的“构建单独的文件”?
【发布时间】:2014-08-01 05:26:39
【问题描述】:

摘自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 /

我不明白这些命令是什么意思。

make -C $KDIR M=$PWD bar.lst

是不是意思:找bar.c,编译成bar.1st?

make -C $KDIR M=$PWD foo.ko

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

make -C $KDIR M=$PWD /

什么意思?

【问题讨论】:

    标签: linux module makefile kernel


    【解决方案1】:

    首先让我们了解

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

    这里的目标可以是任何定义为目标的东西(即 bar.o : )

    我们大多在 make 文件中使用依赖。

    在给定的例子中三个文件

    foo.c 酒吧.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

    【讨论】:

      【解决方案2】:

      这些命令都意味着“做任何makefile所说的构建命名目标所必需的事情”。这样做所涉及的一系列操作我不能说,这将完全取决于具体目标是什么。

      如果你想知道,具体来说,make 会对给定命令做什么,给它-n 参数。

      【讨论】:

      • OP 正在询问构建树内核模块的一个非常具体的特性。这个答案没有解决这个问题
      猜你喜欢
      • 2020-08-16
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      • 2011-02-23
      • 2011-05-22
      • 2015-03-03
      相关资源
      最近更新 更多