实验:CentOS 7 编译安装最新版内核 Linux Kernel 6.5.2

简介: CentOS 7 编译安装最新版内核 Linux Kernel 6.5.2

实验环境

  • Virtualbox 7.0
  • CentOS 7.9
  • Linux Kernel 6.5.2

实验需求

为我的 CentOS7.9 虚拟机编译安装最新内核版本

CentOS7.9 升级前的内核版本:

[root@localhost ~]# uname -r
3.10.0-1160.95.1.el7.x86_64

CentOS7.9 升级后的内核版本:

[root@localhost ~]# uname -sr
Linux 6.5.2

实验解法

1、安装编译环境

yum groupinstall "Development Tools" -y && \
yum install -y \
    openssl-devel \
    rpm-build \
    redhat-rpm-config \
    asciidoc \
    hmaccalc \
    perl-ExtUtils-Embed \
    pesign \
    xmlto \
    audit-libs-devel \
    binutils-devel \
    elfutils-devel \
    elfutils-libelf-devel \
    ncurses-devel \
    newt-devel \
    numactl-devel \
    pciutils-devel \
    python-devel \
    zlib-devel \
    rpm-build

2、更新GCC版本

CentOS7 自带的 GCC 是 4.8.5 版本,编译内核会导致报错

以下是安装新的GCC操作:(多GCC版本共存)

yum install centos-release-scl devtoolset-8-gcc* -y
scl enable devtoolset-8 bash  # 该操作允许GCC多版本共存

以下是永久替换旧的GCC操作:(只使用GCC新版本)

mv /usr/bin/gcc /usr/bin/gcc-4.8.5 
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc 

mv /usr/bin/g++ /usr/bin/g++-4.8.5 
ln -s /opt/rh/devtoolset-8/root/bin/g++

3、下载内核源代码并解压内核源代码

从清华大学镜像源下载 Linux Kernel 6.5.2 的源代码包。

注意:一定要执行 cd linux-6.5.2 命令,因为接下的操作默认都是这该目录下操作的。

wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v6.x/linux-6.5.2.tar.gz

tar -zxvf linux-6.5.2.tar.gz

cd linux-6.5.2

4、配置 config

方法一:执行以下这个命令,会进入一个配置界面,如果看不懂就保持默认配置,Tab键选定 save 然后回车,根据提示保存 .config 文件。

make menuconfig

方法二:根据现有内核参数去生成新的配置参数文件 .config

3.10.0-1160.95.1.el7.x86_64 这个文件在你的机器里可能并不相符,可以执行 ls -l /boot/ 命令查看你的这个文件名称。

cp /boot/3.10.0-1160.95.1.el7.x86_64 .config 

make oldconfig # 一路回车

5、编译安装内核

-j 12 参数是因为我给虚拟机CPU分配了12核心,根据自己的机器情况修改。
make INSTALL_MOD_STRIP=1 modules_install > /dev/null 把内核模块的 debug 信息去掉,节约磁盘空间

make -j 12 all

make INSTALL_MOD_STRIP=1 modules_install > /dev/null && make modules_install && make install

6、设置以后默认从新的 Kernel 启动

sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg && sudo grub2-set-default 0 && sudo grub2-mkconfig -o /boot/grub2/grub.cfg

7、编译成 rpm 包

编译出的 rpm 包可以在其他的 CeonOS7.9 机器上直接安装升级内核。

如果需要压缩体积,可以将 make rpm-pkg -j 12 换成 make INSTALL_MOD_STRIP=1 rpm-pkg -j 12

命令执行完成后,会在当前目录的 ~/rpmbuild/RPMS/x86_64/ 下出现三个 rpm 安装包

在其他CentOS7机器上安装这三个 rpm 包,就可以更新内核了。

make rpm-pkg -j 12

make INSTALL_MOD_STRIP=1 rpm-pkg -j 12

yum localinstall kernel* -y

安装这三个 rpm 包后,还需要更新一下启动项。

sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg && sudo grub2-set-default 0 && sudo grub2-mkconfig -o /boot/grub2/grub.cfg

8、删除多余内核

使用 uname -a 查看当前使用的内核

[root@localhost ~]# uname -a
Linux localhost.localdomain 6.5.2 #1 SMP PREEMPT_DYNAMIC Fri Sep  8 13:10:46 CST 2023 x86_64 x86_64 x86_64 GNU/Linux

使用 rpm -qa|grep kernel 查看通过 rpm 安装的内核

