可用的硬體
虛擬化功能適用於啟用 VMX 的 Intel 裝置,以及啟動進入 EL2 的 ARMv8.0 以上版本裝置。AMD CPU 不支援虛擬化 (b/467349022)。下列硬體將提供最佳可用性:
- Pixelbook Go m3
- Intel NUC7 (NUC7i5DNHE)
您也可以使用下列硬體,但這些硬體較容易發生故障:
- x64 QEMU/巢狀 VMX
啟用巢狀 VMX 後,使用 Fuchsia 模擬器時,部分虛擬化功能將可運作。請注意,在 Fuchsia 模擬器中執行時,任何訪客都無法使用 virtmagma 進行 Vulkan 加速。
可邀請的對象
雖然任意 Linux 客體都可以在 Fuchsia 上執行,但下列客體設定可直接使用:
- Zircon Guest:可啟動至 Zircon virtcon 的極簡 Fuchsia 系統。
- Debian Guest - Debian bullseye 客戶端。
- Termina Guest:以 ChromeOS 的 Termina VM 為基礎,提供 Vulkan 和視窗管理員整合的其他功能。
透過虛擬化建構 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 Guest
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 Guest
fx set PRODUCT.BOARD --assembly-override=//local:enable_virtualization --with //src/virtualization/bundles:termina
最後,建構 Fuchsia:
fx build
透過 CLI 啟動 Guest
您可以使用 guest CLI 工具啟動訪客。這項工具會啟動訪客,然後透過 stdio 提供 virtio-console 的存取權。
設定主機
如果您是直接在專用硬體 (例如 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 模擬器:
ffx emu start啟動 Debian Guest:
(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 Guest
(fuchsia) $ guest launch termina
Starting Termina
…
在搭載 UI Stack 的產品上,debian 和 zircon 客戶端也會建立視窗,顯示由 virtio-gpu 驅動的虛擬 framebuffer。系統也會將該視窗的輸入內容以虛擬鍵盤的形式傳送給來賓。
整合測試
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