请参阅发行说明,了解平台能力以及对 hypervisor 方案的支持情况。
先决条件与 Kconfig
在主机内核配置中启用以下选项:在 EL2 启动内核
除少数平台外,各平台现已默认配置为启动进入 KVM。请参阅发行说明了解各平台的能力。 对于启动进入 Gunyah 而非 KVM 的平台,请使用以下说明切换到 KVM。请按给定顺序执行步骤。默认配置为启动进入 KVM 的平台不需要执行以下步骤。
- 使用默认镜像启动。
-
更新 EFI 变量以选择 KVM 设备树覆盖:
-
重启进入 fastboot 模式。在设备 shell 中运行以下命令:
-
从主机刷写 KVM XBL 配置镜像:
xbl_config_kvm.elf文件位于 Yocto 构建输出的build/tmp/deploy/images/<machine-name>目录下。 替换以下内容:- 将
<machine-name>替换为实际的 Yocto 机器配置名称,例如iq-9075-evk。
- 将
- 重启设备。
启动客户机 VM
在启动客户机 VM 之前,请确保客户机内核镜像(Image)、根文件系统 CPIO(rootfs.cpio.gz)和根文件系统镜像(rootfs.ext4)已存在于主机的 /mnt/overlay/guest/ 目录中。
使用 QEMU
使用 ramdisk 启动:使用 libvirt
Libvirt 通过virsh 命令行工具和 libvirtd 守护进程管理 VM。从 XML 域文件定义 VM,然后使用以下命令进行控制:
表:常用 virsh VM 管理命令
替换以下内容:
- 将
<xml-file>替换为 libvirt XML 域定义文件的路径。 - 将
<domain>替换为 XML<name>元素中定义的 VM 域名称。
Virtio 设备支持
Virtio 提供了一个半虚拟化 I/O 框架,用于在客户机 VM 与主机之间实现高性能设备模拟。前端驱动运行在客户机操作系统中;后端驱动运行在 QEMU 或内核中。通信使用 virtqueue(环形缓冲区)以最大限度减少客户机到主机的切换。 表:支持的 virtio 设备主机到客户机的文件共享(virtio-9p)
使用 9P 文件系统将主机目录传递给客户机 VM:- 将
<mount-point>替换为客户机内用于挂载共享文件夹的目录。
虚拟套接字(VSOCK)
VSOCK 使用上下文标识符(CID)实现客户机 VM 与主机之间的套接字通信。主机 CID 始终为 2;客户机 CID 从 3 开始。 表:保留的 CID 值
在 QEMU 调用中添加 VSOCK:
- 将
<cid>替换为要分配给客户机 VM 的 CID,例如73。
设备直通
可以使用 VFIO(PCI)、libusb(USB)或 chardev 后端(UART)将物理设备直通给客户机 VM。 在主机上识别 USB 设备:lsusb 输出中的厂商 ID 和产品 ID,在 QEMU 调用中添加 USB 直通:
lspci 输出中的域、总线、插槽和功能号添加 PCI 直通:
- 将
<vid>和<pid>替换为十六进制的 USB 厂商 ID 和产品 ID,例如0x0781和0x5567。 - 将
<bus>、<slot>、<function>替换为lspci输出中的 PCI 地址组成部分。
chardev 后端,并将其作为 virtserialport 暴露给客户机。
可观测性与维护
KVM 跟踪
通过 tracefs 启用 KVM 事件跟踪:看门狗
QEMU 模拟一个 I6300 ESB 看门狗设备,以标准看门狗字符设备的形式暴露给客户机。在客户机内核中启用它:action 属性控制超时时的行为:reset 重启客户机,poweroff 将其关机。详情请参阅 libvirt 看门狗文档。
远程命令执行
QEMU 客户机代理(qemu-ga)允许在没有网络连接的情况下从主机在客户机 VM 上运行命令。在客户机操作系统用户空间中启用 qemu-ga,并通过 virtio-serial 接口进行配置。
使用带有 guest-exec 子命令的 virsh qemu-agent-command 远程执行命令:
- 将
<domain>替换为 VM 域名称。

