zx_resource_create

摘要

建立資源物件。

宣告

#include <zircon/syscalls.h>

zx_status_t zx_resource_create(zx_handle_t parent_rsrc,
                               uint32_t options,
                               uint64_t base,
                               size_t size,
                               const char* name,
                               size_t name_size,
                               zx_handle_t* resource_out);

說明

zx_resource_create() 會建立與其他 DDK 搭配使用的資源物件 syscalls資源通常會提供給公車司機,但很少需要 由駕駛人透過驅動程式庫通訊協定直接與駕駛互動。資源物件 將位址空間範圍的存取權從 base 開始,最多授予 包括「基準」+「尺寸」Kind 有兩個特殊值: ZX_RSRC_KIND_ROOTZX_RSRC_KIND_SYSTEM。根資源沒有範圍 或是任何相關聯的資源系統資源是範圍資源,可當做父項資源 較少資源 (所有大小 1),供特殊權限檢查使用 則適用於 syscalls

parent_rsrc 必須是 Kind ZX_RSRC_KIND_ROOT 資源的控制代碼,或 符合要求 Kind 且包含 [base, base+size] 的資源 也不必擔心

options 必須指定要建立的資源類型,且可包含選用資源 旗標有效的資源種類包括 ZX_RSRC_KIND_MMIOZX_RSRC_KIND_IRQZX_RSRC_KIND_IOPORT (僅限 x86)、ZX_RSRC_KIND_ROOTZX_RSRC_KIND_SMC (僅限 ARM) 和 ZX_RSRC_KIND_SYSTEMZX_RSRC_KIND_SYSTEM 的有效基準為 ZX_RSRC_SYSTEM_HYPERVISOR_BASEZX_RSRC_SYSTEM_VMEX_BASEZX_RSRC_SYSTEM_DEBUG_BASEZX_RSRC_SYSTEM_INFO_BASEZX_RSRC_SYSTEM_CPU_BASEZX_RSRC_SYSTEM_POWER_BASEZX_RSRC_SYSTEM_MEXEC_BASEZX_RSRC_SYSTEM_ENERGY_INFO_BASEZX_RSRC_SYSTEM_IOMMU_BASEZX_RSRC_SYSTEM_FRAMEBUFFER_BASEZX_RSRC_SYSTEM_PROFILE_BASEZX_RSRC_SYSTEM_MSI_BASE。大小皆為 1 的尺寸ZX_RSRC_KIND_ROOT 必須與底數尺寸的零值配對,如 不會使用位址空間範圍

ZX_RSRC_FLAG_EXCLUSIVE 是選用旗標。如果 ZX_RSRC_FLAG_EXCLUSIVE 是 則系統會嘗試單獨保留 位址空間區域,以免系統建立其他資源時 只要檔案存在

namename_size 為選用欄位,且會截斷至 ZX_MAX_NAME_LENGTH - 1。 這個名稱僅供偵錯 / 工具使用,不會用於 核心。

成功後,resource_out 會傳回有效的資源控制代碼。

傳回值

zx_resource_create() 會在成功時傳回 ZX_OK。故障時, 會傳回負錯誤值。

傳回的帳號代碼將包含 ZX_RIGHT_TRANSFER (以便傳送至 透過 zx_channel_write() 的其他程序、ZX_RIGHT_DUPLICATE (允許 要複製的控制代碼),ZX_RIGHT_INSPECT (允許檢查 包含 zx_object_get_info()ZX_RIGHT_WRITE 的物件,由下列項目檢查: zx_resource_create() 本身。

權限

parent_rsrc 必須是 ZX_OBJ_TYPE_RESOURCE 類型,且包含 ZX_RIGHT_WRITE

錯誤

ZX_ERR_BAD_HANDLE parent_rsrc 控制代碼無效。

ZX_ERR_WRONG_TYPE parent_rsrc 處理常式不是資源控制代碼。

ZX_ERR_ACCESS_DENIED parent_rsrc 處理常式不是 種類ZX_RSRC_KIND_ROOT

ZX_ERR_INVALID_ARGS 選項包含無效的種類或標記組合, name 是無效的指標,或指定的 KindZX_RSRC_KIND_ROOTbasesize 並非 0。

ZX_ERR_NO_MEMORY 因記憶體不足而失敗。無論如何 處理此 (異常) 錯誤。在日後的版本中,這項錯誤不會 才能避免這類問題再次發生

另請參閱