前期准备

准备文件

debian系列(省略自定义配置)
下载源码:Kernel内核,建议下载stable,并解压到本地(命令省略),下面路径均以内核源码文件夹为根目录

安装需要的依赖:

apt install bc binutils bison dwarves flex gcc git gnupg2 gzip libelf-dev libncurses5-dev libssl-dev make openssl pahole perl-base rsync tar xz-utils

配置文件准备

提取原系统官方内核的配置文件、用别人现成的,或者自己配置(建议前两者),在/boot/config-xxxxxxxx,改名成.config

合并配置文件

解压内核文件夹,然后进入文件夹下,把刚刚.config文件复制进内核源码文件夹根目录
使用命令:

make olddefconfig

(用途:更新处理“.config”文件,因为新内核的配置可能有更新,使用这个命令会把新内核的配置文件和提取的".config"文件做整合,整合成新的文件)。

教程说法:要更新一个已有的 .config 文件,我们使用 make 命令搭配 olddefconfig 参数。
简单解释一下,这个命令的意思是使用 旧的、默认的配置。这将使用“旧的配置文件”(当前保存为 .config,这是你发行版配置的一份直接副本),并检查从上一版本以来 Linux 代码库中新加的任何配置选项。如果找到任何新的、未配置的选项,该选项的默认配置值会被使用,并会对 .config 文件进行更新。原来的 .config 文件将被重命名为 .config.old 进行备份,并将新的更改写入至 .config 文件。

关闭启用模块签名的选项

(默认情况下,计算机不包含这个证书,否则在之后进行构建时,可能导致构建失败。):

./scripts/config --file .config --set-str SYSTEM_TRUSTED_KEYS ''
./scripts/config --file .config --set-str SYSTEM_REVOCATION_KEYS ''

构建开始:

配置内核的版本标签:

./scripts/config --file .config --set-str LOCALVERSION "-版本标签"

构建命令

make -j8

数字是线程数

编译模块(可选)

make modules

会根据Makefile文件中的指令来编译源代码

安装开始:

编译安装模块

make modules_install -j8

可以通过在命令末尾添加 INSTALL_MOD_PATH=/to/path
指定输出文件夹默认是:/lib/modules/<kernel_release>-<localversion>

编译安装头文件(可选)

make headers_install

可以通过在命令末尾添加 INSTALL_HDR_PATH=/to/path
指定输出文件夹,默认是:/usr/include/linux

编译安装内核:

make install

安装到/boot目录

收尾:

刷新grub引导内核列表:

grub-mkconfig -o /boot/grub/grub.cfg

卸载内核:

删除内核模块

rm -rf /lib/modules/<kernel_release>-<localversion>

删除 Linux 内核本身

rm -vf /boot/{config, System.map, vmlinuz, initrd.img}-<kernel_release>-<localversion>

参考文献:
Linux内核5.x版本编译