https://mirror.tuna.tsinghua.edu.cn/kernel/v4.x/linux-4.19.325.tar.xz
yum install -y gcc make git ctags ncurses-devel openssl-devel bison flex elfutils-libelf-devel bc
wget https://mirror.tuna.tsinghua.edu.cn/kernel/v4.x/linux-4.19.325.tar.xz
tar xvf linux-4.19.325.tar.xz
cd linux-4.19.325
make clean && make mrproper
cp /boot/config-3.10.0-862.el7.x86_64 .config
make -j 2
make modules_install install
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
grub2-set-default 0
reboot
rpm -qa | grep kernal
yum remove kernel-tools-libs-3.10.0-1160.108.1.el7.x86_64 kernel-3.10.0-1160.108.1.el7.x86_64 kernel-3.10.0-957.el7.x86_64 kernel-headers-3.10.0-1160.119.1.el7.x86_64 kernel-tools-3.10.0-1160.108.1.el7.x86_64 -y
uname -r
1. 安装编译内核所需的依赖包
yum install -y gcc make git ctags ncurses-devel openssl-devel bison flex elfutils-libelf-devel bc
- 这行命令使用 yum 包管理器安装一系列编译内核所需的软件包。
- -y 选项表示自动回答 yes,无需手动确认安装过程中的提示。
- gcc 是 GNU 编译器套件,用于编译 C 程序。
- make 是一个构建工具,用于根据 Makefile 文件中的规则来编译和构建软件项目。
- git 是版本控制系统,用于获取内核源代码(虽然这里没有直接体现获取源代码的 git clone 操作,但可能在后续的内核开发或管理中会用到)。
- ctags 用于生成代码索引,方便代码阅读和导航。
- ncurses-devel 是用于开发基于 ncurses 库的程序所需的开发包,ncurses 库常用于在终端中创建文本用户界面。
- openssl-devel 提供了用于开发使用 OpenSSL 库的程序的开发文件,OpenSSL 常用于加密和安全通信相关的开发。
- bison 和 flex 是用于生成词法分析器和语法分析器的工具,在内核编译过程中可能会用于处理一些配置文件或源代码中的语法相关内容。
- elfutils-libelf-devel 提供了处理 ELF(可执行与可链接格式)文件的库和开发文件,内核本身以及一些相关工具可能需要处理 ELF 文件格式。
- bc 是一种高精度计算语言和工具,可能在内核编译过程中的某些计算或配置过程中会用到。
2. 下载内核源代码
wget https://mirror.tuna.tsinghua.edu.cn/kernel/v4.x/linux-4.19.325.tar.xz
- 使用 wget 命令从清华大学的镜像站点下载指定版本(4.19.325)的 Linux 内核源代码压缩包。wget 是一个用于从网络上下载文件的工具。
3. 解压内核源代码压缩包
tar xvf linux-4.19.325.tar.xz
- tar 是一个用于处理归档文件的命令。xvf 是一组选项,其中 x 表示解压,v 表示显示详细信息(如解压的文件名等),f 表示指定要处理的归档文件(这里是 linux-4.19.325.tar.xz)。
4. 进入内核源代码目录
cd linux-4.19.325
- 切换当前工作目录到解压后的内核源代码目录,以便后续在内核源代码目录中执行编译等操作。
5. 清理内核源代码树
make clean && make mrproper
- make clean 命令用于删除编译过程中生成的大多数文件,但保留配置文件等重要文件。这是一个比较轻量级的清理操作,通常在重新编译之前执行,以确保没有旧的编译产物影响新的编译过程。
- make mrproper 是一个更彻底的清理命令,它会删除所有编译生成的文件以及配置文件和一些备份文件等。这通常在首次编译或者希望完全重新开始编译时使用,确保源代码树处于最原始的状态(但会删除之前的配置,需要重新配置内核)。
6. 复制当前系统的内核配置文件作为新内核的初始配置
cp /boot/config-3.10.0-862.el7.x86_64.config
- 将当前系统正在使用的内核(3.10.0-862.el7.x86_64)的配置文件复制到当前目录下,并命名为 .config。这个配置文件将作为新内核编译的基础配置,用户可以在此基础上根据需要进行修改(例如启用或禁用某些内核特性、驱动程序等)。
7. 编译内核
make -j 2
- make 命令根据内核源代码目录中的 Makefile 文件来构建内核。-j 2 选项表示使用 2 个并行任务来加速编译过程。可以根据系统的 CPU 核心数适当调整这个值,一般可以设置为 CPU 核心数或核心数加 1,以充分利用系统资源,但设置过高可能会导致系统负载过高甚至编译失败。
8. 安装内核模块和内核
make modules_install install
- make modules_install 命令将编译好的内核模块安装到系统的标准模块目录(通常是 /lib/modules/<kernel_version>)中,以便内核在启动时能够加载这些模块。
- make install 命令执行内核的安装过程,这包括将编译好的内核镜像文件复制到 /boot 目录,更新引导加载程序(如 GRUB)的配置等操作,使新内核可以在系统启动时被选择。
9. 查看 GRUB 引导菜单中的内核项
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
- 使用 awk 命令解析 GRUB 2 的配置文件(/etc/grub2.cfg)。-F\' 选项指定字段分隔符为单引号(因为 menuentry 在配置文件中是被单引号括起来的)。$1=="menuentry " {print $2} 表示当第一列(以单引号分隔后的第一部分)等于 menuentry 时,打印第二列,这里第二列通常是内核在 GRUB 引导菜单中的显示名称。这行命令的目的是查看系统中可用的内核项,以便后续选择默认启动的内核。
10. 设置默认启动内核为第一个内核项
grub2-set-default 0
- 使用 grub2-set-default 命令将默认启动的内核设置为 GRUB 引导菜单中的第一个内核项(索引为 0)。这将确保系统在下次启动时默认加载新编译安装的内核(如果新内核安装成功并且在 GRUB 菜单中排在第一位)。
11. 重启系统
reboot
- 重启计算机,使新的内核配置生效,系统将使用新安装的内核启动(如果默认内核设置成功)。
12. 查看已安装的内核相关软件包
rpm -qa | grep kernal
- rpm -qa 命令用于列出系统中所有已安装的 RPM 软件包。| grep kernal 是将前面命令的输出通过管道传递给 grep 命令,grep 命令用于过滤出包含 kernal 关键字的行,从而只显示与内核相关的已安装软件包。这有助于检查系统中安装了哪些内核相关的软件包,以及确认新内核安装后是否存在旧内核相关软件包的残留等情况。
13. 删除旧内核相关软件包
yum remove kernel-tools-libs-3.10.0-1160.108.1.el7.x86_64 kernel-3.10.0-1160.108.1.el7.x86_64 kernel-3.10.0-957.el7.x86_64 kernel-headers-3.10.0-1160.119.1.el7.x86_64 kernel-tools-3.10.0-1160.108.1.el7.x86_64 -y
- 使用 yum remove 命令删除指定的旧内核相关软件包。-y 选项表示自动回答 yes,无需手动确认删除操作。这里列出了一些旧内核(3.10.0 系列的不同版本)的相关软件包,包括内核工具库、内核本身、内核头文件以及内核工具等。删除旧内核相关软件包可以释放磁盘空间,但在删除之前应该确保新内核已经正常工作,并且在某些情况下可能需要保留一个旧内核作为备份,以防新内核出现问题无法启动系统。
14. 查看当前正在使用的内核版本
uname -r
- uname 命令用于获取系统信息,-r 选项表示只显示内核版本号。在系统重启后执行此命令可以确认系统是否成功加载了新安装的内核,以及查看当前正在运行的内核版本。
- 安装编译内核所需的依赖包
yum install -y gcc make git ctags ncurses-devel openssl-devel bison flex elfutils-libelf-devel bc
-
这行命令使用 yum 包管理器安装一系列编译内核所需的软件包。
-
-y 选项表示自动回答 yes,无需手动确认安装过程中的提示。
-
gcc 是 GNU 编译器套件,用于编译 C 程序。
-
make 是一个构建工具,用于根据 Makefile 文件中的规则来编译和构建软件项目。
-
git 是版本控制系统,用于获取内核源代码(虽然这里没有直接体现获取源代码的 git clone 操作,但可能在后续的内核开发或管理中会用到)。
-
ctags 用于生成代码索引,方便代码阅读和导航。
-
ncurses-devel 是用于开发基于 ncurses 库的程序所需的开发包,ncurses 库常用于在终端中创建文本用户界面。
-
openssl-devel 提供了用于开发使用 OpenSSL 库的程序的开发文件,OpenSSL 常用于加密和安全通信相关的开发。
-
bison 和 flex 是用于生成词法分析器和语法分析器的工具,在内核编译过程中可能会用于处理一些配置文件或源代码中的语法相关内容。
-
elfutils-libelf-devel 提供了处理 ELF(可执行与可链接格式)文件的库和开发文件,内核本身以及一些相关工具可能需要处理 ELF 文件格式。
-
bc 是一种高精度计算语言和工具,可能在内核编译过程中的某些计算或配置过程中会用到。
- 下载内核源代码
wget https://mirror.tuna.tsinghua.edu.cn/kernel/v4.x/linux-4.19.325.tar.xz
- 使用 wget 命令从清华大学的镜像站点下载指定版本(4.19.325)的 Linux 内核源代码压缩包。wget 是一个用于从网络上下载文件的工具。
- 解压内核源代码压缩包
tar xvf linux-4.19.325.tar.xz
- tar 是一个用于处理归档文件的命令。xvf 是一组选项,其中 x 表示解压,v 表示显示详细信息(如解压的文件名等),f 表示指定要处理的归档文件(这里是 linux-4.19.325.tar.xz)。
- 进入内核源代码目录
cd linux-4.19.325
- 切换当前工作目录到解压后的内核源代码目录,以便后续在内核源代码目录中执行编译等操作。
- 清理内核源代码树
make clean && make mrproper
-
make clean 命令用于删除编译过程中生成的大多数文件,但保留配置文件等重要文件。这是一个比较轻量级的清理操作,通常在重新编译之前执行,以确保没有旧的编译产物影响新的编译过程。
-
make mrproper 是一个更彻底的清理命令,它会删除所有编译生成的文件以及配置文件和一些备份文件等。这通常在首次编译或者希望完全重新开始编译时使用,确保源代码树处于最原始的状态(但会删除之前的配置,需要重新配置内核)。
- 复制当前系统的内核配置文件作为新内核的初始配置
cp /boot/config-3.10.0-862.el7.x86_64.config
- 将当前系统正在使用的内核(3.10.0-862.el7.x86_64)的配置文件复制到当前目录下,并命名为 .config。这个配置文件将作为新内核编译的基础配置,用户可以在此基础上根据需要进行修改(例如启用或禁用某些内核特性、驱动程序等)。
- 编译内核
make -j 2
- make 命令根据内核源代码目录中的 Makefile 文件来构建内核。-j 2 选项表示使用 2 个并行任务来加速编译过程。可以根据系统的 CPU 核心数适当调整这个值,一般可以设置为 CPU 核心数或核心数加 1,以充分利用系统资源,但设置过高可能会导致系统负载过高甚至编译失败。
- 安装内核模块和内核
make modules_install install
-
make modules_install 命令将编译好的内核模块安装到系统的标准模块目录(通常是 /lib/modules/<kernel_version>)中,以便内核在启动时能够加载这些模块。
-
make install 命令执行内核的安装过程,这包括将编译好的内核镜像文件复制到 /boot 目录,更新引导加载程序(如 GRUB)的配置等操作,使新内核可以在系统启动时被选择。
- 查看 GRUB 引导菜单中的内核项
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
- 使用 awk 命令解析 GRUB 2 的配置文件(/etc/grub2.cfg)。-F\' 选项指定字段分隔符为单引号(因为 menuentry 在配置文件中是被单引号括起来的)。$1=="menuentry " {print $2} 表示当第一列(以单引号分隔后的第一部分)等于 menuentry 时,打印第二列,这里第二列通常是内核在 GRUB 引导菜单中的显示名称。这行命令的目的是查看系统中可用的内核项,以便后续选择默认启动的内核。
- 设置默认启动内核为第一个内核项
grub2-set-default 0
- 使用 grub2-set-default 命令将默认启动的内核设置为 GRUB 引导菜单中的第一个内核项(索引为 0)。这将确保系统在下次启动时默认加载新编译安装的内核(如果新内核安装成功并且在 GRUB 菜单中排在第一位)。
- 重启系统
reboot
- 重启计算机,使新的内核配置生效,系统将使用新安装的内核启动(如果默认内核设置成功)。
- 查看已安装的内核相关软件包
rpm -qa | grep kernal
- rpm -qa 命令用于列出系统中所有已安装的 RPM 软件包。| grep kernal 是将前面命令的输出通过管道传递给 grep 命令,grep 命令用于过滤出包含 kernal 关键字的行,从而只显示与内核相关的已安装软件包。这有助于检查系统中安装了哪些内核相关的软件包,以及确认新内核安装后是否存在旧内核相关软件包的残留等情况。
- 删除旧内核相关软件包
yum remove kernel-tools-libs-3.10.0-1160.108.1.el7.x86_64 kernel-3.10.0-1160.108.1.el7.x86_64 kernel-3.10.0-957.el7.x86_64 kernel-headers-3.10.0-1160.119.1.el7.x86_64 kernel-tools-3.10.0-1160.108.1.el7.x86_64 -y
- 使用 yum remove 命令删除指定的旧内核相关软件包。-y 选项表示自动回答 yes,无需手动确认删除操作。这里列出了一些旧内核(3.10.0 系列的不同版本)的相关软件包,包括内核工具库、内核本身、内核头文件以及内核工具等。删除旧内核相关软件包可以释放磁盘空间,但在删除之前应该确保新内核已经正常工作,并且在某些情况下可能需要保留一个旧内核作为备份,以防新内核出现问题无法启动系统。
- 查看当前正在使用的内核版本
uname -r
- uname 命令用于获取系统信息,-r 选项表示只显示内核版本号。在系统重启后执行此命令可以确认系统是否成功加载了新安装的内核,以及查看当前正在运行的内核版本。