支援的硬體
虛擬化功能適用於已啟用 VMX 的 Intel 裝置,以及 ARMv8.0 及以上版本 (啟動進入 EL2 的裝置)。下列硬體結合每日自動和手動測試,將可提供最佳支援:
- Pixelbook Go m3
- Intel NUC7 (NUC7i5DNHE)
下列硬體經常也會使用,但自動化測試涵蓋率不如預期。
- x64 QEMU/巢狀 VMX
使用已啟用 VMX 的 Fuchsia 模擬器時,部分虛擬化功能可以正常運作。值得注意的是,在 Fuchsia 模擬器中執行時,任何訪客都無法使用 virtmagma 的 Vulkan 加速功能。
支援的邀請對象
雖然任意 Linux 訪客可在 Fuchsia 上執行,但下列訪客設定已在 Fuchsia 的 CI 中測試:
- Zircon 訪客 - 可啟動 Zircon virtcon 的基本沙發系統。
- Debian 訪客 - Debian bullseye 訪客。
- Termina 訪客 - linux 訪客,包含 Vulkan 和視窗管理員整合的額外功能 (以 ChromeOS 的 Termina VM 為基礎)。
運用虛擬化功能打造 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-console 的存取權:
啟動 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 訪客
(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
…
在含有 UI 堆疊的產品上,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、管理程序和每個 virtio 裝置。如要執行測試,請先將這些測試新增至建構作業:
$ 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