zxvmo_create_physical

摘要

创建一个引用特定连续物理内存范围的虚拟机对象。

声明

#include <zircon/syscalls.h>

zx_status_t zx_vmo_create_physical(zx_handle_t resource,
                                   zx_paddr_t paddr,
                                   size_t size,
                                   zx_handle_t* out);

说明

zx_vmo_create_physical() 会创建一个新的虚拟内存对象 (VMO),该对象表示从物理地址 paddr 开始的 size 字节物理内存。

VMO 的内容大小将初始化为给定的(未舍入)大小。将 zx_object_get_property()ZX_PROP_VMO_CONTENT_SIZE 搭配使用,以读取 VMO 的内容大小。将 zx_object_set_property()ZX_PROP_VMO_CONTENT_SIZE 搭配使用,可设置 VMO 的内容大小,而无需实际调整 VMO 的大小。

成功时返回一个句柄,表示具有请求大小的对象。

默认情况下,系统会为句柄设置以下权限:

  • ZX_RIGHT_DUPLICATE - 句柄可能重复。

  • ZX_RIGHT_TRANSFER - 句柄可能会转移到另一个进程。

  • ZX_RIGHT_READ - 可读取或映射,并具有读取权限。

  • ZX_RIGHT_WRITE - 可能具有写入权限,或已映射为具有写入权限。

  • ZX_RIGHT_EXECUTE - 可与执行权限相关联。

  • ZX_RIGHT_MAP - 可能已映射。

  • ZX_RIGHT_GET_PROPERTY - 可使用 zx_object_get_property() 获取其属性。

  • ZX_RIGHT_SET_PROPERTY - 可使用 zx_object_set_property() 设置其属性。

ZX_VMO_ZERO_CHILDREN 信号在新创建的 VMO 上处于有效状态。当创建 VMO 的子项时,它会变为非活动状态;当所有子项都被销毁且这些子项在地址空间中没有映射时,它会再次变为活动状态。

备注

通过此系统调用创建的 VMO 无法与 zx_vmo_read()zx_vmo_write() 搭配使用。

权限

资源必须具有资源种类 ZX_RSRC_KIND_MMIO

返回值

zx_vmo_create_physical() 在成功时返回 ZX_OK。如果失败,则返回负错误值。

错误

ZER_ERR_WRONG_TYPE resource 不是 Resource 对象的句柄。

ZER_ERR_ACCESS_DENIED 资源未授予对所请求内存范围的访问权限。

ZX_ERR_INVALID_ARGS out 是无效指针或 NULL,size 为零,或者 paddrsize 未与页面对齐。

ZX_ERR_NO_MEMORY 因内存不足而导致的失败。 用户空间无法妥善处理此(不太可能发生的)错误。 在未来的 build 中,此错误将不再发生。

ZX_ERR_OUT_OF_RANGE 请求的大小过大。

另请参阅