随笔分类 - 虚拟化
1
摘要:#梦开始的地方 X86硬件时钟 首先我们需要了解一下,目前有哪些时钟 PIT pit是最古老的pc时钟设备。Intel 8253/8254 PIT是具有3个16位计数器通道的可编程计数/定时器芯片,晶振频率为1.193182MHz。 HPET PET(High Precision Event Tim
阅读全文
摘要:一:概念介绍 GTK(以前称为GIMP ToolKit和GTK+)是一个免费的开源 跨平台 小部件工具包,用于创建图形用户界面(GUI)。它根据GNU Lesser General Public License的条款获得许可,允许免费和专有软件使用它。它是Wayland和X11 窗口系统最流行的工具
阅读全文
摘要:##一:简介 在虚拟化中有两个重要的虚拟化加速技术不得不提,CPU虚拟化和[内存虚拟化](https://www.cnblogs.com/edver/p/14662609.html)。 本文基于HAXM和intel的VT-X技术,分析cpu虚拟化的加速如何实现。 ##二:Intel VT-X技术介绍
阅读全文
摘要:##一、 qemu侧irqchip的实现 Qemu在main函数之前,已经创建了TYPE_I8259、ioapic、TYPE_APIC三个类型,用于创建这三个设备,实现在qemu侧的irqchip。 如果irqchip在hypervisor中实现,则需要创建三个新的设备,相比前面提到的三个设备要简单
阅读全文
摘要:1. android媒体框架 本篇文章主要分析下图中libstagefrighthw.so如何加载到OMX Core中。 应用框架 应用代码位于应用框架层,利用 android.media API 与多媒体硬件进行交互。 Binder IPC Binder IPC 代理用于促进跨越进程边界的通信。
阅读全文
摘要:1. MediaCodec framework层文件调用关系 2. MediaCodec解码流程 3. OMX初始化并加载插件流程 4. 解码器初始化流程 5. 数据处理过程
阅读全文
摘要:一. virtio_net设备创建流程
阅读全文
摘要:一: 创建过程关键函数 1. virtblk_probe 虚拟机在启动过程中,virtio bus上检测到有virtio块设备,就调用probe函数来插入这个virtio block设备(前端创建的virtio设备都是PCI设备,因此,在对应的virtio设备的probe函数调用之前,都会调用vir
阅读全文
摘要:1. QEMU pipe介绍 Qemu-pipe是一个通用的虚拟设备,完成guest OS和emulator的通信功能。它为通信提供了四种服务: Tcp Unix Opengles Qemud Qemud也提供了一些子服务 "gsm" service "gps" service "hw-contro
阅读全文
摘要:简介: 中断虚拟化中不可避免需要接触到APIC的虚拟化,其中包括IOAPIC和LAPIC。这里挖个坑,准备逐步写一下从硬件原型到软件模拟的知识,谨作学习记录。 LAPIC硬件 1. LAPIC内部寄存器布局可参考下图 大体按照功能分类如下: Timer related: CCR: Current C
阅读全文
摘要:简介: 前几节分析了virtio机制和现有的balloon设备实现,至此我们已经知道了virtio是什么、怎么使用的,本节我们就自己实现一个virtio纯虚设备。 功能: QEMU模拟的设备启动一个定时器,每5秒发送一次中断通知GUEST GUEST对应的驱动接收到中断后讲自身变量自增,然后通过vr
阅读全文
摘要:1.概述 根据前一章信息,virtio设备分为前端设备/通信层/后端设备,本章从后端设备设备(qemu的balloon设备为例)的初始化开始分析。 从启动到balloon设备开始初始化基本调用流程如下: balloon代码执行流程如下: 2. 关键结构 2.1 balloon设备结构 typedef
阅读全文
摘要:一: 概要 在后端模拟出balloon设备后,gustos在启动时会扫描到此设备,遵循linux设备模型调用设备的初始化工作。Virtio-balloon属于 virtio体系,很多工作的细节需要再分析virtio的工作流程,本章暂且只分析balloon的行为,涉及virtio的部分插桩分析向后再补
阅读全文
摘要:前言: 要进行指令模拟,我们先需要了解X86架构下的指令是长什么样子的。根据intel的编程手册我们找到了如下信息。 Intel CPU的机器指令格式如下图所示: e.g.:图片位于intel开发手册第二卷第二章的2.1 根据开发手册,一条指令由 指令前缀(Instruction Prefixes)
阅读全文
摘要:Qemu Object Model QOM (Qemu Object Model)是Qemu实现的面向对象编程模式。Qemu是用C语言编写的,而C语言是面向过程的编程语言,无法享受面向对象编程模式针对复杂软件系统在设计模式上的优越性。为解决该问题,Qemu社区通过C语言实现了一套面向对象的编程接口,
阅读全文
摘要:1. 概述 在传统的设备模拟中,虚拟机内部设备驱动完全不知道自己处在虚拟化环境中,所以I/O操作会完整的走 虚拟机内核栈->QEMU->宿主机内核栈,产生很多VM Exit和VM Entry,导致性能很差。Virtio方案旨在提高I/O性能。在改方案中虚拟机能够感知到自己处于虚拟化环境中,并且会加载
阅读全文
摘要:简介: 在虚拟化环境下,intel CPU在处理器级别加入了对内存虚拟化的支持。即扩展页表EPT,而AMD也有类似的成为NPT。在此之前,内存虚拟化使用的一个重要技术为影子页表。在虚拟化环境下,虚拟机使用的是客户机虚拟地址GVA,而其本身页表机制只能把客户机的虚拟地址转换成客户机的物理地址也就是完成
阅读全文
摘要:PS: 具体内容待分析,尚不十分清楚 关键结构体 : /** * MemoryRegionSection: describes a fragment of a #MemoryRegion * * @mr: the region, or %NULL if empty * @fv: the flat v
阅读全文
摘要:简介: AddressSpace 的root域及其子树共同构成了 Guest 的物理地址空间,但这些都是在 QEMU 侧定义的。要传入 KVM/HAXM 进行设置时,复杂的树状结构是不利于内核进行处理的,因此需要将其转换为一个“平坦”的地址模型,也就是一个从零开始、只包含地址信息的数据结构,这在 Q
阅读全文
摘要:简介: 内存虚拟化就是为虚拟机提供内存,使得虚拟机能够像在物理机上正常工作,这需要虚拟化软件为虚拟机展示一种物理内存的假象,内存虚拟化是虚拟化技术中关键技术之一。 qemu模拟虚机内存,核心是维护虚机物理地址空间。这个地址空间既要方便qemu管理,向虚机侧提供内存,又要方便展示和导出,向平台侧提供内
阅读全文
1