zx_resource_create
名称
resource_create —— 创建资源对象
概要
#include <zircon/syscalls.h>
zx_status_t zx_resource_create(zx_handle_t parent_rsrc,
uint32_t options,
uint64_t base,
size_t len,
const char* name,
size_t name_size,
zx_handle_t* out_handle)
描述
resource_create() 创建一个资源对象,以便其他DDK系统调用使用。 资源通常分发给总线驱动程序,并很少需要使用驱动协议与驱动程序直接交互。 资源对象授予所有者对从base开始直到但不包括base+len的地址空间范围的访问权。 存在两种类型的特殊资源:ZX_RSRC_KIND_ROOT和ZX_RSRC_KIND_HYPERVISOR,它们没有与之关联的范围,并仅用作权限检查。
parent_rsrc必须是值为ZX_RSRC_KIND_ROOT*类型*资源的句柄。
options必须指定要创建的资源类型,并可能包含其它可选的标志。 有效的资源类型是ZX_RSRC_KIND_MMIO,ZX_RSRC_KIND_IRQ,ZX_RSRC_KIND_IOPORT(仅限于x86体系结构),ZX_RSRC_KIND_ROOT,ZX_RSRC_KIND_HYPERVISOR和ZX_RSRC_KIND_VMEX。 后三者不能与非零值的base和len配合使用,因为它们不使用地址空间范围,此时唯一的可选标志是ZX_RSRC_FLAG_EXCLUSIVE。 如果提供了ZX_RSRC_FLAG_EXCLUSIVE,那么系统调用将尝试独占地保留所请求的地址空间区域,以防止其他资源在创建时与之(只要它还存在)重叠。
name和name_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_HANDLE:parent_rsrc是无效句柄。
ZX_ERR_WRONG_TYPE:parent_rsrc不是资源类型句柄。
ZX_ERR_ACCESS_DENIED:parent_rsrc句柄不是ZX_RSRC_KIND_ROOT类型的资源。
ZX_ERR_INVALID_ARGS:下列情况之一,options包含无效的种类或标志的组合;name是无效指针;指定的类型是ZX_RSRC_KIND_ROOT或ZX_RSRC_KIND_HYPERVISOR之一但base和len不是0。
ZX_ERR_NO_MEMORY:由于内存不足导致的失败。 而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。
另见
handle_close, interrupt_create, ioports_requeat, vmo_create_physical