一 kernel编译系统概述

    xiaoxiao2022-07-13  150

        内核的编译系统主要由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,会输出以下内容(由于打印较长,这里采用分屏显示):                                           图1.1                                           图片1.2                                           图片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文件的分析

    最新回复(0)