zx_guest_create

摘要

创建访客。

声明

#include <zircon/syscalls.h>

zx_status_t zx_guest_create(zx_handle_t resource,
                            uint32_t options,
                            zx_handle_t* guest_handle,
                            zx_handle_t* vmar_handle);

说明

zx_guest_create() 会创建一个客户机,该客户机是可以运行的虚拟机 在 Hypervisor 中,使用 vmar_handle 表示物理地址 空间

如需创建客机,请创建 ZX_RSRC_KIND_SYSTEM 资源, 必须提供 ZX_RSRC_SYSTEM_HYPERVISOR_BASE

为了开始在客机内执行,应将 VMO 映射到 vmar_handle(使用 zx_vmar_map()),并且必须使用 zx_vcpu_create(),然后使用 zx_vcpu_enter() 运行。

此外,应将 VMO 映射到 vmar_handle,以便为客户机提供 物理内存

默认情况下,系统将为标识名 guest_handle 设置以下权限:

ZX_RIGHT_TRANSFER - guest_handle 可以通过通道转移。

ZX_RIGHT_DUPLICATE - guest_handle 可能重复。

ZX_RIGHT_WRITE - 可以使用 zx_guest_set_trap() 设置 trap。

ZX_RIGHT_MANAGE_THREAD - 可以使用 zx_vcpu_create() 创建 vCPU。

如需了解适用于 vmar_handle 的一组权利,请参阅 zx_vmo_create()

权限

resource 必须具有基本资源种类 ZX_RSRC_KIND_SYSTEM ZX_RSRC_SYSTEM_HYPERVISOR_BASE

返回值

如果成功,zx_guest_create() 会返回 ZX_OK。如果失败,错误值为 返回。

错误

ZX_ERR_NOT_SUPPORTED 设备不支持 Hypervisor。

ZX_ERR_ACCESS_DENIED 资源不是 ZX_RSRC_KIND_SYSTEM 种类,其值为 基本 ZX_RSRC_SYSTEM_HYPERVISOR_BASE

ZX_ERR_INVALID_ARGS guest_handlevmar_handle 是无效的指针, 或 options 为非零值。

ZX_ERR_NO_MEMORY 因内存不足而失败。 用户空间没有好办法处理这种(不太可能)错误。 在将来的版本中,此错误不会再发生。

ZX_ERR_WRONG_TYPE resource 不是资源的句柄。

另请参阅