Centos7下编译linux内核

2,645 阅读3分钟

分布式与云计算课程的实验一要求是自己分别在Linux环境和Windows环境中编译安装最新版的Linux内核,期间趟了很多坑,因此在这里记录一下正确并且简便的步骤,方便以后查阅和读者的借鉴。

一、环境说明

使用了Centos7.8,用于编译的linux内核版本为5.5.9(截至2020年3月17日官网最新的稳定版本)。

二、解压内核

1、将在官网下载好的内核文件上传到linux,如图所示。

2、解压到/usr/src/kernels目录下

三、配置编译参数

如果没有升级自带GCC的话,需要升级GCC,否则无法满足新版本内核的编译要求,升级过程可以参考三条命令在Centos7下升级GCC 也可以自行查阅相关资料。

1、内核的编译参数非常多,配置的方式也有很多种,为了保持对当前系统的兼容,我选择了在已有内核编译参数的基础上进行配置。把已有内核的编译配置copy过来:

2、在已有内核基础上进行配置:

这个命令的意思是:.config中有的就不再配置了,只列出这里面没有的让用户选择。输入这条命令后,就会有一个接一个的选项让你选择,懒得看就一路回车就行了,此时会按默认配置。敲回车大约敲个两三分钟的样子,然后配置就完成了,在源码根目录下会生成一个.config文件,这就是这次编译的参数配置,之前copy过来的.config文件变成了.config.old。

四、编译源码

这里可能会爆一些错,按照要求安装需要的依赖包就行了

其中,“make all”是编译所有选择的模块,“-j4”是可选参数,表示允许4个任务同时进行,这样比较快,4是我机器中CPU核的个数。  这个过程通常比较慢长,跟选择编译的项目、硬件性能有关,我使用了4核,最终耗时2小时。

五、安装内核

编译只是把源码变成可执行文件,但目前为止,这些可执行文件并没有被放置到相应的目录下,新内核也没有注册给引导程序。  安装模块:

执行完这条命令,内核模块的可执行文件会被copy到/lib/modules/下,进入这个目录可以看到有一个名为5.5.9的文件夹,这里面便是这个内核模块的可执行文件。  注册启动项:

这个命令是将该内核注册给引导程序,当开机启动的时候,引导程序会调用注册给它的内核来启动系统,如果有多个内核,用户可以选择从哪个内核启动。

先查看一下当前的系统默认内核版本:

六、将新版本内核设置为默认启动内核

1、修改启动文件

将新内核的bzImage文件拷贝到/boot目录下

将新内核的System.map文件拷贝到/boot目录下

将原来的系统默认System.map文件删除,并对刚刚拷贝到/boot目录下的System.map-5.5.9文件做一个软连接并命名为System.map以取代刚刚被删除的System.map。并在/boot目录下生成相应的init文件。

0表示 /boot/grub2/grub.cfg 文件中排在第一位的 menuentry 段,这么设置后系统默认进入的内核就是新内核了。

重启后在开机界面可以看到已经出现了新内核的选项,不选择默认系统进入的就是新安装的5.5.9版本的linux内核。

查看系统内核版本可以看到这时已经发生了更新。升级内核成功!

怎么在Windows下编译安装Linux内核目前还没有头绪,如果有小伙伴知道怎么做的欢迎在下面给我留言,大家一起进步o(∩_∩)o 哈哈