Magma:總覽

背景

Fuchsia 是 Google 開發的全新開放原始碼微型作業系統,驅動程式不會在 Zircon 核心中執行,而是具有特殊權限的使用者空間程序。驅動程式是以穩定的 FDF 建構而成。

Magma 是 Fuchsia 的 GPU 驅動程式庫架構。驅動程式分為兩種:每個應用程式位址空間載入的 GPU 專屬程式庫,以及管理硬體的放大鏡系統驅動程式庫。

硬體需求

符合 Vulkan 標準的 GPU

Magma 設計為支援 Vulkan,但這可用於實作 OpenGL 或其他圖形 API。Fuchsia 的目標是透過 ANGLE,支援使用 OpenGL API 將 OpenGL API 轉譯至 Vulkan 的軟體。

MMU

一個記憶體管理單元,允許將系統記憶體頁面任意對應至 GPU 位址空間,讓 DMA 與非連續緩衝區。

個別用戶端的獨立位址空間

以系統安全性來說,在 GPU 和 CPU 網域中維持位址空間隔離至關重要。

統一的記憶體架構

這可能會在日後放鬆。

架構

與 Linux 的直接算繪模型類似,有兩個驅動程式元件:一個已載入至每個應用程式位址空間的 GPU 專屬程式庫,以及管理硬體的 Mama 系統驅動程式。

Magma 系統驅動程式庫

職責:

  • 正在初始化硬體
  • 設定記憶體空間
  • 設定硬體內容
  • 對應緩衝區
  • 排程指令緩衝區
  • 處理錯誤
  • 管理電力

用戶端程式庫驅動程式庫

職責:

  • 實作 Vulkan 1.0/1.1/1.2 進入點
  • 實作 Fuchsia 擴充功能,用於匯入及匯出外部記憶體和 Semaphor
  • 實作 VK_KHR_display 和/或 VK_KHR_swapchain,以便直接存取螢幕

傳統用戶端驅動程式會執行 ioctl syscall,與核心驅動程式庫進行通訊;Magma 提供的介面可讓用戶端驅動程式透過 Magma 系統驅動程式庫進行 IPC 通訊。

如要進一步瞭解 Magma 介面,請參閱 Magma: Design