@cyysu
2017-10-16T08:27:14.000000Z
字数 1762
阅读 899
- 时间:2017年10月16日
- 作者:Kali
- 邮箱:cyysu.github.io@gmail.com
- 版本:3.0
- 描述:Makefile-基础三,为Linux 4.4 Makefile中所遇到的知识点汇总
Makefile系列教程
从Linux内核2.6开始,Linux内核的编译采用Kbuild系统,这同过去的编译系统有很大的不同, 尤其对于Linux内核模块的编译。在新的系统下,Linux编译系统会两次扫描Linux的Makefile:首先编译系统会读取Linux内核顶层的 Makefile,然后根据读到的内容第二次读取Kbuild的Makefile来编译Linux内核。
前面我们以及了解了什么时Makefile,这里我们了解一下什么是Kconfig ,什么是.config
Kconfig : 一个文本形式的文件,其中主要作用是在内核配置时候,作为配置选项。
.config : 文件是在进行内核配置的时候,经过配置后生成的内核编译参考文件。
这里我们先看一下这个我们Linux内核中的Kconfig内容:
#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.txt.
#
mainmenu "Linux/$ARCH $KERNELVERSION Kernel Configuration"
# 这里表示一个配置
config SRCARCH
string
# 表示菜单下的配置选项,而这里从外部引入了一个环境变量SRCARCH,这个变量我们在顶层的Makefile中可以找到
option env="SRCARCH"
source "arch/$SRCARCH/Kconfig"
Linux内核Makefile文件组成
顶层 Makefile 它是所有Makefile文件的核心,从总体上控制着内核的编译、连接
arch/$(ARCH)/Makefile 对应体系结构的Makefile,它用来决定哪些体系结构相关的文件参与内核的生成,并提供一些规则来生成特定格式的内核映像
scripts/Makefile.* Makefile公用的通用规则、脚本等
子目录kbuild Makefiles 各级子目录的Makefile相对简单,被上一层Makefile.build调用来编译当前目录的文件。
顶层.config 配置文件,配置内核时生成。所有的Makefile文件(包括顶层目录和各级子目录)都是根据.config来决定使用哪些文件的
scripts/Makefile.*中有公用的通用规则,展示如下:
Makefile.build 被顶层Makefile所调用,与各级子目录的Makefile合起来构成一个完整的Makefile文件,定义.lib、built-in.o以及目标文件.o的生成规则。这个Makefile文件生成了子目录的.lib、built-in.o以及目标文件.o
Makefile.clean 被顶层Makefile所调用,用来删除目标文件等
Makefile.lib 被Makefile.build所调用,主要是对一些变量的处理,比如说在obj-y前边加上obj目录
Kbuild.include 被Makefile.build所调用,定义了一些函数,如if_changed、if_changed_rule、echo-cmd
总结说:研究Linux内核编译过程的核心文件就是两个:顶层Makefile以及scripts/Makefile.build。顶层Makefile负责将各个目录生成的*.build-in.o、lib.a等文件链接到一起
# makefile 中有用的参数
make "-w"或者"--print-directory"会在Make过程中输出信息,让你看到当前的工作目录
make -C 切换当前目录
make -M 表示返回
make -f 表示指定特定的makefile
这里我建议上面出现的知识点自己最好亲自操作一下,记得要温习这个知识点
这里我建议上面出现的知识点自己最好亲自操作一下,记得要温习这个知识点
这里我建议上面出现的知识点自己最好亲自操作一下,记得要温习这个知识点
支付宝 微信