虚拟机下Centos7编译Linux内核
一、 环境版本:
准备好VMware Workstation Pro 14和CentOS-7,首先在虚拟机中安装Centos7,配置好静态网络,通过ping测试,保证网络,后面要更新操作。我安装的是桌面版,一开始是选择的最小安装,后面使用的时候有问题,建议安装桌面版本,在输入命令行的时候可以粘贴复制比较方便。记得在安装的时候,选择手动分区,将/boot分区大小保证在2G以上,不然后面编译内核的时候可能有问题。这是在虚拟机上做的实验,可以把cpu设置成4核的,内存设置成2G,这样可以快速的编译。
二、实验过程:
- 配置好虚拟机,查看网络设置
- 搭建编译环境
- 解压内核
先到官网 www.kernel.org上获取内核源代码包,本次用于编译的linux内核版本为5.5.9 。接下来进行文件挂载,把内核文件放在上面提到的宿主机自己的windows和虚拟机之间的共享文件夹,我的宿主机共享文件夹是 share,挂载到了 CentOS 的 /mnt/hgfs/ 目录下。CentOS7的内核源码都了/usr/src/kernels/下,所以我也将下载的源码解压到该路径下。
切换到 root 权限,将内核文件解压到指定目录 /usr/src/kernels 目录下,是 CentOS 内核所在的目录,解压到/usr/src/kernels目录下后,有名为Linux-5.5.9的文件夹。sudo mv linux-5.5.9.tar.xz /usr/src/kernels入
移动到指定目录
再解压sudo tar -xvf linux-5.5.9.tar.xz
- 配置编译参数
内核的编译参数非常多,配置的方式也有很多种,为了保持对当前系统的兼容,先把已有内核的编译配置copy过来,在已有内核编译参数的基础上进行配置。
进入源码根目录:
已有内核的编译配置copy过来,已有内核基础上进行配置,.config中有的就不再配置了,只列出这里面没有的让用户选择。配置完成,在源码根目录下会生成一个.config文件,这就是这次编译的参数配置,之前copy过来的.config文件变成了.config.old。
或者使用make menuconfig配置编译环境,执行 make menuconfig,开始选择配置项
执行上一步 make menuconfig 之后,直接保存退出就可以了,它会使用 CentOS 内部的配置文件作为这次编译的配置文件。
5.编译
配置项选完,config 配置文件生成之后,就可以开始编译了,编译需要 elfutils-libelf-devel 的支持,先执行下面的命令安装一下:
执行编译:
其中,“make all”是编译所有选择的模块,“-jn”是可选参数,表示允许n个任务同时进行,这样比较快,这个过程通常比较慢长,跟选择编译的项目、硬件性能有关,最终耗时1小时40分钟。(15.12-16.54) - 安装内核
编译只是把源码变成可执行文件,但目前为止,这些可执行文件并没有被放置到相应的目录下,新内核也没有注册给引导程序。上面配置项有的编译进核心,有的编译成模块,所以安装也分为两个部分,模块安装和核心安装。
执行make modules_install 开始安装模块:
执行执行 make install 开始安装核心:
这个命令是将该内核注册给引导程序,当开机启动的时候,引导程序会调用注册给它的内核来启动系统,如果有多个内核,用户可以选择从哪个内核启动。 执行完成之后,就可以在 /boot/ 目录下看到新编译的内核了。
7. 更新引导
使用 grub2-mkconfig 来更新引导文件,下面的命令会根据 /boot/ 目录下的内核文件自动更新 grub 文件
执行完后,下次启动系统就可选择我们编译的内核了。如果想修改默认的启动内核,可以通过修改 /etc/default/grub 文件来实现。重启系统,如果看到两个内核,说明已经成功了,你可以自由的选择哪个内核。