IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 基于 armhf-qemu 的 ARMv7 linux-5.6 qemu-KVM 代码分析 1 qemu-kvm 的交互 -> 正文阅读

[游戏开发]基于 armhf-qemu 的 ARMv7 linux-5.6 qemu-KVM 代码分析 1 qemu-kvm 的交互

-我在 ubuntu armhf cloud 发行版 仿真 中搭建了一个 “基于ARMv7” 且 “abi为armhf” 且 “os 为 ubuntu” 的 “虚拟化调试平台”,主要是为了研究

1. ARMv7 对虚拟化的支持 
2. linux armv7 kvm 的实现 
3. qemu 与 kvm 的交互

调试平台是这个样子的

L0 : win10 x86_64
L1 : L0 上用 vmware work station 搭建的一个 ubuntu20.04-x86_64
L2 : L1 上用 qemu-6.1.0 搭建的一个 armhf-ubuntu 16.04,并手动编译升级内核到 linux-5.6
L3 : L2 上用 qemu-2.5.0 搭建的一个 armhf-linux-initramfs,并手动编译升级内核到 linux-5.6
  • 研究手段及目标顺序
怎么实现这些研究目的
1. 在 L1 上 安装 arm-none-eabi-gdb
2. 开启L2 的时候 添加 -S -s 选项 , 并 用 arm-none-eabi-gdb 不加断点让其全速运行
3. L2 启动到 shell , 此时 用 arm-none-eabi-gdb 添加 kvm 相关的断点
4. 启动 L3(需要添加 --enable-kvm)  , 启动后 自动停在 断点 

研究目的的顺序
	1. qemu 与 kvm 的交互
		通过书籍获取大概交互资料(主要是三个fd),并验证(这三个fd)的实现原理
		通过每个 fd 访问了多少次,都访问了什么
	2. linux armv7 kvm 的实现
		fd 中的 ioctl 怎么处理的
		如何 VM enter 和 VM exit
	3. ARMv7 对虚拟化的支持
		PL2 异常向量表的设置
		相关寄存器的读写

qemu 与 kvm 的交互

初始化
fd_kvm = open(/dev/kvm) 							kvm_chardev_ops  		kvm_dev_ioctl
fd_vm = ioctl(fd_kvm,KVM_CREATE_VM,0) 				kvm_vm_fops				kvm_vm_ioctl
fd_vcpu = ioctl(fd_vm,KVM_CREATE_VCPU,0) 			kvm_vcpu_fops 			kvm_vcpu_ioctl

运行
ioctl(fd_vcpu,KVM_RUN,NULL)
主要是 要考虑 通过三个 fd (fd_kvm fd_vm fd_vcpu) 操控 kvm 做事
按照书籍资料,kvm负责 
	KVM本身基于硬件辅助虚拟化,仅仅实现CPU和内存的虚拟化,但一台计算机不仅仅有CPU和内存,还需要各种各样的I/O设备,不过KVM不负责这些。KVM负责底层执行引擎和内存的虚拟
	经过改造后的QEMU,负责外部设备的虚拟
	两者彼此互补,成为新一代云计算虚拟化方案的宠儿。

不能用(太庞大) qemu 来探究 qemu 与 kvm 的交互,而是我们要是实现一个小的qemu(little-qemu),并实现一个小的虚拟机程序(test.S)来探究

  • little-qemu
  • test.S
  • 如何调试
涉及到 
little-qemu(运行在L2) ,L2(ARMv7-ubuntu-16.04) 上运行 arm-gdb
test.S(运行在L3)
linux-5.6-kvm(运行在L1) ,L1(x86_64-ubuntu-20.04) 上运行 arm-gdb
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 14:07:54  更:2021-10-07 14:08:02 
 
开发: 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/28 2:47:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码