Linux内核配置系统与内核编译流程

390 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1.1 Linux内核配置系统****

Linux内核的配置系统由三个部分组成,分别是:

  1. Makefile:分布在 Linux 内核源代码中的 Makefile,定义 Linux 内核的编译规则;
  2. 配置文件:给用户提供配置选择的功能;
  3. 配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于 Make config、Make menuconfig 和 make xconfig)。这些配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码)。

1.2 内核编译的流程****

内核配置流程主要如下:

(1) 下载并解压内核

内核下载官网:www.kernel.org/

解压内核:tar xf linux-XX.tar.xz

(2) 清理工程:make distclean  

通常是第一次编译时需要清理一下工程文件,如果后续通过make menuconfig图形化界面追加配置了内核,千万不要执行这个清理命令,不然配置都会被清掉。

(3) 配置内核:

在编译前都必须使用配置命令在内核根目录下进行一次配置(即使是使用默认的配置文件也必须这样做)。内核配置时实际上就是修改.config文件。一般常见的硬件平台在内核目录arch/<平台>/configs/文件夹下会包含有默认的配置文件,可以使用cp命令将其覆盖内核根目录下的.config文件。

常见配置命令有以下几种:

make xxx_defconfig:xxx一般是半导体厂家根据soc的架构或者名称命名的,xxx_defconfig是半导体厂家提供的内核默认配置文件;
make menuconfig:在默认配置基础上,通过图形化界面追加一些配置选项;

在配置时,每一项都有几种选项,分别为Y,N,M。

  • Y:代表将此项编译入内核中
  • N:代表不将此项编译
  • M:代表将此项编译为模块,在需要使用到的时候再加载入内核 (4) 编译内核和模块:

配置后会在内核根文件目录下生成一个.config文件,里面就是具体的配置的内容。内核编译时会根据内核目录下的.config文件进行编译,生成内核模块和vmlinuz,initrd.img,Symtem.map文件。

(5) 安装内核和模块:sudo make modules_install install

复制模块文件到/lib/modules目录下、复制config,vmlinuz,initrd.img,Symtem.map文件到/boot目录、更新grub。

(6) 其他命令:

make mrproper:在每次配置并重新编译内核前需要先执行“make mrproper”命令清理源代码树,包括过去曾经配置的内核配置文件“.config”都将被清除。即进行新的编译工作时将原来老的配置文件给删除,以免影响新的内核编译。

make dep:生成内核功能间的依赖关系,为编译内核做好准备。