摘要
创建一个虚拟机对象,该对象引用特定的连续物理内存范围。
声明
#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,或者 paddr 或 size 未与页面对齐。
ZX_ERR_NO_MEMORY
由于内存不足而失败。
用户空间没有什么方法来处理此(不太可能)错误。在以后的 build 中,此错误不会再发生。
ZX_ERR_OUT_OF_RANGE
请求的大小过大。