zx_resource_create


英文原文快照


名称

resource_create —— 创建资源对象

概要

  1. #include <zircon/syscalls.h>
  2. zx_status_t zx_resource_create(zx_handle_t parent_rsrc,
  3. uint32_t options,
  4. uint64_t base,
  5. size_t len,
  6. const char* name,
  7. size_t name_size,
  8. zx_handle_t* out_handle)

描述

resource_create() 创建一个资源对象,以便其他DDK系统调用使用。 资源通常分发给总线驱动程序,并很少需要使用驱动协议与驱动程序直接交互。 资源对象授予所有者对从base开始直到但不包括base+len的地址空间范围的访问权。 存在两种类型的特殊资源:ZX_RSRC_KIND_ROOTZX_RSRC_KIND_HYPERVISOR,它们没有与之关联的范围,并仅用作权限检查。

parent_rsrc必须是值为ZX_RSRC_KIND_ROOT*类型*资源的句柄。

options必须指定要创建的资源类型,并可能包含其它可选的标志。 有效的资源类型是ZX_RSRC_KIND_MMIOZX_RSRC_KIND_IRQZX_RSRC_KIND_IOPORT(仅限于x86体系结构),ZX_RSRC_KIND_ROOTZX_RSRC_KIND_HYPERVISORZX_RSRC_KIND_VMEX。 后三者不能与非零值的baselen配合使用,因为它们不使用地址空间范围,此时唯一的可选标志是ZX_RSRC_FLAG_EXCLUSIVE。 如果提供了ZX_RSRC_FLAG_EXCLUSIVE,那么系统调用将尝试独占地保留所请求的地址空间区域,以防止其他资源在创建时与之(只要它还存在)重叠。

namename_size参数是可选的,并且名字被透明地截断为至多ZX_MAX_NAME_LENGTH-1的长度。 该名字参数仅供调试/工具使用,而内核不会使用它们。

调用成功时,out_handle返回有效的资源句柄。

返回值

resource_create() 执行成功则返回ZX_OK。如果发生错误,将返回以下错误码之一。

权限

句柄将具有ZX_RIGHT_TRANSFER(允许通过channel将其发送到另一个进程中),ZX_RIGHT_DUPLICATE(允许复制句柄),ZX_RIGHT_INSPECT(允许使用object_get_info内省对象)和ZX_RIGHT_WRITE权限,并由resource_create() 自身进行检查。

错误码

ZX_ERR_BAD_HANDLEparent_rsrc是无效句柄。

ZX_ERR_WRONG_TYPEparent_rsrc不是资源类型句柄。

ZX_ERR_ACCESS_DENIEDparent_rsrc句柄不是ZX_RSRC_KIND_ROOT类型的资源。

ZX_ERR_INVALID_ARGS:下列情况之一,options包含无效的种类或标志的组合;name是无效指针;指定的类型是ZX_RSRC_KIND_ROOTZX_RSRC_KIND_HYPERVISOR之一但baselen不是0。

ZX_ERR_NO_MEMORY:由于内存不足导致的失败。 而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。

另见

handle_close, interrupt_create, ioports_requeat, vmo_create_physical