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 · 1032 阅读 · 0 评论 -
gcc中的逗号表达式简写
看qemu代码的时候,看到一条语句,像是逗号表达式,又跟以往见的不一样。 a = b? : 1; 在gcc下 int b = 2; int a = 3; int main(void) { a = b? : 1; 00401324: mov 0x402000,%eax 00401329: mov %eax,%edx 0040132b: test原创 2012-07-22 14:09:07 · 1096 阅读 · 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 · 2577 阅读 · 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 · 681 阅读 · 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 · 1294 阅读 · 0 评论 -
softmmu同构函数的定义
在qemu的softmmu代码中,有很多函数它们的功能是相似的,只是处理的数据类型不同,这里我姑且称之为“同构”函数。如果为它们分别编写函数体,代码量及维护工作量会增加数倍,以softmmu_defs.h文件中声明的函数为例,共声明了16个函数 //softmmu_defs.h uint8_t REGPARM __ldb_mmu(target_ulong addr, int mmu_idx);原创 2012-04-24 18:44:24 · 3051 阅读 · 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 · 2917 阅读 · 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 · 3382 阅读 · 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 · 4128 阅读 · 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 · 1614 阅读 · 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 failed Make sure to have the zlib libs and headers installed. 安装zlib ./config原创 2012-10-30 19:13:25 · 3038 阅读 · 0 评论