0 个人系统环境(Personal system environment)

uname -a
Linux ubuntu 4.10.0-28-generic #32~16.04.2-Ubuntu SMP Thu Jul 20 10:19:48 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
cat /etc/issue
Ubuntu 16.04.3 LTS \n \l

System:Ubuntu 16.04
Kernel version:4.10.0

1 下载内核源码(Download kernel source code)

官网下载地址(Official download address):http://www.kernel.org/
清华镜像地址(Tsinghua mirror):https://mirrors.tuna.tsinghua.edu.cn/kernel/

为了简便,方便配置内核,下载与当前系统同一版本的内核,这样可以直接用当前系统的config文件。
eg,我在v4.x文件夹中选择下载了linux-4.10.1.tar.gz
In order to facilitate the configuration of the kernel, download the same version of the kernel as the current system, so that you can directly use the config file of the current system.
eg, I chose to download linux-4.10.1.tar.gz in the v4.x folder.

2 将内核文件拷贝到Linux系统中并解压(Copy the kernel file to Linux & unzip it)

答主是使用的虚拟机,因此直接拖动到了虚拟机中。如果是服务器,可以使用scp命令等上传到服务器。

tar -zxvf linux-4.10.1.tar.gz

3 将当前主机的config文件复制到内核文件夹,命名为.config(copy the config file of current system to kernel folder)

config文件在/boot目录下。
The config is in the /boot directory.

cd linux-4.10.1
cp /boot/config-4.10.0-28-generic .config

4 配置(Configuration)

make oldconfig

如果想修改配置,可以使用make menuconfig命令来配置。
If you want to modify the configuration, you can use the “make menuconfig” command to configure.

5 编译(Compile)

你也许需要先安装kernel-package,libssl-dev等文件(Linux系统下的一些组件)。如果安装的比较慢,请更换为国内源。
you may need install kernel-package,libssl-dev:

sudo apt install kernel-package
sudo apt-get install libssl-dev

答主在编译的时候,还报了下面的错误:

install: cannot stat 'REPORTING-BUGS': No such file or directory

因此在编译之前,可以touch一个REPORTING-BUGS文件:

touch REPORTING-BUGS

然后就可以编译啦:

make-kpkg clean
make-kpkg --initrd kernel-headers kernel_image

然后慢慢等待几个小时(我花了4个小时)。然后会在内核代码的上一级目录生成deb包。
Wait for a few hours(may be 4 hours), then the deb package will be generated in the upper level directory of the kernel code.

6 安装deb(Installation)

cd ../
# 可以看到上级目录有文件:
# linux-headers-4.10.1_4.10.1-10.00.Custom_amd64.deb
# linux-image-4.10.1_4.10.1-10.00.Custom_amd64.deb
dpkg -i *.deb
# 安装完成后会看到系统更新grub

然后重启系统即可以看到新编译的内核的选项。
Then reboot the system.

后续:为什么编译完成后重启没有看到grub呢?

因为系统可能将grub隐藏啦!
开机后,编辑/etc/default/grub文件:

vi /etc/default/grub

之后注释掉GRUB_HIDDEN_TIMEOUT=0:

GRUB_DEFAULT=0
# GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true

更新grub并重启:

sudo update-grub
reboot

现在是不是有了呢?
可以进入Advanced Options for Ubuntu选项,然后就可以看到刚刚新编译的内核了!

0
Posted in Linux kernel technology

Leave a Comment:

电子邮件地址不会被公开。