Linux内核编译安装笔记
内核版本与下载
- 版本号 4.9.16
- 下载地址
预备知识
- menuconfig与Makefile
-
Linux内核根目录下的
scripts
文件夹
scripts
文件夹存放的是跟make menuconfig
配置界面的图形绘制相关的文件 -
arch/$ARCH/Kconfig
文件、各层目录下的Kconfig
文件
用于不同硬件平台生成整个配置界面选项(Kconfig是整个linux配置机制的核心) -
Linux内核根目录下的的
.config
文件、arch/$ARCH/configs/
下的文件
通过读取arch/$ARCH/configs/
下的一个预定义的配置文件生成界面,在手动配置后生成根目录下的.config
文件,用于最终的编译配置 -
Linux内核根目录下的
include/generated/autoconf.h
文件
当配置保存退出后,会根据.config
的信息生成一些make时需要的宏信息,这些宏信息就保存在include/generated/autoconf.h
中,用于预编译。 -
Linux内核根目录下的makefile文件、各层目录下的makefile文件
当我们增加一个功能模块时,在生成include/generated/autoconf.h
中的预编译信息的同时,还需要生成编译该功能模块的makefile,并修改它的上层makefile文件。
-
准备工作
- 安装make
- 安装gcc
- 安装ncurses
编译内核
-
清理源代码树
执行make mrproper
命令清理源代码树,包括过去曾经配置的内核配置文件.config
都将被清除。即进行新的编译工作时将原来老的配置文件给删除,以免影响新的内核编译。(但是一般情况也可以不执行这条命令,因为内核编译是增量编译,清除之后又要从头开始编译,浪费时间). -
配置内核
执行make menuconfig
以图形界面配置内核。
以second extended fs suppor
为例,使用上下方向键移动光标,拍打空格进行编译进内核
、模块
、不选择
进行功能制定,对应的图标变化为*
、M
、(空格)。进入界面中移动光标选中
file system
项目,回车进入其中,上下移动光标到second extended fs suppor
,使用空格将*
改成M
,使用左右键去选择保存,。。。退出。 -
生成依赖关系
执行make dep
-
开始编译
执行make -j4
安装模块和内核
-
安装模块
执行make -j4 modules_install
。此过程是将模块文件复制到文件系统中相应的目录下。 -
安装内核
执行make install
。此过程将在目录/boot
下生成- 内核引导镜像文件
vmlinuz
,该文件就是对应版本的内核系统,由vmlinux
压缩而来。 - 初始RAM磁盘镜像文件
initrd
,该文件是一个临时根文件系统,用来支持灵活正确的加载真正的内核系统vmlinuz
。
- 内核引导镜像文件
修改默认启动版本
- 列出当前启动版本
grub2-editenv list
- 列出所有的启动版本
grep ^menuentry /boot/grub2/grub.cfg | cut -d "'" -f2
- 修改启动版本
grub2-set-default "CentOS Linux ... 7 (Core)"
遇到的问题
CentOS
中使用yum install [xxx]
安装
- 需要
bc
的程序,尚且不知道那个功能模块需要。 - 需要
openssl-devel
开发库,过滤.config
文件后,尚且不知道哪个功能模块需要。