Ubuntu 编译安装内核
本文是一个实操笔记,记录本地如何编译一个内核版本并安装到系统中使用。我使用的环境如下:
1 | $ cat /etc/issue |
以上表明我使用的是 Ubuntu 20.04.5,机器是 Intel 4 核 8 线程 CPU,每个频率都是 2.60GHz。我编译的版本是 Linux kernel 主线的版本,相当于从 github 上直接拉下来的代码,我下的代码最新的提交是 c1649ec55708ae42091a2f1bca1ab49ecd722d55。以下方法不保证比较老的内核也可以编译通过。
环境
因为我之前已经编译安装过内核,所以一些工具依赖我很早之前就搞好了,以下是我在网上找的需要的工具,需要提前安装下:
1 | $ sudo apt update |
下载内核代码
可以到 https://www.kernel.org/ 这个网站下载想要的版本,如果这个网站没有你想要的版本,可以到 https://mirrors.edge.kernel.org/pub/linux/kernel/ 找。当然你也可以直接从 github 仓 https://github.com/torvalds/linux 拉取代码,如果 github 拉取比较慢,可以从 gitee 镜像 https://gitee.com/mirrors/linux_old1 拉取,我的代码是从 gitee 镜像拉取的。
编译
为了不出现什么奇怪的问题,我是直接使用 /boot 下面的 config 文件编译的,为了不污染内核代码,我创建了一个 out 目录来做编译工作,如:
1 | $ cd linux_old1 |
为了编译成功,需要编辑 out/.config,修改 CONFIG_SYSTEM_TRUSTED_KEYS 这一项为 CONFIG_SYSTEM_TRUSTED_KEYS=""
。
接下来告诉内核使用 out/.config 来配置:
make O=out menuconfig
,然后选择
接下来就开始真正的编译了,为了查看编译消耗时间,我加了个 time
命令,如果不想看编译耗时,time
就不用加:
1 | $ time make O=out -j8 |
看 total
字段,我编译花了将近 1 个半小时,我这是 2016 年买的电脑。
因为我是 x86 平台,所以默认编出来的是 out/arch/x86/boot/bzImage
。vmlinux 文件在 out
下。
安装
首先安装内核模块:
1 | $ sudo time make O=out modules_install |
安装内核:
1 | $ sudo time make O=out install |
更新 grub:
1 | $ sudo update-grub |
重启选择内核进入。