测试时间: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)编译内核 no! 不要往下走了

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循环等)都有正确的花括号来界定其作用域。这不仅是修复编译错误所必需的,也是保证内核正确、安全运行的基础。

Q3:手动编译的方式升级内核问题可能会很多......(此处强烈建议不要使用该方式)

— 业精于勤荒于嬉,行成于思毁于随 —

Linux - 内核版本升级的更多相关文章

  1. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #1 如何获取Linux内核

    HACK #1 如何获取Linux内核 本节介绍获取Linux内核源代码的各种方法.“获取内核”这个说法看似简单,其实Linux内核有很多种衍生版本.要找出自己想要的源代码到底是哪一个,必须首先理解各 ...

  2. Linux 内核概述 - Linux Kernel

    Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...

  3. 模仿Linux内核kfifo实现的循环缓存

    想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式.使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了.偶然间看到分析Linux内核的循 ...

  4. linux内核调试技术之printk

    原创博客:欢迎转载,转载请注明出处https://i.cnblogs.com/EditPosts.aspx?postid=6218383 1.简介(基于s3c2440 linux) 在内核调试技术之中 ...

  5. Linux内核启动过程概述

    版权声明:本文原创,转载需声明作者ID和原文链接地址. Hi!大家好,我是CrazyCatJack.今天给大家带来的是Linux内核启动过程概述.希望能够帮助大家更好的理解Linux内核的启动,并且创 ...

  6. Linux内核配置、编译及Makefile简述

    Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核. ...

  7. linux内核数据结构之kfifo

    1.前言 最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的.缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度.例如一个进程A产 ...

  8. 浅析linux内核中的idr机制

    idr在linux内核中指的就是整数ID管理机制,从本质上来说,这就是一种将整数ID号和特定指针关联在一起的机制.这个机制最早是在2003年2月加入内核的,当时是作为POSIX定时器的一个补丁.现在, ...

  9. gcc/linux内核中likely、unlikely和__attribute__(section(""))属性

    查看linux内核源码,你会发现有很多if (likely(""))...及if (unlikely(""))...语句,这些语句其实是编译器的一种优化方式,具 ...

  10. Linux 内核版本命名

    Linux 内核版本命名在不同的时期有其不同的规范,我们熟悉的也许是 2.x 版本奇数表示开发版.偶数表示稳定版,但到 2.6.x 以及 3.x 甚至将来的 4.x ,内核版本命名都不遵守这样的约定. ...

随机推荐

  1. Qt No Target Architecture

    在QT中引入processthreadsapi.h,如果出现 "No Target Architecture",需要在processthreadsapi.h前引入windows.h ...

  2. Gitlab误删用户导致项目丢失莫慌

    Gitlab让小朋友不小心把离职员工的账号给删了,可是离职员工有好几个项目都是他是owner,造成Gitlab上项目全部丢失. 遇到这种情况,莫慌. 一般,本地都有完整的Git备份,离职员工走了,肯定 ...

  3. 03C++顺序结构(2)

    一.变量.赋值语句与表达式 1.天安门广场在北京市中心,它南北长880米,东西宽500米,试编一程序,计算天安门广场面积是多少平方米. 点击查看代码 1 //试编程,计算天安门广场的面积是多少平方米 ...

  4. 3.QMainWindow

    QMainWindow介绍 QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar),多个工具栏(tool bars),多个铆接部件(dock widgets),一个状 ...

  5. 鲲鹏cpu

    cat /etc/openEuler-release sudo dmidecode -t processor |grep Version   lscpu  

  6. debian/ubuntu系统vi无法删除字符的解决办法

    之前在 Linux 下操作,一直使用的是 Centos 系统,使用 vi 编辑命令一直很顺畅. 最近,入手了一台 debian 操作系统的 vps.在操作 vi 命令时,发现当输入 i 要进行文件编辑 ...

  7. 跟着 8.6k Star 的开源数据库,搞 RAG!

    过去 9 年里,HelloGitHub 月刊累计收录了 3000 多个开源项目.然而,随着项目数量的增加,不少用户反馈:"搜索功能不好用,找不到想要的项目!" 这让我意识到,仅仅收 ...

  8. Qt音视频开发28-ffmpeg解码本地摄像头(yuv422转yuv420)

    一.前言 一开始用ffmpeg做的是视频流的解析,后面增加了本地视频文件的支持,到后面发现ffmpeg也是支持本地摄像头设备的,只要是原则上打通的比如win系统上相机程序.linux上茄子程序可以正常 ...

  9. Qt编写安防视频监控系统31-onvif设备搜索

    一.前言 做视频监控系统,绕不过onvif这玩意,这玩意主要就是为了统一一个大概的标准,能够对各个厂家的监控设备进行常用的一些操作,比如搜索.获取信息.云台控制.事件订阅.抓拍图片等,如果没有这个规范 ...

  10. 微信小游戏直播在Android端的跨进程渲染推流实践

    本文由微信开发团队工程师"virwu"分享. 1.引言 近期,微信小游戏支持了视频号一键开播,将微信升级到最新版本,打开腾讯系小游戏(如跳一跳.欢乐斗地主等),在右上角菜单就可以看 ...