1、从 kernel.org( kernel 组织网/) 下载内核源码
在 kernel.org 上你能看到几种类型的内核存在:
curl -L https://git.kernel.org/torvalds/t/linux-4.17-rc3.tar.gz -o linux-4.17-rc3.tar.gz
如果下载的是 stable 或 longterm 内核,还有对应的 sign 文件进行校验
gpg2 --locate-keys torvalds@kernel.org gregkh@kernel.org
xz -cd $代码文件 | gpg2 --verify $sign文件 -
2、安装必要的软件
sudo yum install -y gcc elfutils-libelf-devel ncurses-devel bc openssl-devel flex bison
3、解压源代码
tar -zxvf linux-4.17-rc3.tar.gz
4、将当前 kernel 的配置信息应用到新 kernel
cp /boot/config-$(uname -r) linux-4.17-rc3/.config
.config 中保存的就是内核编译的相关设置。它的内容大致是这样的:
tail linux-4.17-rc3/.config
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
CONFIG_SG_POOL=y
CONFIG_ARCH_HAS_SG_CHAIN=y
CONFIG_ARCH_HAS_PMEM_API=y
CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y
CONFIG_SBITMAP=y
CONFIG_PARMAN=m
# CONFIG_STRING_SELFTEST is not set
其中,以 # 开头的行就是注视行,这些 CONFIG_* 就是设置项,这些设置项与 linux 内核的各功能相对应,它的值有三种分别表示编译时的三种操作:
注意: 由于内核间功能的相互依赖十分复杂,因此不要尝试手工编辑 .config 文件,否则可能出现编译失败,或者编译后内核无法执行的情况。
5、配置 kernel
cd linux-4.17-rc3
make menuconfig

启用/禁用好模块后,选择 Exit 退出
6、编译kernel
make
这一步的耗时非常长,而且会占用很多空间,比如我编译完之后,大约占据了11G的空间。
7、将内核安装到系统中
编译完成后,就可以将生成的内核安装到系统中了,安装时需要 root 权限,安装过程分为两个阶段进行。第一个阶段是模块的安装:
sudo make modules_install
这会把编译后的模块安装到 /lib/modules 下
ls /lib/modules
3.10.0-693.17.1.el7.x86_64 4.17.0-rc3
这里 4.17.0-rc3 就是新安装的模块,第二阶段是安装内核二进制映像文件,并生成 boot 初始化文件系统映像
sudo make install
这会在 /boot 下生成新的内核映射文件。
ls -l /boot/*4.17*
-rw-------. 1 root root 38754397 May 5 06:59 /boot/initramfs-4.17.0-rc3.img
-rw-r--r--. 1 root root 3512799 May 5 06:21 /boot/System.map-4.17.0-rc3
-rw-r--r--. 1 root root 7238272 May 5 06:21 /boot/vmlinuz-4.17.0-rc3
其中
若在 Debian 及其衍生版本中编译内核,你会发现不会自动生成 initramfs-内核版本 文件,则需要执行下面命令手工生成
sudo update-initramfs -c -k 内核版本
8、设置 GRUB,从当前安装的内核启动
sudo grub2-set-default linux-4.17-rc3
重启后就能看到新内核了


