通用虚拟平台virt

        板virt为与任何真实硬件不相关的平台;它为虚拟机中使用。

        如果你想简单的运行guest比如linux并且不关心减少真实硬件的一些特性和限制,virt为建议的板类型。

        它为“versioned”板模型,因此与virt机器类型一样(它存在优化,bugfix和其他QEMU版本的修改),提供一个版本保证与之前的QEMU版本有相同的行为。比如virt-5.0机器类型将从QEMU5.0版本virt机器,且迁移特性在virt-5.0的QEMU 5.0和QEMU 5.1之间工作。迁移特性不能保证不同的QEMU版本能工作。

1 支持的设备

        virt板支持:

- PCI/PCIe 设备

- Flash 内存

- 一个PL011 UART

- 一个RTC

- fw_cfg设备允许guest从QEMU获取数据

- 一个PL061 GPIO控制器

- 一个可选的SMMUv3 IOMMU

- 可热插的DIMM

- 可热插的NVDIMM

- 一个MSI控制器(GICv2M或ITS)。与GICv2相关默认为GICv2M。GICv3默认选择ITS(>=virt-2.7)。注意ITS不支持TCG模式

- 32个virtio-mmio传输层设备

- 在aarch64硬件使用KVM加速器运行guest

- 大量RAM内存(最少256GB,若使用高端内存,可以更多)

- 很多CPUs(若支持GICv3和高端内存,可以最多512个)

- 若CPU有trustzone, 仅安全领域设备

支持的guest CPU类型:

- cortex-a7(32位)

- cortex-a15(32位)

- cortex-a53(64位)

- cortex-a57(64位)

- cortex-a72 (64位)

- host(仅KVM时支持)

- max(与host一样仅KVM时支持;最好与TCG模拟)

        注意默认位cortex-a15,因此对于aarch64 guest,你必须指明CPU类型。

        可以输出图像,但不像X86 PC机器类型,没有默认的显示设备使能:你应该从“-device help”中显示设备选择一个。建议的选项位"virtio-gpu-pci";它为可以与KVM工作的唯一选择。你也需要保证你的guest kernel被配置支持它。

2 机器相关的选项

        支持以下与机器相关的选项:

(1)secure

        设置on/off来使能或禁用模拟一个guest CPU,该CPU支持ARM安全扩展(TrustZone)。默认为off。

(2)virtualization

        设置on/off来使能或禁用模拟一个guest CPU,该CPU支持ARM虚拟化扩展。默认为off。

(3)mte

        设置on/off来使能或禁用模拟一个guest CPU,该CPU支持ARM  memory tagging扩展。默认为off。

(4)highmem

        设置on/off来使能或禁用将设备和RAM放到高32位的地址空间。默认位on。

(4)gic-version

        指明GIC的版本。有效的值为:2表示GICv2;3表示GICv3;host表示当使用KVM时使用与host上一样的GIC版本;max使用最好的GIC版本,与host一样需要使用KVM,对于TCG与3一样;

(5)its

        设置on/off来使能和禁用ITS转换。在virt-2.7以后的版本默认对于机器类型为on。

(6)iommu

        为guest创建IOMMU类型。有效值为:none表示不创建IOMMU,默认选项;smmuv3创建一个SMMUv3。

(7)ras

        使用on/off来使能和禁用使用ACPI和guest外部abort异常将host内存错误报告guest。默认为off。

3 Linux guest kernel配置

        Linux arm和arm64内核的defconfig应该包含virtio和PCI控制器的设备驱动;但是一些老的内核版本,特别是32位ARM,不需要将所有默认的都使能。若你没有看到期望的PCI设备,需要检查guest配置:

CONFIG_PCI=y
CONFIG_VIRTIO_PCI=y
CONFIG_PCI_HOST_GENERIC=y

        若你想使用virtio-gpu-pci图像设备,你需要配置:

CONFIG_DRM=y
CONFIG_DRM_VIRTIO_GPU=y

4 裸设备上编程的硬件配置信息

        板virt自动产生一个设备树dtb,该设备树被传递给guest。这提供一些信息,这些信息包括地址,中断线,和其他系统中其他各种设备的配置。Guest代码依赖并硬编码以下地址:

- Flash内存起始于地址0x0000_0000

- RAM起始于0x4000_0000

        所有其他设备信息在不同QEMU版本之间会有差异,因此guest必须查看DTB。

        QEMU对于virt支持两种类型的guest image启动,guest代码来定位dtb二进制的方法。

- 对于使用LINUX内核启动协议(这意味着任何non-ELF文件被传递给QEMU)的guest,DTB的地址也被传递到寄存器(r2为32位guest,x0表示64位guest)。

-对于以裸设备启动的guest,DTB的RAM的起始地址为(0x40000000).

你可能感兴趣的:(virtualization,qemu,virt)