本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1.1 Linux内核配置系统****
Linux内核的配置系统由三个部分组成,分别是:
- Makefile:分布在 Linux 内核源代码中的 Makefile,定义 Linux 内核的编译规则;
- 配置文件:给用户提供配置选择的功能;
- 配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 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:生成内核功能间的依赖关系,为编译内核做好准备。