| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 使用GDK7调试Linux内核之KVM -> 正文阅读 |
|
[系统运维]使用GDK7调试Linux内核之KVM |
1. KVM的介绍1.1 KVM架构的介绍????1.??????目前有3种较为主流的虚拟化技术架构:ESXi架构、Xen架构及KVM架构,主要区别在虚拟化CPU、内存、磁盘及网络通信组件的模块不同及管理调度组件实现方式的不同;流虚拟化技术架构如图1.1所示。 图1.1 主流虚拟化技术架构
????2.??????KVM内核模块:主要包括kvm.ko模块及kvm_intel.ko模块或kvm_amd.ko模块(硬件相关);KVM内核模块用于部分Linux内核的功能,如设备驱动及内存管理、进程管理调度等;负责虚拟化CPU及内存。 ????3.??????QEMU内核模块:通过IOCTL系统调用QEMU内核模块与KVM内核模块进行交互;负责虚拟化磁盘及网络通信组件。 ????4.??????KVM内核模块与QEMU内核模块交互的实现:KVM仅支持基于硬件辅助的虚拟化,在内核加载时,KVM先初始化内部数据结构,打开CPU控制寄存器CR4里面的虚拟化模式开关,执行VMXON指令将Host OS设置为root模式,并创建的特殊设备文件/dev/kvm等待来自用户空间的命令,通过IOCTL系统调用QEMU内核模块与KVM内核模块进行交互,实现虚拟机的管理。 1.2 安装及配置KVM????1.??????参考文章https://help.ubuntu.com/community/KVM/Installation安装KVM及虚拟系统管理器(Virt-Manager)。 ????2.??????命令行内输入virt-manager;启动虚拟系统管理器。
????3.??????参考文章https://zhuanlan.zhihu.com/p/104207468配置KVM。 2. 调试过程????1.??????将GDK7及调试主机开机=>用USB3.0专用电缆将GDK7及调试主机连接起来=>调试主机端打开设备管理器=>查看是否识别出DCI设备;如图2.1所示。 图2.1 设备管理器识别从DCI设备
????1.?????GDK7内打开命令行=>输入virt-manager;启动虚拟系统管理器=>运行虚拟机。 ????2.??????打开Nano Code=>进入Nano调试;如图2.2所示。 图2.2 进入Nano调试 ????4.??????进入内核调试=>选择相应选项=>点击启动;调试Linux内核应选选项如图2.3所示。 图2.3 调试Linux内核应选选项 ????5.??????点击启动后,Nano Code会自动建立调试会话;如图2.4所示。 图2.4 建立调试会话 ????6.? ? ? 中断GDK7;如图2.5所示。 图2.5 中断GDK7 ????7.??????准备与Linux内核版本对应的相关文件=>内核符号文件、KVM内核模块的符号文件及内核源代码文件(相关文件可以自行下载/从其他说明的2中,所给的百度网盘链接内下载)=>将相关文件复制到调试主机内(具体位置无要求,但内核符号文件及KVM内核模块的符号文件应在统一文件夹下)。
图2.6 Linux内核版本号
图2.7 内核符号文件对应的Linux内核版本号 ????8.??????在命令行内输入.sympath+ C:\NanoCode-Symbols\530-59;添加符号文件所在文件夹的路径到符号文件搜索路径中;如图2.8所示。 图2.8 添加符号文件所在文件夹的路径到符号文件搜索路径中 ????9.????? 在命令行内输入.srcpath+ C:\NanoCode-LinuxSource\500\linux-source-5.0.0;添加内核源代码所在文件夹的路径到源代码搜索路径中;如图2.9所示。 图2.9 添加内核源代码所在文件夹的路径到源代码搜索路径中 ????10.????? 在命令行内输入.reload;重新加载;如图2.10所示。 图2.10 重新加载 ????11.??????在命令行内输入x kvm!*(耐心等待一段时间);加载KVM模块,Nano调试会输出函数,若没有任何输出则应检查符号文件对应的Linux内核版本与当前运行系统的Linux内核版本是否一致;如图2.11所示。 图2.11 加载KVM模块 ????12.????? 在命令行内输入lm l;显示已经加载的模块(不含延迟加载的模块),确定KVM模块已经成功加载;如图2.12所示。 图2.12 显示已经加载的模块(不含延迟加载的模块) ????13.????? 在命令行内输入!sxe VMLaunch;启动VMLaunch中断KVM;如图2.13所示。 图2.13 启动VMLaunch中断KVM ????14.????? 在命令行内输入!sxd VMLaunch;关闭VMLaunch;如图2.14所示。 图2.14 关闭VMLaunch ????15.????? 在命令行内输入!sxe VMExit;通过VMExit中断KVM;如图2.15所示。 图2.15 启动VMExit中断KVM ????16.????? 在命令行内输入!sxd VMExit;关闭VMExit;如图2.16所示。 图2.16 关闭VMExit ????17.????? 在命令行内输入x kvm!ioeventfd_write;查看函数ioeventfd_write的内存地址及参数列表;如图2.17所示。 图2.17 查看函数ioeventfd_write的内存地址及参数列表 ????18.????? 在命令行内输入bp ffffffff`c06a6400;给函数ioeventfd_write设置断点;如图2.18所示。 图2.18 给函数ioeventfd_write设置断点 ????19.????? 在命令行内输入g;等待一段时间后命中所设断点;如图2.19所示。 图2.19 命中所设断点 ????20.????? 在命令行内输入kv;查看调用栈;如图2.20所示。 图2.20 查看调用栈 ????21.????? 在命令行内输入dc;显示内存;如图2.21所示。 图2.21 显示内存 ????22.??????在命令行内输入dv;显示临时变量;如图2.22所示。 图2.22 显示临时变量 ?????23.????? 在命令行内输入ddp;查看被引用内存;如图2.23所示。 图2.23 查看被引用内存 参考文献1.??????https://blog.csdn.net/henly1217/article/details/108491230 2.??????https://help.ubuntu.com/community/KVM/Installation 3.??????https://blog.csdn.net/S2536702672/article/details/103452253 4.??????https://zhuanlan.zhihu.com/p/104207468 5.??????https://zhuanlan.zhihu.com/p/105499858 其他说明1.??????若您有问题咨询及出现链接失效等其他情况请联系邮箱:birdring_001@outlook.com。 2.???????链接:https://pan.baidu.com/s/14vhY_4wf0UEnokRDkkpRBw?提取码:yavj? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 16:23:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |