可用的硬體
虛擬化功能適用於啟用 VMX 的 Intel 裝置,以及啟動至 EL2 的 ARMv8.0 以上裝置。下列硬體可提供最佳可用性:
- Pixelbook Go m3
- Intel NUC7 (NUC7i5DNHE)
以下硬體也適用,但較容易發生故障:
- x64 QEMU/Nested VMX
在啟用巢狀 VMX 的情況下使用 Fuchsia 模擬器時,部分虛擬化功能會正常運作。值得注意的是,在 Fuchsia 模擬器中執行時,使用 virtmagma 的 Vulkan 加速功能將無法供任何訪客使用。
可入住房客
雖然任意的 Linux 訪客都能在 Fuchsia 上執行,但下列訪客設定可立即使用:
- Zircon Guest:可開機至 Zircon virtcon 的極簡 Fuchsia 系統。
- Debian 訪客 - Debian bullseye 訪客。
- Termina 訪客 - 以 ChromeOS 的 Termina VM 為基礎,包含 Vulkan 和視窗管理員整合的額外功能的 Linux 訪客。
使用虛擬化功能建構 Fuchsia
每個訪客作業系統都有一個訪客管理員和核心分片,必須納入建構項目。
首先,請在 Fuchsia 結帳時建立 //local/BUILD.gn
檔案,啟用虛擬化功能。在該檔案中,新增組態覆寫值以啟用虛擬化:
assembly_developer_overrides("enable_virtualization") {
platform = {
virtualization = {
enabled = true
}
}
}
接下來,請為所需訪客設定建構作業。PRODUCT 通常為 core
,BOARD 通常為 x64
、chromebook-x64
或 sherlock
之一。
所有嘉賓
fx set PRODUCT.BOARD --assembly-override=//local:enable_virtualization --with //src/virtualization/bundles:all_guests
Debian 訪客
fx set PRODUCT.BOARD --assembly-override=//local:enable_virtualization --with //src/virtualization/bundles:debian
Zircon Guest
fx set PRODUCT.BOARD --assembly-override=//local:enable_virtualization --with //src/virtualization/bundles:zircon
Termina 訪客
fx set PRODUCT.BOARD --assembly-override=//local:enable_virtualization --with //src/virtualization/bundles:termina
最後,建構 Fuchsia:
fx build
透過 CLI 啟動訪客
您可以使用 guest
CLI 工具啟動訪客。這項工具會啟動來賓,然後透過 stdio 提供對 virtio 主控台的存取權。
設定主機
如果您直接在專用硬體 (例如 Sherlock) 上執行 Fuchsia,則不需要主機設定。不過,大多數 Google 員工都會想在主機工作站上透過 QEMU 執行。針對此用途,您需要使用下列指令檢查是否已啟用巢狀虛擬化:
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 Emulator:
ffx emu start
啟動 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
…
在具有 UI 堆疊的產品中,Debian 和 Zircon 的訪客也會建立顯示虛擬幀緩的視窗,該幀緩由 virtio-gpu 提供動力。該視窗的輸入內容也會以虛擬鍵盤的形式傳送給來賓。
整合測試
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