总结
创建邀请对象。
声明
#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_BASE
的 ZX_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_handle 或 vmar_handle 是无效指针,或者 options 非零。
ZX_ERR_NO_MEMORY
由于内存不足而失败。
用户空间没有什么方法来处理此(不太可能)错误。在以后的 build 中,此错误不会再发生。
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()