DRM (Direct Rendering Manager)
- DRM 是 Linux 內核的一部分,負責處理顯示卡的顯示控制、圖形加速、顯示模式設定等任務。它提供了一個介面讓用戶空間的應用程式能夠直接與顯示硬體進行交互。DRM 允許使用硬體加速的圖形渲染,並將圖形渲染的結果呈現在顯示器上,這通常與 KMS 結合使用來管理顯示。
KMS (Kernel Mode Setting)
- KMS 是 DRM 的一部分,是 DRM 中負責顯示設置的子系統。
- 在系統啟動時,或者顯示設置需要更改時,KMS 會在內核層面進行顯示卡的設定(如解析度、顯示模式等),並負責直接將影像數據輸出到顯示硬體。使用 KMS 時,顯示卡會將影像渲染結果存在 framebuffer 中,這是顯示硬體直接使用的影像數據。
DRM vs KMS
- 僅使用 KMS 輸出影像 如果你只需要將靜態影像或簡單的畫面(如文字或基本圖形)輸出到顯示器,並且不需要圖形加速或視頻播放等高效能圖形處理,僅使用 KMS 就可以達成這個目標。例如,當系統啟動時,KMS 可以直接初始化顯示設備,並將影像數據放入 framebuffer(顯示緩衝區)中,顯示器便會顯示這些數據。
- 當需要更多圖形加速或複雜渲染時 如果需要進行 硬體加速渲染(例如播放視頻、3D 渲染或其他高效能的圖形處理),那麼僅使用 KMS 是不夠的。此時,DRM 會提供額外的功能來管理圖形渲染過程,並支持硬體加速。通常,這時會需要配合如 OpenGL、Vulkan 或其他圖形 API 來進行渲染處理。
EGLFS (EGL Full Screen)
- EGLFS 是用戶空間層面的操作,使用 OpenGL ES 等 API 來進行圖形渲染,將渲染結果輸出到 framebuffer 中,通過與底層 KMS 或 DRM 驅動協作來輸出最終的影像到顯示器。
- EGLFS 通常會使用 OpenGL ES(一種基於 GPU 的圖形 API)來進行渲染,而這些渲染操作會利用 VC4 GPU 來加速圖形處理。渲染完成後,結果會被顯示到屏幕上,並且 EGLFS 會管理這一過程,通過 VC4 來輸出影像。
VC4(VideoCore IV)
- VC4 是 Raspberry Pi 使用的 GPU(圖形處理器),專門設計來提供硬體加速的圖形處理和視頻解碼功能,也負責記憶體和顯示緩衝區(framebuffer)管理。VC4 驅動程式負責將圖形渲染結果從 GPU 輸出到顯示器,並管理顯示硬體的配置。
- VC4 framebuffer 是基於 VC4 (VideoCore IV) GPU 的驅動程式。
影像處理流程:
- CPU 提供影像資訊給 EGLFS:
- 應用程式運行在 CPU 上,生成渲染命令或影像資料,這些資料可能是原始的影像信息或是需要顯示的圖形內容(例如 UI 元素、背景圖像等)。 EGLFS 接收這些資料,並將其交給底層的渲染引擎(通常是 GPU,例如使用 OpenGL ES)來處理。
- GPU 處理渲染與縮放:
- GPU 使用 OpenGL ES 或其他圖形 API 來處理這些影像數據,進行例如縮放、旋轉、透明度處理、顏色調整等圖形渲染操作。這些操作會在 GPU 上進行硬體加速,通常會使用 GPU 的圖形處理能力來提高效率。 渲染後,這些處理過的影像數據會被存放到 framebuffer 中。framebuffer 就像是顯示硬體的內部記憶體,儲存了將要顯示的畫面。
- framebuffer 中的影像數據:
- 經過 GPU 處理後,最終的圖像會保存在 framebuffer 中。這是顯示器可以直接讀取的顯示緩衝區。
- 由顯示硬體(顯示卡或顯示控制器)畫到顯示器:
- 最後,KMS(Kernel Mode Setting) 或 DRM(Direct Rendering Manager) 驅動負責管理顯示硬體。這些驅動程式會將 framebuffer 中的圖像數據傳送給顯示卡(或顯示控制器),然後顯示卡將這些數據轉換為顯示器可以理解的信號。
- 顯示卡會控制顯示器刷新畫面,將 framebuffer 中的數據輸出到顯示屏,這樣人們就能在屏幕上看到最終的顯示結果。
No comments:
Post a Comment