摘要
建立參照特定連續實體記憶體範圍的 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);
說明
zx_vmo_create_physical() 會建立新的虛擬記憶體物件 (VMO),代表從實體位址 paddr 開始的 size 位元組實體記憶體。
VMO 的內容大小會初始化為指定 (未四捨五入) 的大小。
搭配 ZX_PROP_VMO_CONTENT_SIZE 使用 zx_object_get_property(),即可讀取 VMO 的內容大小。搭配 ZX_PROP_VMO_CONTENT_SIZE 使用 zx_object_set_property(),即可設定 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 就會變成非使用中狀態,而當所有子項都已毀損,且這些子項沒有對應到位址空間時,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 resource 不會授予所要求記憶體範圍的存取權。
ZX_ERR_INVALID_ARGS out 是無效的指標或 NULL,size 為零,或是 paddr 或 size 未與頁面對齊。
ZX_ERR_NO_MEMORY 記憶體不足,導致失敗。
使用者空間無法妥善處理這個 (不太可能發生的) 錯誤。
日後建構時就不會再發生這個錯誤。
ZX_ERR_OUT_OF_RANGE 要求的尺寸過大。