zx_guest_create


英文原文快照


名称

guest_create —— 创建客户虚拟机

概要

  1. #include <zircon/syscalls.h>
  2. zx_status_t zx_guest_create(zx_handle_t resource, uint32_t options,
  3. zx_handle_t* guest_handle,
  4. zx_handle_t* vmar_handle);

描述

guest_create() 的功能是创建客户虚拟机,一个可以在虚拟机管理程序中运行的虚拟机,vmar_handle用于表示客户虚拟机的物理地址空间。

为了创建客户虚拟机,必须提供ZX_RSRC_KIND_HYPERVISOR类型的资源

为了开始运行客户虚拟机中,应使用vmar_map() 将VMO映射到vmar_handle句柄上,并且必须使用vcpu_create() 创建VCPU(虚拟CPU),然后通过vcpu_resume() 开始运行。

此外,还需将VMO映射到vmar_handle从而向客户虚拟机提供物理内存。

默认情况下,guest_handle句柄将被设置以下权限:

ZX_RIGHT_TRANSFER —— guest_handle可通过通道被传输。

ZX_RIGHT_DUPLICATE —— guest_handle可被复制。

ZX_RIGHT_WRITE —— 可使用guest_set_trap() 设置陷入中断。

ZX_RIGHT_MANAGE_PROCESS —— 可使用vcpu_create() 创建VCPU。

有关可在vmar_handle上设置的权限集合,请参阅vmar_create

权限

TODO(ZX-2399)

返回值

guest_create() 调用成功则返回ZX_OK。 如果调用失败,则返回负的错误码。

错误码

ZX_ERR_ACCESS_DENIEDresource不是ZX_RSRC_KIND_HYPERVISOR类型的资源。

ZX_ERR_INVALID_ARGSguest_handlevmar_handle是无效指针,或options非零。

ZX_ERR_NO_MEMORY:由于内存不足导致的失败。 而用户空间无法处理这个(不太可能发生的)错误。 在将来的构建版本中,将不再出现此错误。

ZX_ERR_WRONG_TYPEresource不是资源类型句柄。

另见

guest_set_trap, vcpu_create, vcpu_resume, vcpu_interrupt, vcpu_read_state, vcpu_write_state, vmar_map, vmo_create.