摘要
建立訪客。
宣告
#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()
會建立訪客,也就是可在管理程序中執行的虛擬機器,其中 vmar_handle 用來代表訪客的實體位址空間。
如要建立訪客,您必須提供 ZX_RSRC_KIND_SYSTEM
的資源和 ZX_RSRC_SYSTEM_HYPERVISOR_BASE
。
如要開始在訪客中執行作業,您必須使用 zx_vmar_map()
將 VMO 對應至 vmar_handle,且 vCPU 必須使用 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()
設定的陷阱。
ZX_RIGHT_MANAGE_THREAD
:您可以使用 zx_vcpu_create()
建立 vCPU。
請參閱 zx_vmo_create()
,瞭解 vmar_handle 適用的權利組合。
權限
resource 的資源類型 ZX_RSRC_KIND_SYSTEM
必須搭配基礎 ZX_RSRC_SYSTEM_HYPERVISOR_BASE
。
傳回值
zx_guest_create()
會在成功時傳回 ZX_OK
。失敗時,系統會傳回錯誤值。
錯誤
ZX_ERR_NOT_SUPPORTED
裝置不支援管理程序。
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
因記憶體不足而失敗。使用者空間無法以任何方式處理這個錯誤 (極可能) 錯誤。日後的建構作業不會再發生這個錯誤。
ZX_ERR_WRONG_TYPE
資源不是資源的控制代碼。
另請參閱
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()