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

 Technique  comment

升级 Linux 自带内核,编译内核过程的记录。本文意在编译安装指定版本的内核用以实现某些功能或者兼容某些软件。

准备工作

切换至工作目录

# cd /usr/src

小贴士:很多教程说必须放至在 /usr/src 目录中,实测放哪都行。要是条件允许就按官方的说法放在 /usr/src 里,并且请确认目录所在磁盘可用空间大于 10Gb)

下载源码

以 4.9.39 版本为例

# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.39.tar.xz

查看当前最新内核请到内核组织官网 The Linux Kernel Archives

解包源码

# xz -d linux-4.9.39.tar.xz
# tar xvpf linux-4.9.39.tar

构建依赖

安装编译环境

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

开始构建

# cd linux-4.9.39/

清理工作

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

# make mrproper && make clean

小贴士:若是新下载解压的,可以跳过此步骤。

创建编译参数

以下三种方法可生成编译参数文件

使用当前系统的配置参数

# make defconfig

用命令获取当前内核参数

问答式全新配置

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

# make localmodconfig

载入目前配置并对新配置进行询问时配置

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

# make oldconfig

图形界面微调参数

生成内核配置参数后,若需要微调,可以执行命令进入图形界面对选项进行调整。

# make menuconfig

小贴士:此功能需要依赖支持才能使用,若执行命令输出报错,请根据发行版不同进行安装依赖。

# apt-get install ncurses-dev
# yum install -y ncurses-devel

开始编译

# make -j4

小贴士:若机器为多核心可以使用 -j 参数指定多线程编译,大幅度提高速度。

编译内核模块

# make modules && make modules_install

部署内核

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

# make install

小贴士:不推荐在 Debian 系统中使用此种方式进行编译安装内核,其专属方式请参见相关链接。

使用新内核

安装新内核后必须重启系统才能读取并使用新内核

# 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.*

附录

相关链接

回复