A20简易Makefile解析

来源:互联网 发布:js数组添加值 编辑:程序博客网 时间:2024/06/05 19:18
编译进内核     obj-y
Kbuild Makefile 规定所有编译进内核的目标文件都存在$(obj-y)列表中。而这些列表依赖内核的配置。Kbuild编译所有的$(obj-y)文件。然后,调用"$(LD) -r"将它们合并到一个build-in.o文件中。稍后,该build-in.o会被其父Makefile联接进vmlinux中。
$(obj-y)中的文件是有顺序的。列表中有重复项是可以的:当第一个文件被联接到built-in.o中后,其余文件就被忽略了。
联接也是有顺序的,那是因为有些函数(module_init()/__initcall)将会在启动时按照他们出现的顺序进行调用。


编译可装载模块 obj-m
如果是一个源文件,Kbuidl Makefile只需简单的将其加到$(obj-m)
obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
注意:此例中 $(CONFIG_ISDN_PPP_BSDCOMP) 的值为'm'


如果内核模块是由多个源文件编译而成,Kbuild需要知道所编译的模块是基于哪些文件,需要通过变量$<module_name>-objs来告诉它
obj-$(CONFIG_ISDN) += isdn.o
isdn-objs := isdn_net_lib.o  isdn_v110.o  isdn_common.o
在这个例子中,模块名将是isdn.o,  Kbuild将编译在$(isdn-objs)中列出的所有文件,然后使"$(LD) -r"生成isdn.o。


Kbuild能够识别用于组成目标文件的后缀-objs/-y,-y可以通过使用CONFIG_符号来判读该对象是否是用来组合对象的。
obj-$(CONFIG_EXT2_FS) +=ext2.o
ext2-y :=balloc.o bitmap.o
ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o





原创粉丝点击