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() 的调用才能执行此操作。

权限

handle 必须为 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。

另请参阅