zx_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);

說明

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 為零,或是 paddrsize 未與頁面對齊。

ZX_ERR_NO_MEMORY 記憶體不足,導致失敗。 使用者空間無法妥善處理這個 (不太可能發生的) 錯誤。 日後建構時就不會再發生這個錯誤。

ZX_ERR_OUT_OF_RANGE 要求的尺寸過大。

另請參閱