目录
一、实验
1.下载内核
2.解压内核源码
3.配置依赖的环境
5.编译内核
6.安装模块
7.安装内核
8.验证新内核版本
一、实验
1.下载内核
(1)官网下载
内核的源码的官方网站为 The Linux Kernel Archives,在此网站下载最新内核源码。
(2)进入页面
点击某一个版本对应的browse
Linux版本分为:mainline(主线版本)、stable(稳定版本)、longterm(长期演进版本)
进入之后,默认打开界面是tree型
资源下载,选择summary,拉到最下方
(3)网页下载
直接进入链接: Index of /sites/ftp.kernel.org/pub/linux/kernel/ (sjtu.edu.cn),选择需要的版本,直接选择下载即可。
2.解压内核源码
(1)解压
tar -zxvf linux-6.3.7.tar.gz -C /usr/src/
(2)软链接
[root@centos2 src]# ln -sv linux-6.3.7 linux
"linux" -> "linux-6.3.7"
(3)查看当前目录
[root@centos2 src]# ls
debug kernels linux linux-6.3.7
3.配置依赖的环境
(1)修改阿里镜像源
备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载新的CentOS-Base.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
清除并更新缓存
yum clean all && yum makecache
(2)确保根分区可用空间在15G以上
(3)确保gcc版本在5.0以上
GCC依赖四个库:GMP、MPFR、MPC、ISL。GMP:计算任意精度的数学库, 包括支持整数,有理数和浮点。MPFR: 一个多精度高效的浮点计算C语言库, 基于GMP。MPC:一个支持高精度复数的算术运算的C库,并能正确的进行结果舍入。ISL:用于操作集合和线性约束下的整数点的关系的库,支持集合的交,并和补操作。
其中,MPFR依赖GMP,MPC依赖GMP和MPFR,GCC依赖上面四个库,所以推荐的编译安装顺序是GMP->MPFR->MPC->ISL->GCC。
选择下载如下版本,且给出了下载地址:
GMP-6.2.1 https://ftp.gnu.org/gnu/gmp/gmp-6.2.1.tar.xz
MPFR-4.2.0 https://www.mpfr.org/mpfr-current/mpfr-4.2.0.tar.xz
MPC-1.3.1 https://ftp.gnu.org/gnu/mpc/mpc-1.3.1.tar.gz
ISL -0.24 http://ftp.tsukuba.wide.ad.jp/software/gcc/infrastructure/isl-0.24.tar.bz2
GCC-9.3.0 http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-9.3.0/gcc-9.3.0.tar.xz
表1 gcc版本升级
升级版本 | 命令 |
升级到gcc 6.3 |
|
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。 echo "source /opt/rh/devtoolset-6/enable" >>/etc/profile 这样退出shell重新打开就是新版的gcc了 | |
升级到gcc 7.3 |
|
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。 echo "source /opt/rh/devtoolset-7/enable" >>/etc/profile | |
升级到gcc 8.3 |
|
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。 echo "source /opt/rh/devtoolset-8/enable" >>/etc/profile | |
升级到gcc 9.3 |
|
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。 echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile |
配置好镜像源也可以直接升级到gcc 9.3:
[root@centos2 linux]# yum -y install centos-release-scl
[root@centos2 linux]# yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
[root@centos2 linux]# scl enable devtoolset-9 bash
4.进入源码目录,使用make menuconfig开启菜单选项,手动选择内核功能
[root@centos2 linux]# make menuconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/mconf.o
HOSTCC scripts/kconfig/lxdialog/checklist.o
HOSTCC scripts/kconfig/lxdialog/inputbox.o
HOSTCC scripts/kconfig/lxdialog/menubox.o
HOSTCC scripts/kconfig/lxdialog/textbox.o
HOSTCC scripts/kconfig/lxdialog/util.o
HOSTCC scripts/kconfig/lxdialog/yesno.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
YACC scripts/kconfig/parser.tab.[ch]
HOSTCC scripts/kconfig/lexer.lex.o
HOSTCC scripts/kconfig/menu.o
HOSTCC scripts/kconfig/parser.tab.o
HOSTCC scripts/kconfig/preprocess.o
HOSTCC scripts/kconfig/symbol.o
HOSTCC scripts/kconfig/util.o
HOSTLD scripts/kconfig/mconf
配置完成后会生成.config的隐藏文件,如果不知道该开启哪些功能也可以直接选用当前系统的配置文件,这里直接使用当前系统的配置文件。
[root@centos2 linux]# cp /boot/config-3.10.0-693.el7.x86_64 ./.config
cp:是否覆盖"./.config"? yes
5.编译内核
"-j 8" 代表使用8颗cpu同时编译,这里可根据实际情况而定。
[root@centos2 linux]# make -j 8
此步骤会对.config文件中的每一个选项再次确认,全部确认即可。
6.安装模块
[root@centos2 linux]# make modules_install
安装完成后在/lib/modules/目录下会生成一个同内核版本号的目录,目录下便是新内核的模块。
7.安装内核
[root@centos2 linux]# make install
安装完后会在/boot目录下生成新的内核文件。
[root@centos2 linux]# ll /boot/
新内核会自动写入到引导文件中,直接重启系统,在选择内核的界面选中新的内核即可。
[root@centos2 linux]# cat /boot/grub2/grub.cfg
8.验证新内核版本
[root@centos2 linux]# uname -a