一 kernel编译系统概述

    内核的编译系统主要由kconfig,makefile和一系列脚本共同构成。其中kconfig主要用于配置内核的各项功能,它的结果决定了各个部分最终是被编译成模块,编译进内核还是不编译。在内核顶层makefile的help可以看到有一个专门用于配置内核的命令序列,后续我们会详细介绍该部分内容。
    顶层makefile是整个内核编译系统的入口,所有make相关的命令都由它发起,并调用定义在其中或定义在其它文件中的相应命令序列完成。它还定义了很多全局的参数,环境变量,目标和依赖等。
    除了顶层makefile之外,还有几个定义在scripts目录中的重要文件,它们包括kbuild.include,makefile.lib和makefile.build。其中kbuild.include中主要定义了一些通用的变量和命令,如filechk,try-run,build,arg-check,if_changed等。makefile.lib中主要定义了编译相关的flag和命令,如c_flags,a_flags,cmd_ld,cmd_objcopy,cmd_uimage等。makefile.build文件是大部分目标最终调用的makefile,它会实际完成对目录的递归调用和对源文件的编译工作。
    由于顶层makefile文件比较长,若从头阅读很容易陷入某些细节而打断思路的连贯性。因此,我们通过对内核目标编译的执行流程进行分析,看看linux到底是如何编译出来的。让我们先了解下内核makefile支持哪些功能,在linux根目录下执行make help,会输出以下内容(由于打印较长,这里采用分屏显示):
一 kernel编译系统概述_第1张图片
                                          图1.1
一 kernel编译系统概述_第2张图片
                                          图片1.2
一 kernel编译系统概述_第3张图片
                                          图片1.3
它支持的目标大致包含以下几部分:
(1)清理相关的目标
(2)配置相关的目标
(3)通用目标
(4)静态分析目标
(5)kernel自测目标
(6)kernel打包相关的目标
(7)文本相关的目标
(8)架构相关的目标
(9)一些通用的选项
    显然,我们最关心的是linux内核的生成过程,故我们采用以下顺序来组织本文,在涉及到架构相关的内容时,本文都以arm的aarch64为例。
2.配置相关目标
  make menuconfig的执行过程分析
3.通用目标
  (1)make vmlinux的执行过程分析
  (2)make modules的执行过程分析
  (3)其它通用目标的执行过程
4.清理目标的执行过程分析
5.通用命令行选项的用法介绍
  (1)V选项介绍
  (2)O选项介绍
  (3)C选项介绍
6.makefile.build文件的分析

你可能感兴趣的:(编译)