如何理解 Linux 内核模块的“构建单独的文件”?
Posted
技术标签:
【中文标题】如何理解 Linux 内核模块的“构建单独的文件”?【英文标题】:How to understand "Building Separate Files" for a Linux kernel module? 【发布时间】: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 /
什么意思?
【问题讨论】:
【参考方案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 正在询问构建树内核模块的一个非常具体的特性。这个答案没有解决这个问题以上是关于如何理解 Linux 内核模块的“构建单独的文件”?的主要内容,如果未能解决你的问题,请参考以下文章