Ubuntu 下编译新的 Linux 内核
前言
这是一次操作系统布置的作业。本来第一次是布置的课后作业,只是说让编译一个新的 Linux 内核,然后我就按照本文的步骤编译并启用了新的内核。后来做实验时布置的任务又说是 “裁剪内核并编译”,真是有点懵逼。实验之前,一直在纠结裁减内核,究竟怎么裁剪嘛!因为在编译内核的过程中,有一个步骤是 $ sudo make menuconfig
,这个里面可以选择或者去掉内核的模块,其实这里就是相当于裁剪内核了,而且我们就是在不知道裁剪内核这个概念的情况下一路走下去,最后安装的内核也是裁剪之后的内核。
最后老师在实验之前,讲了,裁剪内核这个实验我们之前做过。好吧,果然,在他眼里,裁剪内核和编译一个新的内核没有什么本质的区别。
下载内核
首先,到官网(https://www.kernel.org/)下载内核。
下载好之后,因为我这个 Ubuntu 是 Windows 下的虚拟机,所以,直接将文件拖入虚拟机的任意一个文件夹即可。
解压 tar.xz 包
进入刚刚放置内核文件的目录,右键解压,或者在命令行解压
1 |
|
注意,tar -Jxvf
的 J
要大写。
安装依赖
安装之前,先执行以下命令
1 |
|
一般来说,安装下面的 9 个依赖就好了
1 |
|
开始编译新的内核
进入解压出来的目录
1 |
|
这里可以给虚拟机拍一个快照。这是为了后续出错时,可以回到这个点。(如果不知道快照,可以自行搜索引擎搜索,这个真的很方便)
使用现存内核的配置文件
1 |
|
应用现存配置文件
1 |
|
这个命令的作用是,读取现有的 .config
(注意,这个是隐藏文件,使用 ls
命令无法查看)文件,并提示用户输入当前内核源中在文件中找不到的选项。 当采用现有配置并将其移至新内核时,这很有用。
遇到需要选择的选项直接选 y
或者回车即可。
仅安装已有 module
1 |
|
配置其他编译选项
1 |
|
这个命令执行完之后会出现一个图形界面,如果需要裁剪内核,那么,我们需要对这里的选项进行一些配置。这里我们直接使用右方向键,跳到 Exit
选项,然会回车退出即可。
开始编译
输入以下命令开始编译
1 |
|
这里的 -j
选项后面的数字表示使用多进程并发编译的意思,我这里选择 4,也可以选择 2 或者不要 -j4
这个选项。我这里因为使用了 4 个进程,所以编译基本在两分钟以内就完成了。
以上表示 make 好了。
安装 Linux 内核
返回上一级目录,然后将文件夹移动到 src 目录
1 |
|
进入新目录,然后安装 modules
1 |
|
1 |
|
以上表示 modules 安装完成。
安装内核
1 |
|
以上表示新内核安装完成。
检验安装成果
执行以下命令检查内核版本
1 |
|
之前是 5.11.7
重启 Ubuntu 18.04.5 系统并检查内核版本,结果如下
发现内核版本变成了 5.11.11
,表明安装内核成功。