zx_vmar_map_clock

摘要

映射内核时钟对象的状态。

声明

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_INFO_CLOCK_MAPPED_SIZE 主题的时钟对象执行的 zx_object_get_info() 调用报告的长度。不允许部分映射时钟状态。

无论用户传递的选项如何,使用此系统调用创建的映射始终无法调整大小。

除了拥有足够的 VMAR 权限来创建映射之外,clock_handle 还必须拥有 ZX_RIGHT_READZX_RIGHT_MAP 权限。

与 VMO 类似,通过将原始映射的地址和长度传递给 zx_vmar_unmap() 的调用,即可取消映射时钟。

用户可以在映射时钟句柄后关闭该句柄,但仍可读取时钟的状态。 关闭时钟句柄不会销毁映射,只有对 zx_vmar_unmap() 的正确构造的调用才能销毁映射。

权限

句柄必须是 ZX_OBJ_TYPE_VMAR 类型。

clock_handle 必须是 ZX_OBJ_TYPE_CLOCK 类型。

返回值

如果成功,zx_vmar_map_clock() 会返回 ZX_OK 和映射的绝对基地址(通过 mapped_addr)。基地址将与页面对齐且不为零。如果失败,则返回负错误值。

错误

ZX_ERR_BAD_HANDLE handleclock_handle 不是有效的句柄。

ZX_ERR_WRONG_TYPE handleclock_handle 不是 VMAR 或时钟句柄。

ZX_ERR_BAD_STATE handle 指的是已销毁的 VMAR。

ZX_ERR_INVALID_ARGS,用于以下任一用途:

  • lenZX_INFO_CLOCK_MAPPED_SIZE 报告的映射大小不一致。
  • options 包含上述明确禁止的标志之一。

另请参阅 zx_vmar_map() 可能返回的错误,了解这两个系统调用可能共有的其他错误。

备注

使用 ZX_INFO_VMAR_MAPSZX_INFO_PROCESS_MAPS 主题通过 zx_object_get_info() 系统调用枚举的映射将包含与映射的 VMO 相同的信息,但有以下例外情况:

  • 字符串“kernel-clock”将作为映射的名称返回
  • 报告为时钟对象的 KOID 的映射的 KOID。

另请参阅