kpatch制作内核热补丁步骤总结

零、原理及参考

kpatch入门实践教程-CSDN博客

Kpatch 使用过程及其原理-CSDN博客

一、准备工作

  1. 安装对应版本的kpatch-build.rpm并解决依赖
  2. diff -Naur dir1 dir2 > hot.patch 拿到补丁文件
  3. 下载对应内核版本的src.rpm
  4. 安装好对应的开发包kernel-debuginfo,kernel-debuginfo-common,并可在/lib/debug/lib/modules/xxx-xxx.el7.x86_64/下找到vmlinux内核映像文件
  5. mkdir -p /usr/share/kpatch/patch提前创建好目录(不然也是~/.kpatch/build.log报错后建)
  6. kpatch-build -r kernel-bek-4.19.25-200.el7.bclinux.src.rpm -v /lib/debug/lib/modules/4.19.25-200.el7.x86_64/vmlinux  Unexpected_TXQ_queue_failure.patch --skip-gcc-check

在当前目录编译出内核热补丁ko后,尝试打入补丁

1.查看已安装的热补丁

# kpatch list (或者 lsmod)

2.加载kpatch热补丁模块

# kpatch load xxx.ko (或者 insmod xxx)

# kpatch list 查看加载情况 (或者 lsmod | grep xxx)

3.卸载某个kpatch热补丁模块

# kpatch unload xxx.ko

rmmod报错是因为该热补丁正在use,不能直接卸载,可以试着用配置取消热补丁:

# echo 0 > /sys/kernel/livepatch/livepatch_xxx/enabled

彻底移除该kpatch热补丁模块可以使用uninstall

# kpatch uninstall xxx.ko

# kpatch list 查看卸载情况

如果仅仅移除kpatch热补丁模块不会卸载运行内核已加载的热补丁模块,除非使用上面描述的kpatch upload命令。

二、制作热补丁时遇到问题及解决方式

  1. kpatch-build比较占磁盘空间,所以最开始要df -h 确保至少有16G空间
  2. fatal error: openssl/opensslv.h: No such file or directory

        A:缺少包,直接yum -y install openssl-devel即可(apt-get install libssl-dev)

     3.

A:有时发现报错“No targets, No makefile”确实离谱,可能是版本不匹配,最后换了个kpatch-build.rpm版本的包就可以了。

三、其它参考笔记

本次热补丁patch如下,本来不应该用热补丁去调试一个功能,而是去修改一个功能。但本次是线上产品,无法本地复现所以就加打印探查一下:

如果是纯学习的话,其实可以用下面这个源码提供的补丁,直接cat /proc/meminfo就能看出区别了

