zx_vmo_create_physical
名称
vmo_create_physical —— 创建一个指向特定连续物理内存范围的VM对象
概要
#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);
描述
vmo_create_physical() 的功能是创建一个新的虚拟内存对象(VMO),它表示从物理地址paddr开始的连续size字节的内存区域。
调用成功则返回一个句柄,表示具有所请求内存大小的对象。
默认情况下,将在句柄上设置以下权限:
ZX_RIGHT_DUPLICATE —— 该句柄可被复制。
ZX_RIGHT_TRANSFER —— 该句柄可以被传输到另一个进程。
ZX_RIGHT_READ —— 可读或将映射权限设置为可读。
ZX_RIGHT_WRITE —— 可写或将映射权限设置为可写。
ZX_RIGHT_EXECUTE —— 可将映射权限设置为可执行。
ZX_RIGHT_MAP —— 该VMO可被映射。
ZX_RIGHT_GET_PROPERTY —— 可使用object_get_property获取其属性。
ZX_RIGHT_SET_PROPERTY —— 可使用object_set_property设置其属性。
ZX_VMO_ZERO_CHILDREN信号在新创建的VMO时处于活跃状态。 每当创建VMO的克隆时它就变为非活动状态,并且当该VMO所有副本都被销毁且不存在这些副本到地址空间的映射时,它才能再次变为活动状态。
注释
此系统调用创建的VMO不能与vmo_read() 或vmo_write() 一起使用。
权限
TODO(ZX-2399)
返回值
vmo_create_physical() 调用成功则返回ZX_OK,如果发生错误,则返回负的错误码。
错误码
ZER_ERR_WRONG_TYPE:resource不是资源类型的句柄。
ZER_ERR_ACCESS_DENIED:resource不具有对请求的内存区域的访问权限。
ZX_ERR_INVALID_ARGS:下列情况之一,out是无效指针或为NULL
;paddr或size大小不是页面对齐的。
ZX_ERR_NO_MEMORY:由于内存不足导致的失败。 而用户空间无法处理这个(不太可能发生的)错误。 在将来的构建版本中,将不再出现此错误。