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_SYSTEM_HYPERVISOR_BASEZX_RSRC_KIND_SYSTEM 资源

为了在客户机中开始执行,应使用 zx_vmar_map() 将 VMO 映射到 vmar_handle,并且必须使用 zx_vcpu_create() 创建 vCPU,然后使用 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_SYSTEM_HYPERVISOR_BASE 的资源种类 ZX_RSRC_KIND_SYSTEM

返回值

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

错误

ZX_ERR_NOT_SUPPORTED设备不支持 Hypervisor。

ZX_ERR_ACCESS_DENIED 资源不是具有基本 ZX_RSRC_SYSTEM_HYPERVISOR_BASE 的种类 ZX_RSRC_KIND_SYSTEM

ZX_ERR_INVALID_ARGS guest_handlevmar_handle 是无效指针,或者 options 非零。

ZX_ERR_NO_MEMORY 由于内存不足而失败。 用户空间没有什么方法来处理此(不太可能)错误。在以后的 build 中,此错误不会再发生。

ZX_ERR_WRONG_TYPE resource 不是资源的句柄。

另请参阅