
虚拟化
文章平均质量分 75
kvm,qemu虚拟化相关技术
bai-xin
种一棵树,最好的时间是十年前,其次是现在(间歇性看CSDN,消息不能及时回复,请见谅)
展开
-
qemu-virtio基本原理
virtio比较零散抽象,看了几回也没看懂怎么回事,记录一下自己的理解,不知道怎样组织内容,就以问答的形式吧。virtio整体流程是怎样的?盗用网上的一张图:一开始我也看不明白这里面都画了些啥东西,后面慢慢抽丝剥茧吧。virtio是如何实现共享内存的?大家都知道virtio以共享内存的零拷贝实现高性能的,理解virtio内存共享是理解virtio的基础。virtio实现共享内存基于两个基本的条件:qemu或者说host可以访问guest的任意内存地址的内容。qemu知道guest中物理地原创 2021-06-22 11:29:59 · 5160 阅读 · 3 评论 -
Android QEMU 高速管道(goldfish_pipe)
目录简介用法源码opengles相关网址简介goldfish_pipe是android中实现的一个高速管道驱动程序,主要应用在虚拟化场景中。goldfish_pipe为android内核与qemu之间提供了一个高性能的管道。其实现原理是共享内存,算是一个极简化的virtio的实现吧。要使用goldfish_pipe需要使用google提供的专用qemu。用法goldfish_pipe驱动对应的字符设备路径在/dev/goldfish_pipe下面,通过读写这个文件就可以完成guest与qemu之间的原创 2021-06-17 18:22:13 · 2474 阅读 · 3 评论 -
qemu声卡模拟原理-声音播放(pa+ac97)
之前声卡初始化说道了SWVoiceOut、HWVoiceOut两个结构体,在讲解声音播放之前有必要先介绍一下这两个对象。QEMUSoundCard:建模一个给定的模拟的声卡SWVoiceOut:建模一个来自 QEMUSoundCard 的音频输出HWVoiceOut:建模一个主机端的音频输出(后端)虚拟声卡的启动虚拟声卡由虚拟机内部调用启动,主要流程如下:ac97.c:nabm_write-> ac97.c:nabm_writeb-> ac97.c:voice_set_acti原创 2021-05-17 15:00:34 · 2076 阅读 · 2 评论 -
qemu声卡模拟原理-声卡初始化(pa+ac97)
后端初始化pa后端的源码在:audio/paaudio.c在vl.c的qemu_create_early_backends开始初始化,初始化主体流程如下:vl.c:qemu_create_early_backends-> audio.c:audio_init_audiodevs-> audio.c:audio_init-> audio.c:audio_driver_init-> paaudio.c:qpa_audio_init设备初始化模拟设备的初始化与原创 2021-05-17 14:58:48 · 1564 阅读 · 1 评论 -
qemu声卡模拟原理-基本使用方法
qemu版本:5.2.50qemu声卡的模拟分为模拟声卡和声卡后端设备两个部分,模拟声卡主要为虚拟机提供一个模拟的硬件设备,后端负责处理模拟声卡的声音数据,可以是直接播放声音、存储为文件或者传送到远程进行播放。创建后端设备要模拟声卡首先要考虑音频的后端是被是什么,后端设备大致有:oss、spice、sdl、wav、alsa、pa这几种。pa后端pa其实就是linux上的音频服务pulseaudio,在linux本地播放声音选择pa作为后端是一种较好的方式。oss、alsa都不建议选择,他们会独占声原创 2021-05-17 14:58:03 · 4416 阅读 · 2 评论 -
qemu虚拟化-pci框架
pci大体上比较类似sysbus,理解的时候最好类比。pci主要的工作是帮助pci设备管理configure的配置、模拟configure中的内存映射事件。老规矩,框架的解说从注册开始1.pci总线的注册设备的注册最早从pci_register_root_bus开始,一般是由具体的架构初始化的时候调用。下面看一下具体流程hw/pci/pci.c->pci_register_root_bus ->pci_root_bus_new ->qbus_create ->pci原创 2021-01-13 17:57:38 · 1128 阅读 · 2 评论 -
qemu虚拟化-pci设备模拟
pci设备算是学习qemu必须要掌握的一类设备的模拟,单独提出来说一下。这里以qemu的pci教学程序为基础讲解,源码路径:hw/misc/edu.c1.设备的定义typedef struct { PCIDevice pdev; MemoryRegion mmio; QemuThread thread; QemuMutex thr_mutex; QemuCond thr_cond; bool stopping; uint32_t addr4;原创 2021-01-13 17:54:46 · 2855 阅读 · 1 评论 -
qemu虚拟化-设备模拟框架源码解析(sysbus模拟)
1.原创 2021-01-13 13:09:25 · 1281 阅读 · 0 评论 -
qemu虚拟化-qom框架(qom进阶之设备初始化)
接上一篇文章中介绍的qom的基本用法和qom面向对象实现原理,这一篇讲一下qom实现的源码1.初始化函数的注册类型注册的调用接口是type_init(xxx_register_types),type_init是个宏定义,最终原理是gcc 的constructor属性,添加这个属性描述的函数为初始化函数,会在main函数执行之前执行,最后宏定义的作用就是在xxx_register_types 之前加上一个__attribute__((constructor)),再改改名字。目的是在main函数之前就注册好原创 2021-01-13 11:21:48 · 1295 阅读 · 0 评论 -
qemu虚拟化-设备模拟本质
设备驱动只不过是对一些寄存器的读写操作,对于底层来说就是一些内存地址。对于虚拟化来说,只是需要捕获这些特殊地址的读写操作,然后根据硬件逻辑进行模拟,最后吧模拟结果注入进guest即可。看一下老外的解释:July, 2017Here are some notes that may help newcomers understand what is actually happening with QEMU devices:With QEMU, one thing to remember is that w原创 2021-01-13 09:43:35 · 1506 阅读 · 0 评论 -
qemu虚拟化-设备模拟详解
这里还是以stm32uart的模拟为例子讲解,源码路径为hw/char/stm32f2xx_uart.c1.设备的定义typedef struct { /* <private> */ SysBusDevice parent_obj; /* <public> */ MemoryRegion mmio; uint32_t usart_sr; uint32_t usart_dr; uint32_t usart_brr;原创 2021-01-12 16:56:27 · 3658 阅读 · 0 评论 -
qemu虚拟化-面向对象qom与设备的添加
1.qemu中的qom作为一个应用层开发的人来说,qemu的qom面向对象的实现有点奇奇怪怪,它有别于常规语言java、c++、c#的实现机制,也不同于javascript那种原型链的实现方式,也不同于lua那种hash表的实现方式。第一次看qom我也很难理解。首先面向对象有两个基本概念:1.类(class)2.实例(instance)类是对象的类型、实例是类初始化后的对象。用惯了面向对象语言可能会对类的管理操作比较少,平时只需要定义即可。在这里特别提醒需要注意类的操作,否则后面类的操作理解起来会原创 2021-01-12 15:45:34 · 1674 阅读 · 1 评论