摘要
创建访客。
声明
#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_handle 或 vmar_handle 是无效的指针,
或 options 为非零值。
ZX_ERR_NO_MEMORY
因内存不足而失败。
用户空间没有好办法处理这种(不太可能)错误。
在将来的版本中,此错误不会再发生。
ZX_ERR_WRONG_TYPE
resource 不是资源的句柄。
另请参阅
zx_guest_set_trap()
zx_vcpu_create()
zx_vcpu_enter()
zx_vcpu_interrupt()
zx_vcpu_kick()
zx_vcpu_read_state()
zx_vcpu_write_state()
zx_vmar_map()
zx_vmo_create()