编译Linux Kernel -- Version 4.9.153

我使用的是kernel 4.9.153版本,debian上测试过,但是编译环境可以是任何linux系统。

第一步: 下载tarball

kernel.org 下载一个稳定版的kernel包,如linux-4.9.153.tar.xz, 然后解压出来到linux-4.9.153文件夹

第二步:装好所需的工具

sudo apt install build-essential bc python libncurses5-dev libncursesw5-dev

然后重启一下

可以查看一下当前自己系统的kernel 版本(结果根据自己系统不同而不同):

uname -r
# 我的机器上是 :
4.9.0-8-amd64

第三步: 确认一下kernel版本

进入解压后的文件夹linux-4.9.153, 然后看一下Makefile:

$ head -n 5 Makefile
VERSION = 4
PATCHLEVEL = 9
SUBLEVEL = 153
EXTRAVERSION =
NAME = Roaring Lionus

第四步: 创建配置文件.config

需要在kernel源文件根目录下(linux-4.9.153下), 创建一个配置文件.config, 在里面可以指定非常多的配置项。
为了方便起见,可以使用当前系统的配置文件,它在/boot下。
可以使用下面命令通过本机配置来创建.config文件,并且验证不合格的参数值

$ make olddefconfig

之后可以使用菜单的方式查看和改动.config:

$ make menuconfig

保存退出后,它会创建备份配置文件.config.old, 用新的配置覆盖 .config

可以设置2个值:

  1. CONFIG_LOCALVERSION="-mykernel"
    自己设置个名字后缀,用来区分kernel名,如-mykernel
  2. CONFIG_BLK_DEV_LOOP=y

可以使用 scripts/diffconfig .config.old .config 来对比新老配置文件的区别

可选步骤——localmodconfig

执行编译的时候,会有很多时间花在了编译和安装 kernel 的 modules上,但是实际上有很多module都是用不到的。所以可以根据当前系统中已经加载的module,来重新产生一个更小的.config文件,这样这个文件中只包含到当前使用到的modules,能够大大减小编译时间。

在内核根目录下,执行

make localmodconfig

它会根据当前系统中运行的modules,来修改.config文件。

因为执行这一句的时候,会被询问很多问题,所以可以直接按回车来默认选项,或者是直接输入:

yes '' | make localmodconfig

执行完之后,就会产生一个更小的配置文件(配置文件本身可能占用空间更大,但是内部配置的modules更少了)。
然后确保修改

CRYPTO_CRC32C_INTEL=y

最好是在运行这一步之前,创建一下虚拟机镜像,万一这一步操作之后导致编译失败,直接回到之前,使用原始的.config文件用来执行第五步以及后面的步骤

第五步:编译 kernel

在kernel的根目录下运行下面的命令,其中N替换成本机器的核心数(4核就是 make -j4

make -jN

根据每台机器性能不同,这次编译时间可能多达3个小时

第六步:安装kernel到启动项

在确认第五步正常运行,没有报错的情况下,运行下面2个代码(使用root权限):

sudo make modules_install    # 安装所有已编译的kernel modules
sudo make install			 # 安装kernel镜像到 /boot/ 

然后可以去/boot/下面查看,应该多了这3个文件:

  • vmlinuz-4.9.153-mykernel
  • initramfs-4.9.153-mykernel.img
  • System.map-4.9.153-mykernel

不同kernel版本 install出的文件可能名称会略有不同,但是这个名字 -mykernel 就是刚才自己配置的CONFIG_LOCALVERSION内容

第七步: 重启系统,在开机时选择kernel

sudo shutdown -r now

重启系统,进入启动菜单选项的时候,找到和自己编译的kernel相同的项启动。
进入桌面后可以查看kernel版本:

uname -r
4.9.153-mykernel

你可能感兴趣的:(Linux)