diff -Nupr src.orig/fs/proc/meminfo.c src/fs/proc/meminfo.c
--- src.orig/fs/proc/meminfo.c	2017-09-22 15:27:21.699056179 -0400
+++ src/fs/proc/meminfo.c	2017-09-22 15:27:41.274137239 -0400
@@ -99,7 +99,7 @@ static int meminfo_proc_show(struct seq_"Committed_AS:   %8lu kB\n""VmallocTotal:   %8lu kB\n""VmallocUsed:    %8lu kB\n"
-		"VmallocChunk:   %8lu kB\n"
+		"VMALLOCCHUNK:   %8lu kB\n"#ifdef CONFIG_MEMORY_FAILURE"HardwareCorrupted: %5lu kB\n"#endif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/40955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从GPT-1到GPT-3 预训练语言模型的演进与突破

本文由 ChatMoney团队出品 前言 Generative Pre-trained Transformer(GPT)系列是由OpenAI开发的预训练语言模型,它们在多种NLP任务中取得了令人瞩目的成绩,包括文章生成、代码生成、机器翻译和问答等。GPT系列模型的核心思想是通…

数据库开发:mysql基础一

文章目录 数据库开发Day15:MySQL基础(一)一、MySQL介绍与安装【1】MySQL介绍(5)启动MySQL服务(6)修改root登陆密码 二、SQL简介三、数据库操作四、数据表操作4.1、数据库数据类型4.2、创建数据表…

对标 GPT-4o 的开源实时语音多模态模型:Moshi

是由法国的 AI 实验室 Kyutai 推出的实时语音多模态模型,支持听、说、看,最关键的是你现在就可以在浏览器中使用,如果这个链接延迟高,可以试试这个, 无需输入邮箱,点击 Join queue 即可。 简单体验了下,比…

#### golang中【堆】的使用及底层 ####

声明,本文部分内容摘自: Go: 深入理解堆实现及应用-腾讯云开发者社区-腾讯云 数组实现堆 | WXue 堆(Heap)是实现优先队列的数据结构,Go提供了接口和方法来操作堆。 应用 package mainimport ("container/heap&q…

结构方程模型-验证性因子分析模型

初级 第7讲 验证性因子分析模_哔哩哔哩_bilibili

使用 ESP32 接收来自 MAX4466 模拟麦克风模块的数据,并通过 DAC 输出模拟音频信号,可以通过以下步骤实现:

硬件准备 ESP32 开发板MAX4466 模拟麦克风模块扬声器或耳机接线 MAX4466 模块输出(AO) -> ESP32 ADC 引脚(如 GPIO 34)ESP32 DAC 引脚(如 GPIO 25 或 GPIO 26) -> 扬声器或耳机软件准备 音频采集DAC 转码并播放代码实现 以下代码展示了如何从 MAX4466 读取模拟音频…

【Go语言入门学习笔记】Part7.闭包和defer关键字

一、前言 闭包有点像对象,而defer适合于类似功能中利用资源时,提前写几句defer 释放资源,防止后面释放资源忘记写释放资源。 二、学习代码 package mainimport ("fmt" )// getC的返回值是一个函数,需要的参数为空&…

GitHub Pull Request流程详解

GitHub Pull Request流程详解 在协作开发中,GitHub的Pull Request(PR)功能至关重要,它允许开发者在代码库中进行修改、审查和合并代码。本文将详细介绍GitHub Pull Request的完整流程,帮助你更好地理解和使用这一强大…

网络安全的十字路口:向“架构化”转移

市场条件正在快速变化 针对上述这些问题,在这段时间里,安全技术供应商推出了许多技术解决方案,比如SIEM、SOAR、XDR、UEBA等,但新产品的推出并未使得安全态势有所好转,许多问题依然存在,这导致了市场动态的…

【DevOps】Java内存分配与JVM参数详解

目录 引言 JVM内存结构 JVM参数概述 堆内存分配 年轻代与老年代 调整堆内存大小 调整年轻代与老年代比例 元空间分配 调整元空间大小 垃圾回收 调整GC参数 调整GC日志 线程栈分配 调整线程栈大小 性能调优 结论 在Java开发中,理解Java虚拟机&#x…

claude3.5写作——《基于灰色预测的中国人口数量预测》

文章目录 站点和提问引言一、灰色预测模型介绍二、中国历年人口数据三、灰色预测模型的建立1.建立原始序列2.生成1-AGO序列3.计算背景值4.构造数据矩阵并计算参数5.模型检验6.模型预测 四、预测结果分析五、政策建议结语参考文献 站点和提问 站点:中国官方克劳德3.…

如何更改 Python pip 源为国内源

在使用 Python 安装包工具 pip 时,经常会遇到下载速度慢的问题。这通常是因为默认使用的官方源 https://pypi.org/simple 在国内访问速度较慢。为了提高下载速度,我们可以将 pip 源更改为国内的镜像源。本文将介绍如何临时和永久地更改 pip 源为国内源。…

光伏电站数据采集方案(基于工业路由器部署)

​ 一、方案概述 本方案采用星创易联SR500工业路由器作为核心网关设备,实现对光伏电站现场数据的实时采集、安全传输和远程监控。SR500具备多接口、多功能、高可靠性等特点,能够满足光伏电站数据采集的各种需求。(key-iot.com/iotlist/sr500…

RK3568平台(opencv篇)ubuntu18.04上安装opencv环境

一.什么是 OpenCV-Python OpenCV-Python 是一个 Python 绑定库,旨在解决计算机视觉问题。   Python 是一种由 Guido van Rossum 开发的通用编程语言,它很快就变得非常流行,主要是 因为它的简单性和代码可读性。它使程序员能够用更少的代码行…

C++ 运算符的优先级和关联性表

C 运算符的优先级和关联性表 1. Precedence and associativity (优先级和结合性)2. Alternative spellings (替代拼写)3. C operator precedence and associativity table (C 运算符的优先级和关联性表)References C documentation (C 文档) https://learn.microsoft.com/en-us…

网络IO模型之多路复用器.md

多路复用是什么?怎么理解? 本文主要涉及为 程序中处理网络IO时的模型,对于系统内核而言网络IO模型。这里只做普及使用 前置知识,什么是IO?怎么理解IO IO其实就是In和Out。中文翻译是输入和输出,只要涉及到输…

clone()方法

在Java中,clone() 方法是一个非常有趣且强大的工具,用于创建对象的一个副本。这个方法位于 Object 类中,因此可以被所有类使用。让我们讨论一下它的几个要点: 什么是克隆? 克隆就是创建一个对象的新副本,这…

2005-2022全国及各省家庭承包耕地流转总面积及经营耕地面积数据(无缺失)

2005-2022全国及各省家庭承包耕地流转总面积及经营耕地面积数据(无缺失) 1、时间:2005-2022年 2、范围:全国及30省 3、指标:家庭承包耕地流转总面积、家庭承包经营耕地面积、土地流转率、 4、来源:农村…

《web应用技术》第十一次课后作业

验证过滤器进行权限验证的原理。 创建Filter: package com.example.filter;import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException;WebFilter(urlPatterns "/*") public class DemoFilter implements Filter …

【3维BFS】个人练习-Leetcode-LCP 79. 提取咒文

题目链接:https://leetcode.cn/problems/kjpLFZ/ 题目大意:给一个矩阵matrix[][],元素为小写英文字母。给一个字符串mantra,求从矩阵的(0,0)位置开始,可以移动(上下左右)或者提取字母&#xff…