摘要
建立資源物件。
宣告
#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_ROOT
和ZX_RSRC_KIND_SYSTEM
。根資源沒有範圍
或是任何相關聯的資源系統資源是範圍資源,可當做父項資源
較少資源 (所有大小 1),供特殊權限檢查使用
則適用於 syscalls
parent_rsrc 必須是 Kind ZX_RSRC_KIND_ROOT
資源的控制代碼,或
符合要求 Kind 且包含 [base, base+size] 的資源
也不必擔心
options 必須指定要建立的資源類型,且可包含選用資源
旗標有效的資源種類包括 ZX_RSRC_KIND_MMIO
、ZX_RSRC_KIND_IRQ
、
ZX_RSRC_KIND_IOPORT
(僅限 x86)、ZX_RSRC_KIND_ROOT
、ZX_RSRC_KIND_SMC
(僅限 ARM) 和 ZX_RSRC_KIND_SYSTEM
。
ZX_RSRC_KIND_SYSTEM
的有效基準為 ZX_RSRC_SYSTEM_HYPERVISOR_BASE
。
ZX_RSRC_SYSTEM_VMEX_BASE
、ZX_RSRC_SYSTEM_DEBUG_BASE
、
ZX_RSRC_SYSTEM_INFO_BASE
、ZX_RSRC_SYSTEM_CPU_BASE
、
ZX_RSRC_SYSTEM_POWER_BASE
、ZX_RSRC_SYSTEM_MEXEC_BASE
、
ZX_RSRC_SYSTEM_ENERGY_INFO_BASE
、ZX_RSRC_SYSTEM_IOMMU_BASE
、
ZX_RSRC_SYSTEM_FRAMEBUFFER_BASE
、ZX_RSRC_SYSTEM_PROFILE_BASE
和
ZX_RSRC_SYSTEM_MSI_BASE
。大小皆為 1 的尺寸。
ZX_RSRC_KIND_ROOT
必須與底數和尺寸的零值配對,如
不會使用位址空間範圍
ZX_RSRC_FLAG_EXCLUSIVE
是選用旗標。如果 ZX_RSRC_FLAG_EXCLUSIVE
是
則系統會嘗試單獨保留
位址空間區域,以免系統建立其他資源時
只要檔案存在
name 和 name_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 是無效的指標,或指定的 Kind 為 ZX_RSRC_KIND_ROOT
但 base 和 size 並非 0。
ZX_ERR_NO_MEMORY
因記憶體不足而失敗。無論如何
處理此 (異常) 錯誤。在日後的版本中,這項錯誤不會
才能避免這類問題再次發生