![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
qemu
文章平均质量分 74
heron804
这个作者很懒,什么都没留下…
展开
-
RAMBlock之file_ram_alloc
在linux下,分配RAMBlock时可以将内存块映射到文件中,详细内容可见file_ram_alloc函数,下面是该函数的主要部分:static void *file_ram_alloc(RAMBlock *block, ram_addr_t memory, const原创 2012-03-25 17:15:41 · 1045 阅读 · 0 评论 -
gcc中的逗号表达式简写
看qemu代码的时候,看到一条语句,像是逗号表达式,又跟以往见的不一样。a = b? : 1;在gcc下int b = 2;int a = 3;int main(void) { a = b? : 1;00401324: mov 0x402000,%eax00401329: mov %eax,%edx0040132b: test原创 2012-07-22 14:09:07 · 1113 阅读 · 0 评论 -
QEMU模块构造
QEMU模块构造#define module_init(function, type) \static void __attribute__((constructor)) do_qemu_init_ ## function(void) { \ register_module_init(funct原创 2012-07-04 11:21:00 · 2586 阅读 · 0 评论 -
qemu中反转比较与交换比较操作数方法
首先将各种比较操作以枚举形式定义:typedef enum { TCG_COND_EQ, TCG_COND_NE, TCG_COND_LT, TCG_COND_GE, TCG_COND_LE, TCG_COND_GT, /* unsigned */ TCG_COND_LTU, TCG_COND_GEU,原创 2012-05-11 11:21:12 · 702 阅读 · 0 评论 -
动态翻译代码异常时目标CPU状态恢复
动态翻译器执行时如果出现异常,可如何确定异常位置对应的目标位置呢?首先,执行语句:tb = tb_find_pc(pc);其中pc表示异常出现时宿主PC值,如果返回的tb不为NULL,则说明异常发生在动态翻译代码执行时。为了恢复目标CPU的状态,需要使用cpu_restore_state函数。它与函数cpu_gen_code类似,但两者生成中间码时调用函数分别是gen_interm原创 2012-05-06 16:58:26 · 1310 阅读 · 0 评论 -
softmmu同构函数的定义
在qemu的softmmu代码中,有很多函数它们的功能是相似的,只是处理的数据类型不同,这里我姑且称之为“同构”函数。如果为它们分别编写函数体,代码量及维护工作量会增加数倍,以softmmu_defs.h文件中声明的函数为例,共声明了16个函数//softmmu_defs.huint8_t REGPARM __ldb_mmu(target_ulong addr, int mmu_idx);原创 2012-04-24 18:44:24 · 3079 阅读 · 0 评论 -
qemu指令计数
使用全局变量use_icount标记qemu如何进行指令计数。use_icout=0:表示不统计执行的指令数;use_icout=1:表示精确同时执行的指令数;use_icout=2:表示对执行的指令数进行适应性估计。在configure_icount函数中对use_icount进行设置void configure_icount(const char *option);原创 2012-03-20 12:21:23 · 3074 阅读 · 0 评论 -
qemu时钟
QEMU有三种时钟:REALTIME、VIRTUAL和HOST时钟。REALTIME时钟是通过直接获取宿主机CPU的时钟信息来计时。VIRTUAL时钟在use_icount不为0时,通过模拟执行的指令数来计时;在use_icount为0时,本质上还是REALTIME时钟。HOST时钟则是直接从宿主系统中获取实际信息。在windows下,获取CPU始终频率使用下面方法:原创 2012-03-20 12:12:46 · 3465 阅读 · 0 评论 -
QEMU翻译块(TB)分析
1 翻译缓存qemu中翻译缓存是一块连续的内存单元,使用全局变量code_gen_buffer保存其首地址,缓存大小由全局变量code_gen_buffer_size指示;全局变量code_gen_ptr指示当前未使用的缓存地址。static uint8_t *code_gen_buffer;static unsigned long code_gen_buffer_size;sta原创 2012-03-28 13:32:05 · 4242 阅读 · 0 评论 -
QEMU分页机制分析
1 qemu页面层次划分qemu通过定义一些宏灵活地进行分页,首先由宏TARGET_PAGE_BITS(12)确定页的大小,然后根据目标机的物理地址空间和宿主机的字长确定P_L1_BITS和V_L1_BITS,从而使得剩余部分可以被L2_BITS均分。那么如何确定P_L1_BITS和V_L1_BITS的值呢?先看下面两个宏定义:/* The bits remaining after N l原创 2012-03-26 17:47:35 · 1643 阅读 · 0 评论 -
ubuntu 10.04/Windows上编译qemu 1.2
在ubuntu 10.04上,qemu 1.2的编译过程如下:1) ./configure --target-list=arm-softmmu --prefix=/usr出现下面提示:Error: zlib check failedMake sure to have the zlib libs and headers installed.安装zlib./config原创 2012-10-30 19:13:25 · 3053 阅读 · 0 评论