Linux 编译并更换内核

Posted Li-Yongjun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 编译并更换内核相关的知识,希望对你有一定的参考价值。

一、内核简介

# 核心

内核是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。

# 开源

Linux 的一个重要的特点就是其源码公开性,全世界任何一个软件工程师都可以将自己认为优秀的代码加入到其中。

好处,拥有了内核的源程序,我们可以了解系统是如何工作的。其次,我们可以针对自己的情况,量体裁衣,定制适合自己的系统,这样就需要重新编译内核。再次,我们可以对内核进行修改,以符合自己的需要,这相当于我们自己开发了一个操作系统,尽管大部分的工作已经做好了。


二、为什么要重新编译内核

Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。

通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、 更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。
为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑:

  • 自己定制编译的内核运行更快(具有更少的代码)
  • 系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)
  • 不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞
  • 将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些

三、获取内核源码

1. 网站下载

Linux内核版本发布的官方网站是http://www.kernel.org。我们可以到这里下载内核源码和相应的补丁文件。

2. 指令安装

Redhat系

yum install -y kernel-devel

Debian系

apt install linux-source

使用指令下载的源码会放在/usr/src目录,不过使用指令下载的源码不一定和当前系统的内核版本吻合。若想下载指定版本的源码可以使用如下命令

liyongjun@liyongjun-VirtualBox:~$ sudo apt install linux-source-4.15.0

四、编译安装

编译

liyongjun@liyongjun-VirtualBox:~$ cd /usr/src/linux-source-4.15.0/linux-source-4.15.0
liyongjun@liyongjun-VirtualBox:~$ make

耐心等待几小时。。。

安装

liyongjun@liyongjun-VirtualBox:~$ sudo make install		// 安装内核
liyongjun@liyongjun-VirtualBox:~$ sudo make modules_install		// 安装内核模块

五、修改引导项

内核安装完成后,重启系统,uname -a 发现内核没有发生变化,

1.这时候就要修改grup

sudo vim /etc/default/grub

GRUB_TIMEOUT=0修改成GRUB_TIMEOUT=5想在启动时让它等待 5s 让我选择内核版本,

然并卵。。。

2.将GRUB_DEFAULT=0修改为GRUB_DEFAULT="1 >4"其中 1 是固定的,4 是哪来的呢?

cat /boot/grub/grub.cfg

看到需要更换的内核 Linux 4.15.18 在 submenu 的第 5 个 menuentry 。所以这里填 4 (序号从 0 开始),注意"1 >4"的 1 后面有个空格也是不可缺少的。

改完后执行下面命令进行更新:

sudo update-grub

重启,查看内核版本

liyongjun@liyongjun-VirtualBox:~$ uname -r
4.15.18

内核成功被更换。

以上是关于Linux 编译并更换内核的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统手动更换内核

centos8编译安装指定版本的内核

Mac下重新编译Linux内核

LINUX PID 1和SYSTEMD PID 0 是内核的一部分,主要用于内进换页,内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程(代码片段

Linux 内核编译 Linux 内核 ② ( 解压内核源码 | 查询当前 Linux 内核版本号 | 进入并查看 linux 内核源码目录 )

更换内核后重编virtualbox内核模块