Ubuntu编译Linux内核并设置开机选择内核版本

写在前面:

tar.xz解压命令:tar vxJf linux-x.x.tar.xz

本文主要讲解内核的编译流程以及grub选项的设置,有什么问题欢迎评论讨论交流。

下面为编译内核流程,由于最近项目需要Ubuntu1204,因此以Ubuntu1204为例,其他版本使用同样的操作,题主在1604上也使用的同样的操作:

一、下载需要的内核

https://mirrors.edge.kernel.org/pub/linux/kernel/

二、将下载的内核代码cp到/usr/src目录下并解压

三、安装基本的工具和相关软件

sudo apt-get install libncurses5-dev libssl-dev 

sudo apt-get install build-essential openssl 

sudo apt-get install zlibc minizip 

sudo apt-get install libidn11-dev libidn11

上述工具无绝对,在安装的过程中要注意变通,不要遇到一点问题就卡死,如果有部分工具装不了,可继续往下执行。

四、执行编译前配置工作

依次输入下列命令:

sudo make mrproper 

sudo make clean 

sudo make menuconfig

其中mrproper为清除编译过程中产生的所有中间文件,clean为清除上一次产生的编译中间文件,在menuconfig出现选择的图形化设置界面。

下载的源码第一次编译时可以直接使用

sudo make menuconfig

来进行配置。

menuconfig界面如下所示,如果没有特殊的配置,就直接sava->ok->exit->exit

Ubuntu编译Linux内核并设置开机选择内核版本_第1张图片

五、编译

执行命令,-jx,这里的x是计算机核数x2,如4核CPU就为-j8,20核cpu可以写为-j40,以多线程的方式进行编译,加快编译速度。

sudo make –j8 或者sudo make

同时要注意,如果你更改了内核源码中的内容,而且不能保证你编写的内容不会出现编译错误,推荐使用sudo make来进行编译,遇到编译错误能够及时停止,并能看到错误信息。-jx的编译方式,如果一个编译线程遇到错误,其他的编译线程还在进行,错误信息会被覆盖,而且不好排查(个人理解)。

原始下载的源码直接用 sudo make -j8编译即可。

以下为编译时截图:

Ubuntu编译Linux内核并设置开机选择内核版本_第2张图片

编译完成后如下图所示:

Ubuntu编译Linux内核并设置开机选择内核版本_第3张图片

六、安装

如果编译过程正确无误,下一步就是安装,使用如下命令进行安装:

sudo make modules_install        //安装内核模块
sudo make install      //安装内核

安装模块界面如下图所示:

Ubuntu编译Linux内核并设置开机选择内核版本_第4张图片

安装内核界面如下图所示:

Ubuntu编译Linux内核并设置开机选择内核版本_第5张图片

至此内核编译和安装就完成了。

编译和安装完成之后,是不是我们直接重启就会是我们最新编译的内核了呢,如果不是Ubuntu又是怎么选择的内核来进行启动呢。

首先我们先进行一个测试,安装完后直接重启,看一下内核有没有被我们新编译的内核替换:

重启后使用uname -r或者uname -a进行查看,其输出的信息如下图片所示。

uname -a
uname -r

Ubuntu编译Linux内核并设置开机选择内核版本_第6张图片

通过上述图片发现,Ubuntu1204的内核版本并没有被我们新编译的内核所替换,重启后还是原来的内核,那么我们要怎样启用我们编译好的内核呢。

这就是最开始所讲得设置grub的问题了,简单来讲如果我们编译的内核比现在Ubuntu中自带的内核版本高,那么reboot之后,我们编译的高版本内核就会直接被Ubuntu系统启用。如果我们编译的内核版本比自带的低,那么就要修改一下grub的配置选项,将开机选择内核版本的菜单栏显示出来(默认是不显示,通过修改配置文件显示)

七、启用编译好的内核

通过修改grub配置文件,在开机中显示选择内核版本的菜单栏,使用gedit打开配置文件,目录为/etc/default/grub。

gedit /etc/default/grub

Ubuntu编译Linux内核并设置开机选择内核版本_第7张图片

打开配置文件之后,我们看到最上面的代码有一些参数的配置,我们需要更改的参数就只有一个即GRUB_HIDDEN_TIMEOUT。

此配置将影响grub菜单显示。若设置此选项为一个常数,则将在此时间内隐藏菜单而显示引导画面。菜单将会被隐藏,如果注释掉该行,即:(#GRUB_HIDDEN_TIMEOUT=0)。则grub菜单能够显示,等待用户的选择,以决定进入哪个系统或内核。

因此我们要做的就是把这一行注释掉,然后输入以下命令,使修改生效:

sudo update-grub

Ubuntu编译Linux内核并设置开机选择内核版本_第8张图片

设置成功后重启:

重启后出现如下菜单:

Ubuntu编译Linux内核并设置开机选择内核版本_第9张图片

进入到Previous Linux versions选项中

Ubuntu编译Linux内核并设置开机选择内核版本_第10张图片

选择我们编译好的Linux-3.10版本即可,进入后,现在查看内核版本信息如下:

Ubuntu编译Linux内核并设置开机选择内核版本_第11张图片

Ubuntu已经启用了我们编译的内核,然后就可以开始在上面进行需要的开发了~

 

 

你可能感兴趣的:(Linux)