obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
3.3 可加载的目标 - obj-m
$(obj-m)指定目标文件被编译为可加载到内核的模块。
一个模块可能由一个源文件或者几个源文件编译而成。当只有一个源文件时,kbuild makefile
简单的使用$(obj-m)来编译。例如:
#drivers/isdn/i4l/Makefile
obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
注意:这个例子$(CONFIG_ISDN_PPP_BSDCOMP)的值为 m
如果内核模块是由几个源文件编译而成的,你想使用上述相同的方法编译模块,但是 kbuild
需要知道哪些目标文件是你需要编译进模块中,所以你不得不通过设置$(<module_name>-y)
变量来告诉它。例如:
#drivers/isdn/i4l/Makefile
obj-$(CONFIG_ISDN_I4L) += isdn.o
isdn-y := isdn_net_lib.o isdn_v110.o isdn_common.o
在这个例子中,模块名字是 isdn.o。Kbuild 会编译$(isdn-y)列出的所有目标文件然后执行$(LD)
-r 使这些文件生成 isdn.o 文件。
由于 kbuild 可以识别$(<module_name>-y)来合成目标,你可以使用 CONFIG_符号的值来确定
某些目标文件是否作为合成目标的一部分。例如:
#fs/ext2/Makefile
obj-$(CONFIG_EXT2_FS) += ext2.o
ext2-y := balloc.o dir.o file.o ialloc.o inode.o ioctl.o \
namei.o super.o symlink.o
ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o xattr_user.o \
xattr_trusted.o
在这个例子中,xattr.o, xattr_user.o 和 xattr_trusted.o 只是合成目标 ext2.o 的一部分当
$(CONFIG_EXT2_FS_XATTR)的值是 y 时。
注 意 : 当 然 , 当 你 编 译 目 标 到 内 核 中 去 , 上 述 语 法 也 是 可 以 用 的 。 因 此 , 如 果
CONFIG_EXT2_FS=y,kbuild 会编译一个 ext2.o 文件然后链接到 built-in.o 文件中,正如你所期
望的。
3.5 库文件 - lib-y
obj-*列出的目标文件用于模块或者合成为特定目录下的 built-in.o 文件,也有可能被合成为