centos自带的内核一般比较老旧,会导致一些技术无法使用,这时候就需要升级内核了
升级内核的方式一般有两种:
- 手动编译
- 使用rmp包自动升级
手动升级
Linux 最新版本的内核可以通过 https://www.kernel.org/ 网站获取
下载并解压
1 | [root@centos_vbox ~]# ls /data2 |
编译配置
将/boot下的配置文件拷贝过来使用,作为编译目标目录下的.config文件。这样对内核没有精简。
cp /boot/config-3.10.0-1160.el7.x86_64 ./.config
从boot目录拷贝原内核的config文件过来主要是为了方便,这个文件保存了在安装系统时内核所安装的模块配置信息(这个是最简单的,否则需要重新手动指定每一个模块的编译配置)。
安装依赖包
使用menuconfig,安装开发工具包组
1 | yum -y groupinstall "development tools" |
安装ncurse-devel包 (make menuconfig 文本界面窗口依赖包)
1 | yum -y install ncurses-devel |
编译
运行 make menuconfig,开启文本界面的编译选项菜单窗口,可以对内核加载的模块编译选项进行调整,如修改编译后的内核名称、新添加之前系统缺少的模块等。
1 | make -j 4 #根据CPU核数开启多线程编译以加快编译速度 |
安装内核
编译完成后执行 make modules_install
安装内核模块
用此方法安装的内核极大(4G左右)
原因分析:
1 | 默认内核配置配置为支持尽可能多的硬件。 具有默认配置的非剥离内核导致大小为 1897996 kB(包括内核 + 模块)。 当剥离许多不必要的驱动程序和选项时,它的大小为 892892 kB,与库存内核相比,大小减少了 53%。 |
想让内核变得更小(200M左右)执行
1 | make INSTALL_MOD_STRIP=1 modules_install |
安装内核核心文件
1 | make install |
重启系统 reboot
如需将新版本内核设置为默认启动内核,可以使用此命令
grub2-set-default 0 #0表示 /boot/grub2/grub.cfg 文件中排在第一位的 menuentry 段
可能遇到的问题
gcc版本过低
升级gcc
安装centos-release-scl
1 | yum install centos-release-scl |
安装devtoolset,注意,如果想安装7.版本的,就改成devtoolset-7-gcc,以此类推
1 | yum install devtoolset-7-gcc* |
激活对应的devtoolset,所以你可以一次安装多个版本的devtoolset,需要的时候用下面这条命令切换到对应的版本
1 | scl enable devtoolset-7 bash |
切换到某个版本,只需要执行
1 | source /opt/rh/devtoolset-7/enable |
查看gcc版本
1 | gcc -v |
直接替换旧的gcc
旧的gcc是运行的 /usr/bin/gcc,所以将该目录下的gcc/g++替换为刚安装的新版本gcc软连接,免得每次enable
1 | mv /usr/bin/gcc /usr/bin/gcc-4.8.5 |