QEMU内部

2021-04-28 11:00:27

这是一系列关于Qemu内部的帖子。关于Qemu,它不会有关QEMU,但应该帮助您了解它是如何运作的,并且如何为乐趣和利润破解它。

我们不会解释在多方面文件中可以找到的使用情况和其他东西。将解决以下主题:

主机是Qemu正在运行的光栅和体系结构。通常是x86机器。

目标是QEMU模拟的架构。你可以在建造时间来建立一个你想要的时间:

因此,在源代码组织中,您将在目标/目录中找到所有支持的校验结构:

(qemu-git)ll targentdrwxrwxr-x 2 xxx xxx 4.0k alphadrwxrwxr-x 2 xxx xxx 4.0k armdrwxrwxr-x 2 xxx xxx 4.0k crisdrwxrwxr-x 2 xxx xxx 4.0k hppadrwxrwxr-x 3 xxx xxx 4.0k i386drwxrwxr-x 2 xxx xxx 4.0k lm32drwxrwxr-x 2 xxx xxx 4.0k m68kdrwxrwxr-x 2 xxx xxx 4.0k microblazedrwxrwxr-x 2 xxx xxx 4.0k mipsdrwxrwxr-x 2 xxx xxx 4.0k moxiedrwxrwxr-x 2 xxx xxx 4.0k nios2drwxrwxr-x 2 xxx xxx 4.0K OpenRiscdrwxrwxr-x 3 xxx xxx 4.0k ppcdrwxr-xr-x 3 xxx xxx 4.0k riscvdrwxrwxr-x 2 xxx xxx 4.0k s390xxdwxrwxr-x 2 xxx xxx 4.0k sh4drwxrwxr-x 2 xxx xxx 4.0k sparcdrwxrwxr-x 2 xxx xxx 4.0k彩色xdrwxrwxr-x 2 xxx xxx 4.0k tricoredrwxrwxr-x 2 xxx xxx 4.0k unoRe32drwxrwxr-x 9 xxx xxx 4.0k xtensa

(qemu-git)ls -ld * -softmmudrwxr-xr-x 9 xxx xxx 4096 i386-softmmudrwxrwxr-x 11 xxx xxx 4096 ppc-softmmudrwxr-xr-x 9 xxx xxx 4096 x86_64-softmmu

qemu是一个系统仿真器。它提供了大量校验的仿真,可以在很多架构上运行。

它能够通过qemu-system-< target&gt模仿完整的系统(CPU,设备,内核和应用程序);命令行工具。这是我们潜水的模式。

这允许直接运行<目标>建筑Linux二进制文件Ona Linux主机。它主要仿真<目标>指令将Andforward系统调用设置为Host Linux内核。将仿真唯一才能连接到用户级CPU指令,而不是系统级别,没有Deviceore低级存储器处理。

最初QEMU是一个仿真引擎,具有刚刚立即编译器(TCG)。 TCG在此处将目标指定指定架构(ISA)动态转换为主机ISA。

我们稍后会看到在TCG的上下文中,TCG-TargetBeComes TCG必须生成FinalAssembly代码的体系结构(这是主机ISA)。明显 !

存在目标和主机架构是Chesame的情况。例如,这通常是经典虚拟化环境(VMware,VirtualBox,...)中的情况,当用户想要运行Windowson Linux时。术语通常是主机和访客(目标)。

如今,QEMU通过不同的加速器提供虚拟化。虚拟化被视为加速器,因为在主机和针对相同的架构时防止不需要的指令仿真。只有系统级别(AKA Supervisor / Ring0)指令可能会被仿真/截获。

当然,QEMU虚拟化功能与主机和架构相关联。 X86架构提供硬件虚拟化扩展(Intel VMX / AMD SVM)。但主机操作系统必须允许QEMU从中获益。

void qemu_init_vcpu(cpustate * cpu){... if(kvm_kenabled()){qemu_kvm_start_vcpu(cpu); }如果(hax_enabled()){qemu_hax_start_vcpu(CPU); }否则if(hvf_enabled()){qemu_hvf_start_vcpu(cpu); }如果(tcg_enabled()){qemu_tcg_init_vcpu(cpu); }如果(whpx_enabled()){qemu_whpx_start_vcpu(CPU); } else {qemu_dummy_start_vcpu(CPU); } ...}

您可以在三个主要操作系统下采取X86硬件虚拟化的速度。请注意,TCG是Alsoconsidered Accelerator。我们可以在这里进入长期争论......

QEMU存在很多API,有些人已经过时而不是很好的。阅读源代码仍然是您的最佳选择。有一个很好的概述。

帖子系列将主要是解决QOM,QDev和VMState。 QOM是更摘要的QoM。虽然QEMU以C语言开发,但是,TheDeloppers选择实现QEMU对象模型,以提供来自这些类型的用户可创新类型和实例化的Aframework:设备,机器,CPU,...用于OopConcept的人将在QOM中找到它们的标记。

我们将简要介绍如何利用它,但不会详细说明不为其实施。保持务实!

应该指出的是,空中客车并不是关于这个博客文章的解释和完整性。此处呈现来自作者知识AndereStandings,如QEMUv4.2.0。