支持的硬件
启用了 VMX 的 Intel 设备以及启动到 EL2 的 ARMv8.0 及更高版本的设备支持虚拟化。由于以下硬件包含在每日自动和手动测试中,因此可以得到最佳支持:
- Pixelbook Go m3
- Intel NUC7 (NUC7i5DNHE)
以下硬件也经常使用,但自动测试覆盖率不同。
- x64 QEMU/嵌套 VMX
在启用了嵌套 VMX 的情况下使用 Fuchsia 模拟器时,某些虚拟化功能可以使用。值得注意的是,在 Fuchsia 模拟器中运行时,任何客户机无法使用使用 virtmagma 的 Vulkan 加速。
受支持的邀请对象
虽然任意 Linux 客户机可以在 Fuchsia 上运行,但以下客户机配置在 Fuchsia 上的 CI 中进行测试:
- Zircon Guest - 一种极简的紫红色系统,可启动到 Zircon virtcon。
- Debian 客户机 - Debian bullseye 客户机。
- Termina Guest - 一种 Linux 客机,基于 ChromeOS 中的 Termina VM,包含与 Vulkan 和窗口管理器集成的额外功能。
使用虚拟化构建 Fuchsia
对于每个客机操作系统,构建中都必须包含一个客机管理器和一个核心分片。
在下例中,PRODUCT 通常是 core
之一,BOARD 通常是 x64
、chromebook-x64
和 sherlock
中的一个。
$ fx set PRODUCT.BOARD \
# For Debian Guest
--with //src/virtualization/bundles:debian \
--args='core_realm_shards += [ "//src/virtualization/bundles:debian_core_shards" ]' \
# For Zircon Guest
--with //src/virtualization/bundles:zircon \
--args='core_realm_shards += [ "//src/virtualization/bundles:zircon_core_shards" ]' \
# For Termina Guest
--with //src/virtualization/bundles:termina \
--args='core_realm_shards += [ "//src/virtualization/bundles:termina_core_shards" ]'
或者,您也可以使用以下命令启用所有访客:
$ fx set PRODUCT.BOARD \
--with //src/virtualization/bundles:all_guests \
--args='core_realm_shards += [ "//src/virtualization/bundles:all_core_shards" ]'
从 CLI 启动访客
您可以使用 guest
CLI 工具启动访客。该工具将启动客户机,然后通过 stdio 提供对 Virtio 控制台的访问权限:
启动 Debian 访客:
(fuchsia) $ guest launch debian
Starting Debian
$ uname -a Linux machina-guest 5.10.0-13-amd64 #1 SMP Debian 5.10.106-1 (2022-03-17) x86_64 GNU/Linux
启动 Zircon Guest
(fuchsia) $ guest launch zircon
Starting zircon
physboot: {{{reset}}}
physboot: {{{module:0:physboot:elf:9f2c4d6615bd603d}}}
physboot: {{{mmap:0x100000:0x14a100:load:0:rwx:0x0}}}
physboot: | Physical memory range | Size | Type
physboot: | [0x0000000000008000, 0x0000000000080000) | 480K | free RAM
physboot: | [0x0000000000100000, 0x00000000001cd000) | 820K | phys kernel image
physboot: | [0x00000000001cd000, 0x000000000024a000) | 500K | free RAM
physboot: | [0x000000000024a000, 0x000000000024a100) | 256B | phys kernel image
physboot: | [0x000000000024a100, 0x000000000024b000) | 3840B | free RAM
…
启动“termina”访客
(fuchsia) $ guest launch termina
Starting Termina
…
在具有界面堆栈的产品上,debian 和 zircon 客户机还会创建一个窗口,以显示由 virtio-gpu 驱动的虚拟帧缓冲区。来自该窗口的输入内容还将作为虚拟键盘发送给访客。
在 QEMU 上运行
在 x64 上的 QEMU 上运行客户机需要 KVM。您可能还需要在主机上启用嵌套 KVM。如需检查是否已启用嵌套虚拟化,请运行以下命令:
配置主机
cat /sys/module/kvm_intel/parameters/nested
输出 Y
表示嵌套虚拟化已启用,0
或 N
表示未启用。
如需启用嵌套虚拟化,直到下次重新启动,请运行以下命令:
modprobe -r kvm_intel
modprobe kvm_intel nested=1
如需使更改永久生效,请将以下行添加到 /etc/modprobe.d/kvm.conf
中:
options kvm_intel nested=1
启动 QEMU
完成主机设置后,您就可以启动 Fuchsia 模拟器:
$ ffx emu start
集成测试
Machina 有一组集成测试,用于启动 Zircon 和 Debian 客户机,以测试 VMM、Hypervisor 和每个 Virtio 设备。如需运行测试,请先将其添加到 build 中:
$ fx set PRODUCT.BOARD --with //src/virtualization:tests
$ fx build
然后,运行以下任一测试:
# Tests of the low level hypervisor syscalls:
$ fx test hypervisor_tests
# Basic tests that verify OS boot and basic functionality:
$ fx test virtualization-core-tests
# Test suites focused on specific devices:
$ fx test virtualization-block-tests
$ fx test virtualization-net-tests
$ fx test virtualization-sound-tests
$ fx test virtualization-vsock-tests
$ fx test virtualization-gpu-tests
$ fx test virtualization-input-tests