玉雕蝙蝠图片:Linux内核KBuild系统

来源:百度文库 编辑:中财网 时间:2024/04/30 11:41:36

Linux内核KBuild系统  

2010-10-24 20:44:55|  分类: 默认分类 |  标签: |字号大中小 订阅

kbuild系统主要涉及几个文件。 Makefile:内核源代码顶层目录的Makefile文件。scripts/Makefile.build:通常在进行递归make时会用到的Makefile文件。scripts/Makefile.host:如果需要生成可执行文件时会用到的文件。例如:在编译内核之前需要配置内核,此时会编译生成配置程序,在这个过程中会用到这个文件。scripts/Kbuild.include:可以看作是kbuild系统的头文件。定义了一些常用的变量。其中有一个变量很重要:build。scripts/Makefile.lib:这个文件里主要也是定义了一些变量。scripts/Makefile.modinst:在安装模块时会用到的文件。除此之外还有一些文件,他们的作用我还没有完全研究透。scripts/Makefile.build会通过include指令引用 scripts/Makefile.host 、 scripts/Kbuild.include 、 scripts/Makefile.lib 、 scripts/Makefile.modinst 等文件。以下是scripts/Makefile.build的部分代码:# 引用scripts/Kbuild.includeinclude scripts/Kbuild.include
# 在递归时引用子目录的Kbuild(如果存在的话)或者Makefile文件kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)include $(kbuild-file)
# 引用Makefile.lib文件include scripts/Makefile.lib
# 如果在上步“include $(kbuild-file)”时发现引用的文件中含有 hostprogs-y 或者 hostprogs-m 变量,则引用scripts/Makefile.host 文件,在 scripts/Makefile.host 文件中有编译生成可执行文件的相关规则ifneq ($(hostprogs-y)$(hostprogs-m),)include scripts/Makefile.hostendif
# 以下两个规则就是用来编译目标文件的,需要说明的是变量src和obj的值是相同的,因为在 scripts/Makefile.build 的第一行就有“src := $(obj)”而且我还没有发现能使src和obj值不同的代码。但是尽管他们的值相同,但由于有 VPATH 变量存在——在顶层Makefile文件中输出了该变量,所以源文件的目录和目标文件的目录可能不同。但这仅仅是在编译内核时,因为编译内核时可以使用O变量来指定输出目录;而在编译外部模块时,src和obj是指的同一个目录,目前我还没有找到在编译外部模块时能使src和obj不同的方法# Built-in and composite module parts$(obj)/%.o: $(src)/%.c FORCE$(call cmd,force_checksrc)$(call if_changed_rule,cc_o_c)
# Single-part modules are special since we need to mark them in $(MODVERDIR)
$(single-used-m): $(obj)/%.o: $(src)/%.c FORCE$(call cmd,force_checksrc)$(call if_changed_rule,cc_o_c)@{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.  
  • makefile2007-05-25 09:21:15
  • linux内核makefile浅析[转]2007-11-17 23:39:41