测试时间:2024年5月15日,本文测试
CentOS7.9
的内核版本升级
一、使用第三方仓库(ELRepo)
(1)升级前内核查看(3.10.0-1160.el7.x86_64):uname -a
或者 uname -r
(2)添加ELRepo仓库
yum install -y https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
(3)检查可安装的内核版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
(4)安装指定版本的内核
yum --enablerepo=elrepo-kernel install -y kernel-<version>
(5)更新引导加载器配置
# 设置开机从新内核启动
grub2-set-default "CentOS Linux (5.4.275-1.el7.elrepo.x86_64) 7 (Core)"
(6)可以检查一下 /boot/grub2/grub.cfg中menuentry的内容
(7)重启服务器,查看内核版本
二、手动编译和安装
自测评价:太慢了,还容易出错。不推荐使用该方法
(1)查看操作系统以及内核的版本
(2)安装编译工具和依赖
yum groupinstall 'Development Tools'
yum install kernel-devel kernel-header elfutils-libelf-devel
(3)下载内核源码:https://kernel.org/
(4)解压并配置内核
# 解压
tar -xvf linux-5.4.275.tar.xz
# 配置内核
make olddefconfig
(5)编译内核
time make -j$(nproc)
make modules_install
make install
三、标题
四、Q&A
Q1:手动编译和安装时,执行time make -j$(nproc)
有如下报错
注意:根据以下解决报错后,重新执行
time make -j$(nproc)
Answer:
1、构建过程中试图生成ORC(Optimized Restartable Sequences)元数据,但缺少必要的开发库。
解决:
yum install libelf-devel
(Red Hat系统:Fedora、CentOS)apt-get install libelf-dev
(Debian系统:Ubuntu)dnf install elfutils-libelf-devel
(较新的Fedora/CentOS)2、在编译过程中需要访问OpenSSL的头文件,所以需要安装OpenSSL的开发包
解决:
yum install openssl-devel
Q2:在Q1问题解决后,再次执行time make -j$(nproc),发现有以下提示,但是编译过程并未中断。
在执行 make 命令,尤其是在编译像操作系统内核这样的大型项目时,缺少花括号({})通常会导致代码结构不完整,从而影响代码的正确编译。花括号在C语言及类似语言中用于定义代码块的范围,比如循环体、条件语句块或函数体等。如果花括号缺失,编译器可能无法正确理解哪些语句应该被包含在特定的控制结构中。
对于内核升级过程,这确实是个问题,因为它可能会导致以下几个后果:
(1)编译错误:最直接的影响是编译失败,因为编译器会在遇到语法错误时停止编译过程。
(2)逻辑错误:即使某些情况下编译通过了(例如,如果缺少的花括号导致的逻辑块很小,而编译器默认将其与下一行关联),这也可能导致内核功能不按预期工作,因为执行的代码逻辑与设计意图不符。
(3)潜在的安全风险:代码逻辑的改变可能引入安全漏洞,特别是在内核这样对安全性要求极高的软件中。
(4)维护困难:代码的可读性和可维护性降低,给后续的开发和调试带来不必要的复杂度。因此,如果在尝试编译内核时遇到提示缺少花括号的错误,应该首先修正这些语法错误,确保所有的控制结构(如if语句、for循环等)都有正确的花括号来界定其作用域。这不仅是修复编译错误所必需的,也是保证内核正确、安全运行的基础。
— 业精于勤荒于嬉,行成于思毁于随 —
标签:kernel,make,编译,版本升级,yum,内核,install,Linux From: https://www.cnblogs.com/houhuilinblogs/p/18194166