写在前面:

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

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

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

一、下载需要的内核

二、将下载的内核代码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

a4da1085ccf7b3cdc950c3b869f30f54.png

五、编译

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

sudo make –j8 或者sudo make

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

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

以下为编译时截图:

3c8e05842bb2c1974cc6b268071539a4.png

编译完成后如下图所示:

06038dfd6d35d5ddde55a0430374577b.png

六、安装

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

sudo make modules_install //安装内核模块

sudo make install //安装内核

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

64d1afbf9e3e7537a1e90949e35a8c50.png

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

f0804710a73fbdbf8f92f69fc2bb750e.png

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

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

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

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

uname -a

uname -r

5df237ad37bb947c993a362f1f653a29.png

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

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

七、启用编译好的内核

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

gedit /etc/default/grub

1f72e21d14a9d6888d4c8a82c9a8a23f.png

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

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

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

sudo update-grub

513300dcea2a6e1cdd9a8ae28bbbd7a2.png

设置成功后重启:

重启后出现如下菜单:

79d5776c3004f1e02969a250ad36723e.png

进入到Previous Linux versions选项中

36f2cb851fd2fb7a1397e040188760a2.png

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

6aaf04d4898f70eca6508fec80f14863.png

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

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