
qemu源码分析
文章平均质量分 75
源码解读
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
TangGeeA
这个作者很懒,什么都没留下…
展开
-
qemu文档翻译-tracing
= Tracing === 介绍 ==本文档介绍了QEMU中的跟踪基础结构,以及如何将其用于调试,分析和观察执行。== 快速开始 ==使用simple 作为tracing后端进行构建./configure --enable-trace-backends=simplemake创建一个文件用于追踪你感兴趣的事件:echo memory_region_ops_read >/tmp/events运行qemu来生成trace文件:qemu --trace event原创 2020-07-10 08:15:56 · 1180 阅读 · 1 评论 -
qemu-参数解析
qemu参数解析工作分为两部分1: 参数合法性验证。2 参数名称和值的解析。参数合法性验证主要是预先声明支持的参数信息,这些信息使用QEMUOption数据结构进行描述, 如下:typedef struct QEMUOption { const char *name; int flags; int index; uint32_t arch_mask;} QEMUOption;name代表参数名称, 比如-m 512 , m就表示这个name。flags目前只原创 2020-07-07 22:27:26 · 1123 阅读 · 0 评论 -
qemu总线系统(二) sysbus
qemu 支持的主版以Intel 440FX PMC(PCI and Memory Controller)为北桥芯片,PIIX(PCI ISA Xcelerator)为南桥芯片构成相应的芯片组。440FX PMC的基本结构图如下所示:北桥芯片PMC用于连接主板上的高速设备,向上提供了连接处理器的Host总线接口,可以连接多个处理器,向下则主要提供了连接内存DRAM的接口和连接PCI总线系统的...原创 2019-12-10 09:37:17 · 3484 阅读 · 1 评论 -
qemu总线系统一 -----bus
在计算机世界中存在众多的总线都叫做bus, 比如pci总线,isa总线,这些总线将系统设备和cpu连接在一起,用于设备之间,设备和cpu之间进行通信。 另外总线之间又可以通过各种转换器相连,这种转换器在计算机系统中被称之为桥,比如pci-pci桥用于pci总线的扩展。 pci-isa桥,用于pci总线扩展isa总线。 这种桥设备使总线结构编程树状结构。但是在上一级总线看来下一级总线只不过是支持该总...原创 2019-11-23 14:48:55 · 2461 阅读 · 0 评论 -
qemu2的qom系统分析(二)规范路径和属性
我们在qemu2的qom系统分析(-)对象系统 一文中分析过qom系统如何通过TypeInfo注册对象,和对象的创建,继承,实现。qom系统除了这些能力,还提供了引用计数能力,和属性设置,规范路径的能力。规范路径的能力其实就是设置对象的child类型子属性,从而形成对象之间的一个树状结构。这样从根节点向下遍历,每个对象都有一个唯一的路径,所以就可以通过路径来寻找对象。所以我们要想了解对象的规...原创 2019-11-23 12:41:33 · 1543 阅读 · 0 评论 -
qemu内存模型(7)地址空间的读写
对于tcg模式,读内存将执行accel/tcg/softmmu_template.h下的函数WORD_TYPE helper_le_ld_name(CPUArchState *env, target_ulong addr, TCGMemOpIdx oi, uintptr_t retaddr)# define helper_le_ld_na...原创 2019-10-19 16:49:31 · 2247 阅读 · 1 评论 -
qemu内存模型(6)mm实现(一)实模式
前边分析了qemu对内存的建模, 整个过程有三种内存地址 gpa, hva, gva, 在qemu中如何表现这三种内存呢,首先qemu把所有的ram片段(由MemoryRegion生成的RamBlock)平坦的铺开,串联起来, 放在ram_list 链表里面, 用于寻址ram, 这个平坦的ram地址用ram_addr_t表示(这里的ram不光指ram还要mmio和rom地址), hva呢用u...原创 2019-10-17 21:52:31 · 2222 阅读 · 0 评论 -
qemu tcg mmp分析
tb_page_addr_t get_page_addr_code(CPUArchState *env, target_ulong addr){ int mmu_idx, index, pd; void *p; MemoryRegion *mr; CPUState *cpu = ENV_GET_CPU(env); CPUIOTLBEntry *iotlbe...原创 2019-09-08 13:55:34 · 609 阅读 · 0 评论 -
qemu 内存模型(1)---文档
首先阅读qemu的memory.txt文档, 大概有如下信息可知1 首先AddressSpace是cpu可以看到的地址空间,一般就是cpu地址总线宽度的可寻址范围主要包括两个地址空间 1 ram 空间 , 通过mov等指令直接访问 2 I/O空间, 通过out in等io指令访问2 MemoryRegion 用于记录连续内存/io空间和host 虚拟地址的关系, 和这段连续空间的设备...原创 2019-09-28 12:56:34 · 3098 阅读 · 0 评论 -
qemu内存模型(2) 实现说明
在分析qemu的内存模型具体代码前我们先来说明一下qemu要实现的内存管理是什么?主要是两部分功能1 gva->gpa->hva, gva代表guest的虚拟内存地址, gpa代表guest的物理地址, 而hva代表宿主机的虚拟地址, qemu使用宿主机的虚拟地址模拟guest的物理地址, gva->gpa 的转换主要模拟mmu实现。 而gpa->hva的转换是q...原创 2019-09-28 14:08:55 · 1513 阅读 · 0 评论 -
qemu内存模型(3) 内存布局初始化
以i386为例static void memory_map_init(void){ system_memory = g_malloc(sizeof(*system_memory)); memory_region_init(system_memory, NULL, "system", UINT64_MAX); address_space_init(&addr...原创 2019-09-28 15:08:28 · 2348 阅读 · 1 评论 -
qemu内存模型(4) 内存渲染过程(MemoryRegion到FlatView)
/* Render a memory region into the global view. Ranges in @view obscure * ranges in @mr. */ 622 static void render_memory_region(FlatView *view, 623 MemoryRegion ...原创 2019-10-07 16:04:36 · 1967 阅读 · 1 评论 -
qemu内存模型(5) GPA到MemoryRegionSection
gpa 是指qemu虚拟机的guest端的cpu看到的内存地址空间。qemu的模型可以参考前边的四篇文章qemu 内存模型(1)—文档qemu内存模型(2) 实现说明qemu内存模型(3) 内存布局初始化qemu内存模型(4) 内存渲染过程(MemoryRegion到FlatView)前边分析qemu会将MemoryRegion转化为FlatRange, 在gpa的读写过程中,其实就...原创 2019-10-07 16:53:36 · 1770 阅读 · 0 评论 -
sigsetjmp, siglongjmp
#include <stdio.h>#include <signal.h>#include <setjmp.h>#include <unistd.h>#include <sys/time.h>sigjmp_buf jmp_env;static void connect_alarm(int a){ siglong...原创 2019-08-31 18:33:13 · 316 阅读 · 0 评论 -
关于qemu的一些思考
qemu已经看了四五个周末,主要分析了主事件循环和qom系统相关的一些基础知识,这些都是qemu的边缘部分,真正核心部分是内存管理和指定的翻译执行(cpu和外设的模拟),所以接下来如何学习,应该进行下思考。思考下模拟器执行的整个过程其实模拟器只需要把目标指令转换成host指令,然后执行相应的操作,基本上是模拟计算操作和io操作。对于如何转换,其实最关键的地方就是cpu执行的流和内存之间的关系。...原创 2019-09-08 13:30:07 · 545 阅读 · 0 评论 -
qemu2事件处理机制
todo原创 2019-08-17 14:57:48 · 1747 阅读 · 0 评论 -
qemu2 时钟系统分析
我们都知道程序能够执行,cpu能够运转,全都是靠时钟系统去驱动,我们今天来分析下qemu时钟系统如何工作time系统的文章主要在include/qemu/timer.h 中,我们主要分析它是如何实现的首先分析下时钟的功能1 记录时间2 处理定时任务qemu支持四种时钟/** 1. QEMUClockType: 2. 3. The following clock types are...原创 2019-08-17 13:32:07 · 2860 阅读 · 0 评论 -
qemu2的qom系统分析(-)对象系统
前边分析machine的注册和选择,发现如果 不了解qom系统是很难分析的。qom系统的说明在include/qom/object.h中。看注释估计是个中国人写的系统用于创建新的类型和对象,也就是我们在面向对象系统里面说的class,和object, 另外系统还实现了接口继承(可以多继承)。下面我们来看下这个面向对象系统是如何实现的。首先我们来剖析下面向对象系统的特点。首先面向对象系统把...原创 2019-08-11 14:55:44 · 1425 阅读 · 1 评论 -
qemu2 machine的注册和的选择
在qemu里面,machine代表一台要虚拟的硬件机器,那么qemu是如何注册和选择机器的?我们今天就来分析一下我们以i386机器为例子进行分析首先# For now, use stubs/sdl-null.c as an empty/fake SDL UI backend.# TODO: Use the glue code to use the Qt-based UI instead....原创 2019-08-11 12:11:05 · 1884 阅读 · 0 评论 -
qemu AIO线程池分析
TODO原创 2019-08-24 10:17:47 · 2039 阅读 · 0 评论 -
qemu协程分析
TODO原创 2019-08-24 10:18:26 · 1078 阅读 · 0 评论 -
qemu aio api
TODO原创 2019-08-24 10:19:05 · 1298 阅读 · 0 评论 -
qemu AIO线程模型
TODO原创 2019-08-24 10:49:24 · 1857 阅读 · 0 评论 -
qemu iohandler
TODO原创 2019-08-25 18:06:44 · 509 阅读 · 0 评论 -
qemu rcu实现
TODO原创 2019-08-28 21:25:55 · 1376 阅读 · 0 评论 -
ucontext函数说明
ucontext用于在用户空间切换函数运行上下文。什么是函数运行上下文,首先一个函数运行的必要环境包括1调用函数,也就是函数运行结束后返回哪里2函数的栈,返回地址一般被保存在栈上3 函数的代码来看下深入理解计算机系统中的一张图这图可以说明栈的情况。现在我们来看下ucontext提供的四个函数,和他们的主要意图/* Get user context and store it in ...原创 2019-08-31 17:49:05 · 884 阅读 · 0 评论 -
glib主事件循环
研究qemu事件派发机制,没想到牵扯到了glib,没办法分析一下吧qemu里面的glib主事件循环的api大概有如下几个 ctx = (AioContext *) g_source_new(&aio_source_funcs, sizeof(AioContext)); g_source_set_can_recurse(&ctx->source, true);...原创 2019-08-18 13:27:58 · 3168 阅读 · 1 评论