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 开始的物理内存的字节大小。

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() 一起使用。

权限

resource 必须具有资源种类 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,或者 paddrsize 未与页面对齐。

ZX_ERR_NO_MEMORY 由于内存不足而失败。 用户空间没有什么方法来处理此(不太可能)错误。在以后的 build 中,此错误不会再发生。

ZX_ERR_OUT_OF_RANGE请求的大小过大。

另请参阅