Linux内核知识-代码编译控制

    查看Linux 内核相关知识,首先学习到的是整套代码是如何实现编译的?介绍如下。

    1、Makefile文件

    Linux内核文件是通过Makefile文件组织编译的,每个目录下均存在Makefile文件,该文件里决定了哪些目录、文件需要编译,是以模块形式编译还是直接编译进内核。具体如下:

Linux内核知识-代码编译控制

图1

Linux内核知识-代码编译控制

图2 根目录下makefile文件将根目录内容包含进来

Linux内核知识-代码编译控制

图3 sound目录下文件列表

Linux内核知识-代码编译控制

图4 sound目录下makefile文件,将本目录下文件和目录包含进来

      2、makefile文件加载.config文件

      makefile文件将内核文件整个编译框架搭建起来了,通过makefile文件将所有的文件、目录都包含进来了。但是makefile自身不能决定哪些文件、目录真正需要编译,那谁来决定呢?

      .config文件决定了哪些文件、目录需要编译,根目录makefile文件通过如下语句“间接”将.config文件包含进来,并根据.config文件里面的变量的值,决定编译哪些文件。为什么是间接呢?因为makefile中所包含的auto.conf是将.config文件中的注释去掉,并根据顶层makefile文件中定义的变量增加了一些变量。

Linux内核知识-代码编译控制

       3..config文件的生成

       .config文件中变量的数值与“make menuconfig”启动的配置菜单中设置值是相同的,配置菜单中配置改变,.config文件里的内容也随着改变。.config文件就是配置内核时生成的。

       4.配置菜单的生成

       Linux内核中每个目录下都有一个makefile、Kconfig文件,Kconfig文件是各种配置页面的源文件,用于生成配置菜单,内核的配置工具读取各个Kconfig文件,生成共用户使用的用来配置内核的配置界面,配置完成后生成.config文件。


Linux内核知识-代码编译控制

Linux内核知识-代码编译控制

Linux内核知识-代码编译控制

Linux内核知识-代码编译控制

Linux内核知识-代码编译控制

Linux内核知识-代码编译控制

Linux内核知识-代码编译控制

Linux内核知识-代码编译控制

Linux内核知识-代码编译控制