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
    评论
QEmu虚拟机 做嵌入式开发的朋友试试 调试内核很方便 QEMU emulator version 0.13.0, Copyright (c) 2003-2008 Fabrice Bellard usage: qemu [options] [disk_image] 'disk_image' is a raw hard disk image for IDE hard disk 0 Standard options: -h or -help display this help and exit -version display version information and exit -M machine select emulated machine (-M ? for list) -cpu cpu select CPU (-cpu ? for list) -smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets] set the number of CPUs to 'n' [default=1] maxcpus= maximum number of total cpus, including offline CPUs for hotplug, etc cores= number of CPU cores on one socket threads= number of threads on one CPU core sockets= number of discrete sockets in the system -numa node[,mem=size][,cpus=cpu[-cpu]][,nodeid=node] -fda/-fdb file use 'file' as floppy disk 0/1 image -hda/-hdb file use 'file' as IDE hard disk 0/1 image -hdc/-hdd file use 'file' as IDE hard disk 2/3 image -cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master) -drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i] [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off] [,cache=writethrough|writeback|none|unsafe][,format=f] [,serial=s][,addr=A][,id=name][,aio=threads|native] [,readonly=on|off] use 'file' as a drive image -set group.id.arg=value set parameter for item of type i.e. -set drive.$id.file=/path/to/image -global driver.property=value set a global default for a driver property -mtdblock file use 'file' as on-board Flash memory image -sd file use 'file' as SecureDigital card image -pflash file use 'file' as a parallel flash image -boot [order=drives][,once=drives][,menu=on|off] 'drives': floppy (a), hard disk (c), CD-ROM (d), network (n) -snapshot write to temporary files
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更这些源码资源,以适应各平台技术的最发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值