QEMU:开源MIPS64 Release 6虚拟平台

这篇文章我将阐述MIPS Release 6架构的现状,其架构是基于其上个版本QEMU v2.4实现的。这是去年Imagination技术公司对开源和QEMU社区作出的几个大贡献中的一个。

继续往下读,看看MIPS版本6的支持是如何实现的,以及目前支持哪些东西,不久的将来,我们的计划又是什么?

MIPS版本6

版本6 是MIPS架构的最新版本, 为了未来的扩展,通过操作码映射添加新的功能和显著增加可用空间;这里有一张列表描述了这些变化。帮助开发人员快速、轻松地实现MIPS版本6而提供源码, Imagination对QEMU做出了主要贡献,让我们能够早日实现一个开源的MIPS版本6的虚拟平台。

QEMU是什么?

QEMU(快速模拟器)是一个开源的机器仿真器和虚拟器。它可以模拟整个机器包括处理器和外围设备(即完整系统模拟)比如MIPS Malta评估板或Lemote电脑基于MIPS Loongson-2E处理器。QEMU还可以模仿一个CPU的Linux用户模式(即linux用户模拟),将宾客的系统调用转换成主人系统调用。

CPU仿真是指令精准并且QEMU使用二进制翻译技术为不同的体系结构(例如基于x86系统上运行MIPS程序)来有效地运行程序。TCG(小型代码生成器)就是在QEMU中负责做“翻译”的组件。

当一个MIPS虚拟机运行在一个兼容MIPS的主机CPU上, QEMU可以利用KVM(基于内核的虚拟机)并且直接在主机CPU上执行客户软件指令,这显然是要快得多。有更多的方法来加速VM,例如只有一个附加选项在命令行,它可以替换在MIPS Malta板子上的默认网络适配器,使用virtio-net(准虚拟化网络适配器)极大地提高了宾客账户的网络性能。

QEMU提供了各种工具调试客户软件,如执行跟踪,gdb服务器以及监控器允许用户随时停止工作并检查系统。它还包含快照和移植能力。

还有更多的功能并且这些功能让QEMU变成一个方便的虚拟平台。

这是Debian 7(代号为Wheezy)运行在一个模拟的MIPS Malta板:

Debian 7(代号为Wheezy)运行在一个模拟的MIPS Malta板

QEMU是也可用于Android模拟器,在Android SDK和NDK有用到。你可以在如下图中找到MIPS:

Android SDK

MIPS

MIPS版本6如何加入QEMU?

MIPS版本6加入QEMU是在多个步骤下完成的。第一步是实现无特权模式的架构改变,为了在Linux用户模拟中运行MIPS版本6的Linux程序。这些变化主要包括添加解码的能力以及在MIPS TCG前端转换成新的无特权MIPS指令,并且当MIPS版本6处理器执行过时的指令时提高保留指令异常处理能力。

在这一点上,它可以运行Linux用户模式程序,编译器可以使用这个功能来验证生成的代码是否正确。下一步是实现特权结构的更改,以便客户操作像Linux的系统在完整系统模拟中可以使用新协处理器寄存器0。其中一个例子是BadInstr捕获最新的导致异常的指令。这些改变对于研发都是开源的,作为prpl的一部分和早期的一部分可用prpl QEMU库,最终他们合并到主线QEMU并且出现在版本2.2.0上。

几个月后, Imagination贡献了microMIPS版本6给了 QEMU。microMIPS提供可选的指令编码包括16位和32位的操作码。这个实现在QEMU中相对简单,因为它只是引进了新的编码到microMIPS解码器中,该解码器重新调用现有的负责翻译MIPS版本6的指令代码。microMIPS版本6最初是在prpl上完成,打包好后被发送到上游并且该功能出现在主线QEMU版本2.4.0。此外,这个版本的QEMU还提供了支持非对齐内存访问MIPS版本6;最初的计划实现大大的改善多亏了TCG维护者的帮助。

最近,MIPS版本6在TCG后端的额外支持已经提交给上游QEMU文件列表,这意味着QEMU现在可以模拟其他架构在一个主机上运行MIPS版本6处理器。此外,还有初始化的工作,那就是提供全球中断控制器的仿真(GIC)包含功能如共享的计时器,中断路由和处理器之间的中断。

试一试吧

如果你想带上具有MIPS的QEMU去外面“兜风”,你可以在 http://wiki.qemu.org/Download .下载最新版本。此外,GCC和Linux内核已经支持MIPS版本6。一旦我们想在Malta板子上编译MIPS64版本6 Linux内核然后root文件系统,我们可以在QEMU上运行来进行完整的系统模拟:
qemu-system-mips64el -M Malta -cpu MIPS64R6-generic -kernel vmlinux -append "root=/dev/hda console=ttyS0" -hda rfs.img -nographic

另外,我们还可以运行一个Linux用户模式程序:
qemu-mips64el -cpu MIPS64R6-generic a.out

记住,在linux用户模拟每个qemu - *二进制对应不同的系统调用ABI。例如,qemu-mips64只能运行64位ABI程序,qemu-mips32位对应32位 ABI程序以及qemu-mips o32 ABI。

prpl QEMU

Imagination技术,是prpl基金会的一员,提供了新的MIPS功能到prpl QEMU上。

有段时间它会花费大量的时间在上游的主要变化过程,然后接受和合并到主线。之后,你可能需要等待几个月,直到新的稳定版本发布。prpl QEMU提供最新的MIPS功能尽早可用,基于最新的上游QEMU的稳定版本。

如果你想试试prplQEMU,清登陆下它的主页

接下来是什么?

针对QEMU仍然有很多激动人心的工作正在进行。现在的焦点已经转向实现最新版本6多线程功能来取代现有的MIPS MT模块。这不仅包括禁用和启用虚拟处理器的新指令,而且包含我们的全球中断控制器和其他连贯的处理器系统组件,最终将允许MIPS64版本6 SMP Linux运行在QEMU上。GIC的初步实现已经在prpl QEMU可以用了并且更多的好东西很快就会到来。

最终目标是模拟多核集群,每个核都有多个虚拟处理器。如果这听起来很熟悉,那是因为这个新功能非常符合我们新的64位多线程MIPS I6400 CPU的功能。

原文链接:
http://blog.imgtec.com/mips-processors/qemu-the-open-source-mips64-relea...

--电子创新网--
粤ICP备12070055号