![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
QEMU-KVM-ON-ARM32
介绍各个平台的kvm现状,并以ARM32为例,搭建实验平台,研究arm32上的kvm实现
__pop_
这个作者很懒,什么都没留下…
展开
-
ARM32-linux KVM 实验平台 搭建过程
平台介绍L-1 是我的windowsL0 是 ubuntu 虚拟机L1 是我搭建的 支持 kvm 的 linux 发行版(ubuntu)L1 上 要跑 kvm demo , 从而 学习 kvm需要的资源L-1 : windowsL0 : ubuntu-20.04.3-desktop-amd64.iso : qemu-system-arm // qemu-6.1.0L1 L1 kernel image : linux-5.6/arch/arm/boo原创 2022-03-30 12:30:02 · 1288 阅读 · 0 评论 -
little-qemu&guest 中的 虚拟机中断角度 之 访存异常实例
虚拟机内存角度分析中列出了访存流程想象中是这样子的流程1. guest 内存相关 的初始化 (HTTBR 与 VTTBR 的设置) // 参考 "host 中的 HTTBR" 和 "host 中的 VTTBR"2. guest os 开始运行3. guest os 读 A 地址4. 陷入 host PL2 异常 // host os 开始运行 4.1 异常退出 4.2 做相应的动作 4.3 注入中断 4.4 guest enter // guest os 开始 运行5. guest .原创 2021-10-28 12:27:34 · 253 阅读 · 0 评论 -
little-qemu&guest 中的 虚拟机中断角度 之 异常向量表
文章 中说 的中断流程1 2 3 三种都要经过A.中断发生流程B.guest退出到host hyp2(host PL2)C.host hyp2 退出到 host PL1 D.host PL1 执行 guest 退出(动作B)的对应处理函数E.host PL1 执行 中断注入F.host PL1 陷入 host PL2 并执行 guest entry异常向量表B.guest退出到host hyp2(host PL2) // PL2 的异常向量表F.host PL1 陷入 host P.原创 2021-10-27 13:09:05 · 260 阅读 · 0 评论 -
little-qemu&guest 中的 虚拟机中断角度 之 中断流程
虚拟机的中断根据来源 分类 三种 1.硬件中断,来自硬件 2.虚拟中断,来自qemu等用户态应用 3.ipi中断,来自虚拟机中的其他核心中断流程1 2 3 三种都要经过A.中断发生流程B.guest退出到host hyp2(host PL2)C.host hyp2 退出到 host PL1 D.host PL1 执行 中断注入E.host PL1 陷入 host PL2 并执行 guest entryA.中断发生流程1的中断发生流程 很简单的硬件中断产生,然后 Guest原创 2021-10-27 09:48:23 · 511 阅读 · 1 评论 -
little-qemu&guest 中的 虚拟机内存角度分析 - 进行中
之前在 文章 中描述了 7个ioctl,现在着重分析 其中3个,这3个与虚拟机内存相关KVM_CREATE_VMKVM_GET_VCPU_MMAP_SIZEKVM_SET_USER_MEMORY_REGION原创 2021-10-20 13:09:14 · 277 阅读 · 0 评论 -
little-qemu&guest 中的 虚拟机CPU角度分析 - 进行中
之前在 文章 中描述了 7个ioctl,现在着重分析 其中5个,这5个与虚拟机CPU相关KVM_CREATE_VMKVM_CREATE_VCPUKVM_ARM_VCPU_INITKVM_SET_ONE_REGKVM_RUN vm entry vm exit原创 2021-10-20 13:07:14 · 250 阅读 · 0 评论 -
基于 armhf-qemu 的 ARMv7 linux-5.6 qemu-KVM 代码分析 0 基于ARM32-KVM的little-qemu虚拟机和ARM32裸机代码
little-qemu & test.S不能用(太庞大) qemu 来探究 qemu 与 kvm 的交互,而是我们要是实现一个小的qemu(little-qemu),并实现一个小的虚拟机程序(test.S)来探究little-qemu参考 https://www.cnblogs.com/Bozh/p/5753379.html https://www.cnblogs.com/pengdonglin137/p/14083316.html http://soulxu.github.io/b原创 2021-10-11 15:27:40 · 253 阅读 · 0 评论 -
虚拟化之设备虚拟化
简单介绍技术路线分三种(其中第二种有个改进版) 1.全模拟/传统模拟 通常指由虚拟化层(通常是Qemu)完全模拟一个设备给虚拟机用。 虚拟机中的系统完全不知道自己在虚拟机中 以网络为例,发包涉及到3套代码(虚拟机中的网卡驱动e1000,qemu中的网卡驱动e1000,host机中的tap0及其驱动) 此种情况下,虚拟机中的os 不需要更改任何东西, 只需要 在 qemu 中 适配 "虚拟机os的网卡驱动" 2.virtio/半虚拟化 在 guest os 中 新建一个 virt.原创 2021-10-08 19:20:24 · 919 阅读 · 0 评论 -
基于 armhf-qemu 的 ARMv7 linux-5.6 qemu-KVM 代码分析 1 qemu与kvm 的交互
-我在 ubuntu armhf cloud 发行版 仿真 中搭建了一个 虚拟化调试平台,主要是为了研究1. ARMv7 对虚拟化的支持 2. linux armv7 kvm 的实现 3. qemu 与 kvm 的交互调试平台是这个样子的L0 : win10 x64L1 : L0 上用 vmware work station 搭建的一个 ubuntu20.04-x64L2 : L1 上用 qemu-6.1.0 搭建的一个 armhf-ubuntu 16.04,并手动编译升级内核到 linux原创 2021-10-06 11:06:27 · 611 阅读 · 0 评论 -
ubuntu arm64 cloud 发行版 仿真
4.cloud(其中包括arm arm64)//参考 https://ubuntu.com/download/cloud 镜像位置 : https://cloud-images.ubuntu.com/ 镜像1文件名称:https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-armhf-disk1.img https://gist.github.com/tuxmartin/04d85009a3aaa968c343067.原创 2021-10-04 10:22:13 · 321 阅读 · 0 评论 -
ubuntu armhf cloud 发行版 仿真SUCCESS
4.cloud(其中包括arm arm64)//参考 https://ubuntu.com/download/cloud 镜像位置 : https://cloud-images.ubuntu.com/ 镜像1文件名称:https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-armhf-disk1.img https://gist.github.com/tuxmartin/04d85009a3aaa968c3430678原创 2021-10-03 23:18:05 · 733 阅读 · 0 评论 -
ubuntu 的 arm 版本及其仿真
ubuntu 的 所有arm版本分类2021-10-2 23:32:47ubuntu有几种发布,1.桌面 (其中不包括arm) 镜像1文件名称:ubuntu-20.04.3-desktop-amd64.iso ubuntu-21.04-desktop-amd64.iso 镜像1安装平台:x64 镜像2安装平台:ubuntu-21.04-preinstalled-desktop-arm64+raspi.img 镜像2安装平台:Raspberry Pi 4,Raspberry Pi 400.原创 2021-10-03 00:17:28 · 8674 阅读 · 0 评论 -
ARM 虚拟化调试平台搭建 初试 FAIL
资源准备qemu-6.1.0./configure --target-list=arm-softmmu,aarch64-softmmu --prefix=~/work/qemu/qemu-out2 2>&1 | tee log_configure2.txtmake 2>&1 | tee log_build2.txtmake install 2>&1 | tee log_install2.txtUEFIhttp://snapshots.li原创 2021-09-27 13:23:31 · 705 阅读 · 0 评论 -
ARM 虚拟化调试平台 详解
概念详解这个平台涉及到三个系统实体机A : x86-ubuntu(虚拟机实体机都可以,我的是虚拟机,但是我们假设这是实体机A)虚拟机B : 实体机A下运行的 qemu-arm ubuntu(需要更改内核) (虚拟机B)虚拟机C : 虚拟机B下运行的 qemu-arm ubuntu (虚拟机C)同时,为了调试, 实体机下 要运行 gdb , 该gdb 用来调试 虚拟机B整个系统中只有一个调试对象,那就是 虚拟机B虚拟机B 要支持虚拟化实体机A 只是一个硬件平台,为了搭建虚拟.原创 2021-09-26 12:32:34 · 2073 阅读 · 0 评论 -
ARMv7 KVM 在 linux中的实现 2 cpu角度
实现CPU的虚拟化的要求 1.KVM/ARM必须向虚拟机提供一个接口,该接口本质上与底层的实际硬件CPU相同 2.同时确保hypervisor具有硬件的控制权。对 "实现CPU的虚拟化的要求"的分析 1. 需要确保在虚拟机中运行的软件必须具有访问实际物理CPU上寄存器状态的能力,以及确保hypervisor及其主机内核相关联的物理硬件状态在运行的虚拟机中是持久的。 2.不影响虚拟机的寄存器状态.可通过保存虚拟机状态并在从虚拟机切换到主机时从内存中恢复主机状态来完成上下文的切换,反之亦然。 虚原创 2021-09-25 16:39:56 · 283 阅读 · 0 评论 -
ARMv7 KVM 在 linux中的实现 5 时钟
实体机下的时钟ARM定义了通用计时器框架通用定时器提供了一个计数器,其可以用来测量系统运行的时间定时器还可被编程,是其在到达一定的时间后会想CPU发出一个时钟中断。系统会经常访问该通用计数器guest 对 通用计时器的访问计时器可被hypervisor和guest操作系统使用但是为了对计时器提供隔离并保留控制权,hypervisor使用的计时器不能直接被guest操作系统配置和操作。如果guest操作系统需要访问此类计时器,则需要让CPU陷入到HYP模式来实现,对于某些工作负载.原创 2021-09-25 16:01:28 · 221 阅读 · 0 评论 -
ARMv7 KVM 在 linux中的实现 4 中断角度
我们在 该文章 中分析了 PL2 的异常,提出了以下问题 什么虚拟化相关的情况下会进入 host_PL1 TODO 什么虚拟化相关的情况下会进入 host_PL2 1. 虚拟机开启时,ioctl KVM_RUN 进入 hyp_hvc 2. 中断应该会进入 hyp_irq 3. 内存异常应该会进入 hyp_dabt // TODO 什么虚拟化相关的情况下会进入 guest_PL1 1. 优化后的中断应该会进入 vector_irq // TODO 2. 优化后的内存访问异常应该原创 2021-09-25 15:50:19 · 244 阅读 · 0 评论 -
ARMv7 KVM 在 linux中的实现 3 内存角度
内存地址转换为什么需要内存地址转换 实体机是这样子跑的 host_VA -> host_PA 虚拟机是这样跑 guest_VA -> guest_PA // guest_PA 与 host_VA 一一对应 guest_PA(host_VA) -> host_PAARM提供了对虚拟物理内存的硬件支持。 通过 二级地址转换(遍历二级页表) 提供的 // 二级转换可以在HYP模式中被禁止或使能。 二级地址机制 的原理 (以虚拟机运行时为例) 虚拟机原创 2021-09-25 14:57:18 · 279 阅读 · 0 评论 -
riscv 的虚拟化支持
riscv-spec-20191213.pdf 中A fully virtualizable ISA to ease hypervisor development.RISC-V hypervisors that provide multiple supervisor-level execution environments for guestoperating systems.27.8 Hypervisor-level Instruction-Set ExtensionsStandard hyp原创 2021-09-25 14:27:31 · 902 阅读 · 0 评论 -
ARMv7 KVM 在 linux中的实现 1 代码静态分析
函数角度架构无关部分 在 virt架构相关部分 在 arch/arm/kvmarch/arm/kvm 的出口函数__init_stage2_translation // 没被 virt 调用__kvm_arm_vcpu_get_events__kvm_arm_vcpu_set_events__kvm_flush_vm_context__kvm_hyp_init__kvm_tlb_flush_local_vmid__kvm_tlb_flush_vmid__kvm_tlb_flush原创 2021-09-25 13:27:22 · 528 阅读 · 0 评论 -
ARMv7 的虚拟化支持
armv7-linux 于 linux-5.7 移除了 kvm 的支持DDI0406C_D_armv7_AR_architecture_reference_manual.pdf 中 P33 A1.4.2 Architecture extensions 中的 Virtualization Extensions 表示 armv7 有 虚拟化的支持P35Virtualization Extensions Are an OPTIONAL set of extensions to VMSAv7 t原创 2021-09-23 12:47:06 · 697 阅读 · 0 评论 -
QEMU-KVM 文章总览
流程总览QEMU 杂谈各个架构X86_64ARMv7ARMv8riscv原创 2021-09-23 11:41:29 · 512 阅读 · 0 评论 -
QEMU 杂谈
QEMU&KVMQEMU 是一套源码, 开源的 ,代码 在 https://github.com/KVM 被并入了 Linux 内核, 开源的, 代码在 https://github.com/linuxQEMU 可以运行在 ARMv7-linux/ARMv8-linux/x86_64-linux 上QEMU 之上 可以运行(仿真) ARMv7-linux/ARMv8-linux/x86_64-linux/riscv64-linux/risc32-linux QEMU 可以 不利用 KV原创 2021-09-22 20:16:41 · 291 阅读 · 0 评论