[root@localhost ~]# rpm -qa | grep kernel
kernel-tools-libs-3.10.0-1160.95.1.el7.x86_64
kernel-3.10.0-1160.95.1.el7.x86_64
kernel-tools-3.10.0-1160.95.1.el7.x86_64
kernel-debug-devel-3.10.0-1160.95.1.el7.x86_64
kernel-headers-3.10.0-1160.95.1.el7.x86_64
kernel-3.10.0-1160.el7.x86_64

使用 yum remove [多作内核] 删除多余内核,执行多次删除多余的 kernel

[root@localhost ~]# yum remove kernel-tools-libs-3.10.0-1160.95.1.el7.x86_64
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package kernel-tools-libs.x86_64 0:3.10.0-1160.95.1.el7 will be erased
--> Processing Dependency: kernel-tools-libs = 3.10.0-1160.95.1.el7 for package: kernel-tools-3.10.0-1160.95.1.el7.x86_64
--> Processing Dependency: libcpupower.so.0()(64bit) for package: kernel-tools-3.10.0-1160.95.1.el7.x86_64
--> Running transaction check
---> Package kernel-tools.x86_64 0:3.10.0-1160.95.1.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================
 Package                         Arch                 Version                              Repository              Size
========================================================================================================================
Removing:
 kernel-tools-libs               x86_64               3.10.0-1160.95.1.el7                 @updates                18 k
Removing for dependencies:
 kernel-tools                    x86_64               3.10.0-1160.95.1.el7                 @updates               337 k

Transaction Summary
========================================================================================================================
Remove  1 Package (+1 Dependent package)

Installed size: 355 k
Is this ok [y/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Erasing    : kernel-tools-3.10.0-1160.95.1.el7.x86_64                                                             1/2
  Erasing    : kernel-tools-libs-3.10.0-1160.95.1.el7.x86_64                                                        2/2
  Verifying  : kernel-tools-libs-3.10.0-1160.95.1.el7.x86_64                                                        1/2
  Verifying  : kernel-tools-3.10.0-1160.95.1.el7.x86_64                                                             2/2

Removed:
  kernel-tools-libs.x86_64 0:3.10.0-1160.95.1.el7

Dependency Removed:
  kernel-tools.x86_64 0:3.10.0-1160.95.1.el7

Complete!

使用 grub2-mkconfig -o /boot/grub2/grub.cfg 更新引导配置

[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.5.2
Found initrd image: /boot/initramfs-6.5.2.img
Found linux image: /boot/vmlinuz-0-rescue-0197527dc1e0e34ab25e04d6402a7388
Found initrd image: /boot/initramfs-0-rescue-0197527dc1e0e34ab25e04d6402a7388.img
done
目录
相关文章
|
1月前
|
安全 关系型数据库 MySQL
Linux下安装mysql8.0(以tar.xz包安装--编译安装)
通过上述步骤,您完成了从下载、编译、安装到配置MySQL 8.0的全过程。此过程虽然较为复杂,但提供了对MySQL安装环境的完全控制,有助于满足特定的部署需求。在实际操作中,根据具体的系统环境,可能还需调整部分步骤或解决未预见的依赖问题。始终参考官方文档和社区资源,保持安装过程与最新版本的兼容性。
619 67
|
21天前
|
Web App开发 搜索推荐 Unix
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
【10月更文挑战第21天】Linux系统之MobaXterm远程连接centos的GNOME桌面环境
176 4
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
|
30天前
|
Linux 网络安全 数据安全/隐私保护
Linux系统之Centos7安装cockpit图形管理界面
【10月更文挑战第12天】Linux系统之Centos7安装cockpit图形管理界面
68 1
Linux系统之Centos7安装cockpit图形管理界面
|
1月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
62 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
1月前
|
Linux Docker 容器
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
本篇博客重在讲解Centos安装docker,经博主多次在不同服务器上测试,极其的稳定,尤其是阿里的服务器,一路复制命令畅通无阻。
556 4
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
|
30天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
82 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
Linux 编译器 C语言
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
|
16天前
|
Linux
Linux - 如何编译源码安装软件
源码编译安装通常包括三个步骤:1) `./configure` 检测平台特征和依赖项,生成 Makefile;2) `make` 编译源码,生成可执行文件;3) `make install` 将可执行文件安装到指定目录并配置环境变量。
30 0
|
1月前
|
Linux 编译器 C语言
Linux c/c++之多文档编译
这篇文章介绍了在Linux操作系统下使用gcc编译器进行C/C++多文件编译的方法和步骤。
39 0
Linux c/c++之多文档编译
|
30天前
|
存储 网络协议 Linux
AWS实操-EC2-创建购买linux(centos)EC2服务器
AWS实操-EC2-创建购买linux(centos)EC2服务器