Linux 编译安装内核至指定版本

想升级 Linux 自带内核,编译内核过程的记录。

本文意在编译安装指定版本的内核用以实现某些功能或者兼容某些软件

1、下载源代码

# 以 4.9.39 版本为例
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.39.tar.xz

查看当前最新内核请到内核组织官网 kernel.org 点击此处跳转

2、解包文件至当前路径

xz -d *.tar.xz
tar xvpf *.tar

3、编译前的准备工作

(很多教程说必须放至在 /usr/src 这个目录中,实测后放哪都行。要是条件允许就按官方的说法放在/usr/src里,并且请确认可用空间大于10Gb
安装编译环境

# Debian/Ubuntu
apt-get install build-essential
# RedHat/CentOS
yum groupinstall "development tools"

4、进入目录后先做一次清除命令,预防有残余编译文件留下。

make mrproper && make clean

5、形成编译需要的内核参数配置表,用以下三种方法生成这个文件

a、用当前系统的配置参数:输入cp /boot/config-,然后按下 Tab 键,系统会自动填上该目录下符合条件的文件名,然后继续输入 .config,目的是使用在boot目录下的原配置文件。

cp /boot/config-<tab>
.config

b、用 #make defconfig命令获取当前系统参数

make defconfig

c、#make localmodconfig,问答式配置过程,想细心配置的,可以逐个逐条去看。实在不想看的,一路按着回车按默认设置就可以了。

make localmodconfig

d、#make oldconfig,建议用这种方式,通过命令界面配置内核,会自动载入既有的 .config 配置文件,并且只有在遇到先前没有设定过的选项时,才会要求你手动设定。

6、.config参数配置已经生成,如果感兴趣或者需要微调的,用 make menuconfig 进入一个半图形界面,很清晰看到即将编译的配置内容。(第一次编译出来的结果,iptables默认不支持nat,而且竟然不支持多虚拟IP,所以才进来微调的)

# Debian/Ubuntu
apt-get install ncurses-dev
# RedHat/CentOS
yum install -y ncurses-devel

7、开始编译,就一个命令

make

8、编译安装模块,这个过程很快。

make modules && make modules_install

9、安装新内核并自动配置启动文件

make install

10、使用新内核

reboot

删除旧内核的方法

Debian / Ubuntu

dpkg -l | grep linux-image

以 Debian 8 默认内核为例

root@kane:~# dpkg -l | grep linux-image
ii  linux-image-3.16.0-4-amd64     3.16.43-2+deb8u5                   amd64        Linux 3.16 for 64-bit PCs
ii  linux-image-amd64              3.16+63                            amd64        Linux for 64-bit PCs (meta-package)

以下命令可以移除指定版本内核

apt-get purge linux-image-3.16.0*
apt-get autoremove

RedHat / CentOS

rpm -qa | grep kernel

以下命令可以移除指定版本内核

yum remove kernel-3.10.*

标签:linux

添加新评论