摘要
對應核心時鐘物件的狀態。
宣告
zx_status_t zx_vmar_map_clock(zx_handle_t handle,
zx_vm_option_t options,
uint64_t vmar_offset,
zx_handle_t clock_handle,
uint64_t len,
user_out_ptr<zx_vaddr_t> mapped_addr);
說明
將指定時鐘的狀態對應至指定的虛擬記憶體位址區域。對應會保留對基礎虛擬記憶體物件的參照,這表示關閉時鐘句柄不會移除此函式新增的對應項目。指定的 options
與呼叫 zx_vmar_map()
時使用的相同,但下列選項明確禁止使用,且一律會導致錯誤:
ZX_VM_PERM_WRITE
ZX_VM_PERM_EXECUTE
ZX_VM_PERM_READ_IF_XOM_UNSUPPORTED
此外,系統不會提供 vmo_offet
,且傳遞的長度必須是使用 zx_object_get_info()
對 ZX_INFO_CLOCK_MAPPED_SIZE
主題執行的計時器物件所回報的長度。不允許部分對應時鐘狀態。
無論使用者傳遞的選項為何,使用此系統呼叫建立的對應項目一律無法調整大小。
除了具備建立對應項目的 VMAR 權限外,clock_handle
也必須具備 ZX_RIGHT_READ
和 ZX_RIGHT_MAP
權限。
取消對時鐘的對應方式與 VMO 相同,即將原始對應的位址和長度傳遞至對 zx_vmar_unmap()
的呼叫。
使用者可能會在對時鐘進行對應後關閉時鐘的句柄,但仍可讀取時鐘的狀態。關閉時鐘句柄不會破壞對應,只有對 zx_vmar_unmap()
的正確建構呼叫才能做到這點。
權限
handle 必須是 ZX_OBJ_TYPE_VMAR
類型。
clock_handle 必須為 ZX_OBJ_TYPE_CLOCK
類型。
傳回值
zx_vmar_map_clock()
會在成功時傳回 ZX_OK
和對應的絕對基底位址 (透過 mapped_addr)。基本位址會與頁面對齊,且不為零。如果失敗,系統會傳回負值錯誤值。
錯誤
ZX_ERR_BAD_HANDLE
handle 或 clock_handle 不是有效的 handle。
ZX_ERR_WRONG_TYPE
handle 或 clock_handle 分別不是 VMAR 或 Clock 句柄。
ZX_ERR_BAD_STATE
handle 是指已銷毀的 VMAR。
ZX_ERR_INVALID_ARGS
的下列任一情況:
- len
與 ZX_INFO_CLOCK_MAPPED_SIZE
回報的對應大小不符。- options
包含上述明確禁止的標記。
如要瞭解這兩個系統呼叫的其他可能常見錯誤,請參閱zx_vmar_map() 可能傳回的錯誤。
附註
使用 ZX_INFO_VMAR_MAPS
或 ZX_INFO_PROCESS_MAPS
主題,搭配 zx_object_get_info()
系統呼叫的對應項目,會包含與對應 VMO 相同的資訊,但以下例外:
- 字串「kernel-clock」會傳回做為對應項目的名稱
- 對應關係的 KOID,會回報為時鐘物件的 KOID。
另請參閱
- mappable_clocks
zx_vmar_map()
zx_vmar_unmap()
zx_object_get_info()
ZX_INFO_CLOCK_MAPPED_SIZE
:object_get_info.md#zx_info_clock_mapped_sizeZX_INFO_VMAR_MAPS
:object_get_info.md#zx_info_vmar_mapsZX_INFO_PROCESS_MAPS
:object_get_info.md#zx_info_process_maps