摘要
建立 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),代表實體記憶體從實體位址鍵盤開始的「大小」位元組。
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 的子項都遭到刪除,且所有子項都全數刪除,且沒有這些子項的對應至位址空間時,該 API 就會變成停用狀態,並再次啟用。
附註
這項系統呼叫建立的 VMO 無法與 zx_vmo_read()
和 zx_vmo_write()
搭配使用。
權限
「resource」必須具備資源種類 ZX_RSRC_KIND_MMIO
。
傳回值
zx_vmo_create_physical()
會在成功時傳回 ZX_OK
。如果失敗,系統會傳回負值的錯誤值。
錯誤
ZER_ERR_WRONG_TYPE
資源不是資源物件的控制代碼。
ZER_ERR_ACCESS_DENIED
資源不會授予要求的記憶體範圍存取權。
ZX_ERR_INVALID_ARGS
out 是無效指標或 NULL,或者 paddr 或 size 並未對齊頁面。
ZX_ERR_NO_MEMORY
因記憶體不足而失敗。使用者空間無法以任何方式處理這個錯誤 (極可能) 錯誤。日後的建構作業不會再發生這個錯誤。
ZX_ERR_OUT_OF_RANGE
要求的大小過大。