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),代表實體記憶體從實體位址鍵盤開始的「大小」位元組。

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,或者 paddrsize 並未對齊頁面。

ZX_ERR_NO_MEMORY 因記憶體不足而失敗。使用者空間無法以任何方式處理這個錯誤 (極可能) 錯誤。日後的建構作業不會再發生這個錯誤。

ZX_ERR_OUT_OF_RANGE 要求的大小過大。

另請參閱