KVM模块单独编译(适合调试)

2023-11-01

当前系统环境:

CentOS Linux release 7.2.1511 (Core)


在说kvm模块单独编译之前,难免设计到linux内核模板的编写,所以这里也稍微提一下。

1linux内核模块环境搭建

这里有2种方法:

1.1 升级内核:

升级当前系统的kernel,具体编译步骤这里不再详细说明,简单表述一下:如果想在当前的linux系统上面,不用修改配置文件来编译内核,就将/boot/config-***文件拷贝至/home/pizhi/linux-4.6.4/.config

[root@pizhi-kernel boot]# pwd

/boot

[root@pizhi-kernel boot]# cp config-3.10.0-229.el7.x86_64 /home/pizhi/linux-4.6.4/.config


注意:执行完上面的cp命令以后,仍然需要使用make menuconfig命令并保存配置。

编译之前需要安装rpmbuild工具:

make rpm


这一步会在/root/rpmbuild/RPMS生成对应的kernel rpm包。

更新:

yum install ./*.rpm

1.2 安装kernel-devel包


不需要像1.1中的花很长时间升级内核,只需要安装kernel-devel rpm包即可。

安装:

yum install kernel-devel


如果源没啥问题,基本安装的和kernel rpm包的版本一致即可。

测试:


hello.c:

#include <linux/init.h>

#include <linux/module.h>

static int hello_init(void) {

    printk(KERN_WARNING"Hello, pikachu kernel!\n");

    return 0;

}

static void hello_exit(void) {

    printk(KERN_INFO"Goodbye, pikachu kernel!\n");

}

module_init(hello_init);

module_exit(hello_exit);

MODULE_LICENSE("GPL");

Makefile:

ifneq ($(KERNELRELEASE),)

obj-m := hello.o

else

KDIR := /lib/modules/`uname -r`/build

all :

        make -C $(KDIR) M=$(PWD) modules

clean:

        make -C $(KDIR) M=$(PWD) clean

endif

make过程遇到的问题:

make -C /lib/modules/`uname -r`/build M=/root/code_kernel/hello modules

make: *** /lib/modules/3.10.0-327.el7.x86_64/build: No such file or directory.  Stop.

make: *** [all] Error 2


解决方法:

/lib/modules/3.10.0-327.el7.x86_64/build没有指向正确的kernel source。建立软连接即可。

[root@localhost 3.10.0-327.el7.x86_64]# pwd

/lib/modules/3.10.0-327.el7.x86_64

[root@localhost 3.10.0-327.el7.x86_64]# rm build

[root@localhost 3.10.0-327.el7.x86_64]# ln -sv /usr/src/kernels/3.10.0-514.2.2.el7.x86_64/ build


注:kernel打印的日志文件在/var/log/messages下。

2单独编译KVM模块


2.1 由SPEC文件编译出kernel source


从http://vault.centos.org/7.2.1511/os/Source/SPackages/上面下载

kernel-3.10.0-327.el7.src.rpm

截图如下:


解决依赖:

yum-builddep kernel-3.10.0-327.el7.src.rpm

rpm -ivh kernel-3.10.0-327.el7.src.rpm

yum-builddep /root/rpmbuild/SPECS/kernel.spec

生成kernel source:

rpmbuild -bp /root/rpmbuild/SPECS/kernel.spec

生成kernel source的路径:

/root/rpmbuild/BUILD/kernel-3.10.0-327.el7

2.2 单独编译KVM模块


进入该kernel source目录:

/root/rpmbuild/BUILD/kernel-3.10.0-327.el7/linux-3.10.0-327.el7.x86_64

单独编译:

make -j8 -C `pwd` M=`pwd`/arch/x86/kvm modules


生成的kvm.ko和kvm-intel.ko在kernel source//arch/x86/kvm目录下。

查看kvm模块:

[root@pizhi-kernel ~]# lsmod | grep kvm

kvm_intel             162153  0

kvm                   525259  1 kvm_intel

卸载kvm模块:

modprobe -r kvm_intel

安装刚刚单独编译的kvm模块:

cd /root/rpmbuild/BUILD/kernel-3.10.0-327.el7/linux-3.10.0-327.el7.x86_64/arch/x86/kvm


insmod kvm.ko

insmod kvm-intel.ko

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KVM模块单独编译(适合调试) 的相关文章

  • 红黑树学习

    红黑树的是一种特殊的二叉搜索树 有如下性质 性质1 节点是红色或黑色 性质2 根是黑色 性质3 每个叶节点是黑色的 性质4 每个红色节点的两个子节点都是黑色 从每个叶子到根的所有路径上不能有两个连续的红色节点 性质5 从任一节点到其每个叶子
  • chinaUnix中的linux源代码学习

    原文地址 http bbs chinaunix net thread 1930079 1 1 html 大家好 内核源码版对本版块的精华帖进行了分类汇总 所有的精华帖分为十大类 各个分类的精华帖相关信息分布在该贴2 11楼 每个分类各占1楼
  • linux内核-系统调用execve()

    读者在linux内核 系统调用fork vfork与clone中已经看到 进程通常是按其父进程的原样复制出来的 在多数情况下 如果复制出来的子进程不能与父进程分道扬镳 走自己的路 那就没多大意义 所以 执行一个新的可执行程序是进程生命历程中
  • linux内存管理

    原文链接 https blog csdn net wwwlyj123321 article details 128241134 一 内存管理简述 在Linux内核中 RAM会将其中一部分永远分配给内核 用来存放Linux内核源码以及一些静态
  • ARM架构内核启动分析-head.S(1.1、vmlinux.lds 链接脚本分析)

    ARM架构内核启动分析 一 start kernel之前 首先需要明确的是 内核镜像在被解压之后执行 是执行哪段代码 这是个重要的问题 平时在编译生成应用程序或内核模块时 我们无需考虑链接的具体细节 如代码和数据放在哪里 代码执行入口在哪等
  • netpoll浅析

    netpoll只是一种框架和一些接口 只有依赖这个框架和接口实现的netpoll实例 netpoll才能发挥它的功能 类似于kernel中的vfs vfs本身并不会去做具体的文件操作 只是为不同的文件系统提供了一个框架 netpoll不依赖
  • /etc/sysctl.conf 调优 & 优化Linux内核参数

    from http apps hi baidu com share detail 15652067 http keyknight blog 163 com blog static 3663784020104152407759 http bl
  • 虚拟文件系统 (VFS)-基于linux3.10

    引言 虚拟文件系统 VFS VirtualFileSystem 介于具体的文件系统和C库之间 其用提供一个统一的方法来操作文件 目录以及其它对象 其能够很好的抽象具体的文件系统 在linux上具体的文件系统主要分为三类 l 基于非易失性的存
  • 一文让你彻底了解Linux内核文件系统

    一 文件系统特点 文件系统要有严格的组织形式 使得文件能够以块为单位进行存储 文件系统中也要有索引区 用来方便查找一个文件分成的多个块都存放在了什么位置 如果文件系统中有的文件是热点文件 近期经常被读取和写入 文件系统应该有缓存层 文件应该
  • linux支持usb打印机

    配置CONFIG USB PRINTER y inux内核默认运行打印机 核 驱动 直接在配置上CONFIG USB PRINTER y添加上去就好了 make menuconfig 选上USB打印机选项 Device Drivers gt
  • 第三章 套接字相关数据结构--基于Linux3.10

    本章是对socket通信过程中使用到的比较重要的据结构罗列和意义的阐述 在阅读其它层的代码前 先来看几个重要的数据结构 这几个数据结构贯串四层模型 3 1 socket对应的内核结构体 在用户空间使用socket 函数创建一个套接字 对应的
  • make -C $(LINUX_KERNEL_PATH) M=$(PWD) modules中的M选项

    新的内核模块编程中的make命令里有个M选项 如下 make C lib modules shell uname r build M PWD modules M PWD 意思是返回到当前目录继续读入 执行当前的Makefile 请参考 从
  • 【内核驱动】Linux概述

    00 目录 文章目录 00 目录 01 Unix简介 02 Linux简介 03 Linux发展史 04 单内核与微内核区别 05 Linux内核 06 Linux内核组成 07 Linux官方网站 08 附录 01 Unix简介 UNIX
  • 手把手带你实现Linux内核编译步骤及配置

    linux 系统体系结构 linux kernel体系结构 arm有7种工作模式 x86也实现了4个不同级别RING0 RING3 RING0级别最高 这样linux用户代码运行在RING3下 内核运行在RING0 这样系统本身就得到了 充
  • brk和sbrk及内存分配函数相关

    brk和sbrk主要的工作是实现虚拟内存到内存的映射 在GNUC中 内存分配是这样的 每个进程可访问的虚拟内存空间为3G 但在程序编译时 不可能也没必要为程序分配这么大的空间 只分配并不大的数据段空间 程序中动态分配的空间就是从这 一块分配
  • 慢慢欣赏linux pud_offset解析

    typedef struct pudval t pud pud t gt typedef u64 pudval t dir表示L0页表索引的指针 指向PUD页表的基地址 define pud offset dir addr pud t va
  • dracut 基本介绍

    dracut 基本介绍 dracut 维基 https dracut wiki kernel org index php Main Page http www 360doc com content 13 0428 09 12139495 2
  • 多线程(1):互斥锁

    leetcode 1114题 按序打印 给你一个类 public class Foo public void first print first public void second print second public void thi
  • Linux进程管理:deadline调度器

    一 概述 实时系统是这样的一种计算系统 当事件发生后 它必须在确定的时间范围内做出响应 在实时系统中 产生正确的结果不仅依赖于系统正确的逻辑动作 而且依赖于逻辑动作的时序 换句话说 当系统收到某个请求 会做出相应的动作以响应该请求 想要保证
  • Linux内核调度算法 -- CPU时间片如何分配

    内核在微观上 把CPU的运行时间分成许多分 然后安排给各个进程轮流运行 造成宏观上所有的进程仿佛同时在执行 双核CPU 实际上最多只能有两个进程在同时运行 大家在top vmstat命令里看到的正在运行的进程 并不是真的在占有着CPU哈 所

随机推荐

  • 时间序列分类总结(time-series classification)

    时间序列分类总结 time series classification 一 传统方法 需要手工设计 1 DTW dynamic time warping KNN 2 基于特征的方法 二 深度学习 1 MLP FCN ResNet 2 LST
  • TestNg框架源码解析

    TestNG是一个测试框架 其灵感来自JUnit和NUnit 但引入了一些新的功能 使其功能更强大 使用更方便 TestNG是一个开源自动化测试框架 TestNG表示下一代 Next Generation的首字母 TestNG类似于JUni
  • Flutter TextField IOS 双击、长按 异常

    IOS端在长按Textfield唤起粘贴复制的时候会报错 主要原因是Cupertino缺少了对应的非英文版本的支持 import package flutter cupertino dart import package flutter f
  • 设计一个函数chline(ch,i,j),打印指定的字符j行i列

    这里涉及到scanf 函数的读取知识和缓冲区的知识 scanf函数在读取时候 是从缓冲区读取数据 而我们输入的数据会在保存在缓冲区 scanf函数从缓冲区读取的数据后 相应的数据会从缓冲区中消失 但是没有被读取的数据还会在缓冲区 在下次调用
  • 【混合时变参数系统参数估计算法】使用范数总和正则化和期望最大化的混合时变参数系统参数估计算法(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 文献来源 本文解决了具有 eXogenou
  • Python基于BaseHTTPRequestHandler的HTTP代理V1.0

    proxyHandler py coding utf8 from BaseHTTPServer import BaseHTTPRequestHandler HTTPServer import socket import urllib fro
  • Python GUI案例之看图猜成语开发(完结篇)

    Python GUI案例之看图猜成语 完结篇 看图猜成语小程序开发 完结篇 总结 完整代码 Python GUI案例之看图猜成语开发 第一篇 Python GUI案例之看图猜成语开发 第二篇 Python GUI案例之看图猜成语开发 第三篇
  • POI单元格插入图片

    RequestMapping outEsComEquipmentDetailExcels public void outEsComEquipmentDetailExcels RequestParam fid Integer fid Requ
  • c语言浮点数常量,C 浮点常量

    浮点常量就是一种呈现有符号实数的十进制数字 有符号实数的呈现包括一个整数部分 一个小数部分 还有指数 可以使用浮点常量来呈现不可以被改变的浮点值 语法 浮点数常量 小数常量 指数部分 可选 浮点后缀 可选 数字序列 指数部分 浮点后缀 可选
  • 暗黑大陆游戏服务器为空 请检查列表文件,游戏服务器为空请检查列表文件名...

    游戏服务器为空请检查列表文件名 内容精选 换一换 当应用中的云硬盘空间不足时 可对该云硬盘进行扩容操作 扩容操作属于高危操作 请谨慎操作 为了防止数据丢失 磁盘只支持扩容 不支持缩容 如果磁盘已挂载在云服务器上 需要您通过云服务器控制台重启
  • ES多个字段聚合分组,在结果上执行二次统计分析

    Es版本 7 6 2 Test public void groupBucket 设置要查询的索引 SearchRequest request new SearchRequest indices EdaIndex EDaIndex FILE
  • JNI排坑记录:java.lang.UnsatisfiedLinkError导致JVM崩溃

    本次坑不大不小 在此记录一下 希望能够帮助遇到同样问题的朋友 1 背景 最近在进行Seetaface6开源人脸识别库的Java封装工作 封装工作初步完成后 Java端进行封装测试 调用库dll文件都成功了 但调用本地Native方法 dll
  • 基础编程题目集——7-15 计算圆周率

    1 题目要求 根据下面关系式 求圆周率的值 直到最后一项的值小于给定阈值 输入格式 输入在一行中给出小于1的阈值 输出格式 在一行中输出满足阈值条件的近似圆周率 输出到小数点后6位 2 样例 输入样例 0 01 输出样例 3 132157
  • QHash的使用(插入、取值、遍历、删除)

    1 创建 键值对的方式插入 数据类型随意 这里以键int 值QString示例 QHash
  • 200行代码写一个简易的C++小黑窗贪吃蛇游戏

    分享一个简易的小黑窗贪吃蛇 一共就两百行代码左右 包含注释 很适合初学者巩固语法来练练手 如果后续需要其他功能也可以再添加 先小小展示一下 源码在文末免费领取 使用工具 VS2019 不是用VS的也可以直接找出cpp和h文件复制到你们用的I
  • 在 RedHat 8.7 中 安装 ROCm

    1 official docs 1 1 graphics docs Overview amdgpu graphics and compute stack unknown build documentation 1 2 compute doc
  • 异步加载Baidu地图失败error isTrusted:true

    为什么会加载失败 为了用户体验 在用户使用地址组件之前不加载地图 因此我们采用官网的例子异步加载百度地图 这里做了一点改进 export function baiduMapInit const url https api map baidu
  • Ajax-爬取多页图片

    文章目录 一 目的 二 代码 三 结果 四 关键点 一 目的 爬取多页图片 图片网页地址 https picsum photos images 关键点 上述的网页HTML代码中并无图片地址 图片是通过Ajax请求的json数据 我们需要找到
  • Python创建虚拟环境

    目的 不同的程序需要不同的运行环境 方法 conda create n 虚拟环境名 python3 8 结果 在anaconda envs 目录下有一个新的目录 里面是一个全新的python 1 设置pip国内源 原因 python编程经常
  • KVM模块单独编译(适合调试)

    当前系统环境 CentOS Linux release 7 2 1511 Core 在说kvm模块单独编译之前 难免设计到linux内核模板的编写 所以这里也稍微提一下 1linux内核模块环境搭建 这里有2种方法 1 1 升级内核 升级当