QEMU开发新的架构一

QEMU开发新的架构,网上有很多介绍QEMU的文章,大部分都是讲TCG二进制翻译的与执行流程的。

QEMU的目录结构中target*都是各种ARCH,有ARM,MIPS,X86等等。

QEMU模拟一个架构都是分为用户态与系统态,所以,我们要加入系统态(全系统模拟)与用户态这两部分。

系统态就是全系统模拟,你可以执行相应的ARCH的二进制程序。用户态提供了在host端执行目标代码的机制。

当然假设我们有一个新的架构为XX,

那么我么就首先要对target*目录里的文件进行分析,看看都需要哪些重要的操作与过程。

首先以MIPS为例,cpu.c  cpu.h  cpu-qom.h  dsp_helper.c  gdbstub.c  helper.c  helper.h  kvm.c  kvm_mips.h  lmi_helper.c  machine.c  Makefile.objs  mips-defs.h  msa_helper.c  op_helper.c  translate.c  translate_init.c,这么多文件, 但是如果基本可以运行起来的话 只需要先加入 cpu.h cpu.c helper.c helper.h op_helper.c translate.c translate_init.c 这几个是最主要的文件。

cpu.h定义了有关CPU的基本信息,包括定点,浮点寄存器,特殊寄存器,还有各种宏表示,需要的各种参数等。

cpu.c实现了cpu的初始化,reset,还有其他一些功能。

helper.c 中主要实现了内存管理,异常处理等操作。

op_helper.c 中实现了一些很难用QEMU内部代码翻译的指令,主要有特殊指令,浮点指令,甚至是向量指令等。

translate.c 实现了target的指令翻译,以便能够在host上运行

translate_init.c 定义了处理的型号参数设定等。


到这里就基本知道有哪些内容了,所以在添加一个新的架构时,需要了解哪些内容。 首先你要对设计的架构非常熟悉,包括系统结构, 指令动作,功能,内存管理,等等。

对于QEMU你就要根据设计哪部分 就需要把哪部分搞明白才行。 例如内存管理这一块,你就要了解QEMU的内存管理的实现,和使用方法,如果有cache, TLB等,要如何操作。 要实现指令翻译就要了解QEMU的TCG二级制翻译这一块和算术指令异常处理过程,浮点的异常处理过程等。

后续会以一个架构具体实现说明添加过程, 这个是我刚工作时做的,已经过去快四年了,可能一些方面说的不太对,希望多交流,有疑问的可以提出。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值