摘要
创建一个引用特定连续物理内存范围的虚拟机对象。
声明
#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 为零,或者 paddr 或 size 未与页面对齐。
ZX_ERR_NO_MEMORY 因内存不足而导致的失败。
用户空间无法妥善处理此(不太可能发生的)错误。
在未来的 build 中,此错误将不再发生。
ZX_ERR_OUT_OF_RANGE 请求的大小过大。