为了尝试Linux最新的Kernel版本,在Ubuntu18.04.2系统上编译了5.2.1版本的Kernel系统。记录了Kernel编译安装卸载等的过程。

1. 准备 PRE

  1. 在Kernel的官方网站下载最新的Kernel. Kernel Download.

  2. 安装依赖。

   sudo apt-get install build-essential
   sudo apt-get install libelf-dev
   sudo apt-get install libncurses-dev
   sudo apt-get install flex
   sudo apt-get install bison

2. 编译

2.1 Config

首先将原有的Kernel的config复制到Kernel的源码根目录。

 cd /path/to/source/code/
 cp /boot/config-xxx ./

应用现存配置文件:

 sudo make oldconfig

仅安装已有module:

 sudo make localmodconfig

使用图像界面对其余选项作配置。输入:

 cd /path/to/source/code/
 make menuconfig

跳出如下界面:

Linux Kernel Config

可通过选项修改配置。比如,如果Kernel支持NTFS,则需要配置如下: [1]

File systems —>

DOS/FAT/NT Filesystems —>

<*> NTFS file system support
<*> NTFS write support

同时需要FUSE支持,这里需要用到NTFS-3G的支持。 FUSE support (NTFS-3G) The following kernel options must be enabled for NTFS read/write capabilities over FUSE in Linux:

KERNEL Enabling NTFS over FUSE using NTFS-3G

File systems —>

<*> FUSE (Filesystem in Userspace) support

The sys-fs/ntfs3g package is also required (see the emerge section below).

2.2 make编译

Config完成后,使用make命令完成编译。

 make

可以单独编译Modules:

 make modules

3. 安装 Install

sudo make install

可单独安装Modules

sudo make modules_install

3.1 Strip

默认情况下,模块安装有调试标识,导致其模块软件的体积很大。在安装和编译过程中可以使用INSTALL_MOD_STRIP的make变量,通过指定INSTALL_MOD_STRIP=1来使得编译安装的模块不包含调试标识,缩小体积[2]

make INSTALL_MOD_STRIP=1 modules
sudo make INSTALL_MOD_STRIP=1 modules_install

4. 卸载 Uninstall

直接通过删除的方式卸载:

sudo rm -rf /lib/modules/xxx
sudo rm -rf /usr/src/linux-headers-xxx
sudo rm /boot/*xxx*
sudo rm /var/lib/dpkg/info/linux-xxx

其中xxx一般为版本号。

删除完成后,使用sudo update-grub更新Grub菜单。

sudo update-grub

Reference

[1]: NTFS, [OL], 2019-07-16, https://wiki.gentoo.org/wiki/NTFS

[2]: Why is INSTALL_MOD_STRIP not on by default?, [OL], 2019-07-16, https://superuser.com/questions/705121/why-is-install-mod-strip-not-on-by-default