九鼎创展论坛中文版English
登录 | 立即注册 设为首页收藏本站 切换到宽版
查看: 4483|回复: 0
打印 上一主题 下一主题

Linux内核KBuild系统

[复制链接]
跳转到指定楼层
楼主
发表于 2012-7-19 11:56:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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.include
include 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.host
endif


# 以下两个规则就是用来编译目标文件的,需要说明的是变量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=.mod)

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳市九鼎创展科技官方论坛 ( 粤ICP备11028681号-2  

GMT+8, 2024-11-23 09:12 , Processed in 0.026773 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表