zx_guest_create
名称
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);
描述
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_DENIED:resource不是ZX_RSRC_KIND_HYPERVISOR类型的资源。
ZX_ERR_INVALID_ARGS:guest_handle或vmar_handle是无效指针,或options非零。
ZX_ERR_NO_MEMORY:由于内存不足导致的失败。 而用户空间无法处理这个(不太可能发生的)错误。 在将来的构建版本中,将不再出现此错误。
ZX_ERR_WRONG_TYPE:resource不是资源类型句柄。
另见
guest_set_trap, vcpu_create, vcpu_resume, vcpu_interrupt, vcpu_read_state, vcpu_write_state, vmar_map, vmo_create.