display:qualcomm-drm-kms

1.架構圖 

1.App或者GUI tool發起繪畫請求,最終經過libdrm到kernel驅動GPU進行渲染操作;或者pixel-man經過CPU渲染,或者overlay這種;

2.GPU將渲染結果通過memory最終傳給上層[與其他類型的圖層也在一併交給compositor]。

3.渲染的一張張結果[多張不同圖層]經過kms:displayconntroller合成一張圖裝換成合適的數據格式最終輸出到屏幕上。 

 

 a.高通方面的源碼路徑如下

kernel/driver/gpu/drm/xxxx

kernel/driver/gpu/drm/msm/xxxx

kernel/driver/gpu/drm/msm/sde/xxxx
sde和以前的mdp是同一個模塊

2.概念

a. libdrm

libdrm是包裝大多數Drm IOCTL的庫。包括vblank事件處理,內存管理,輸出管理,幀緩衝管理等。是用戶空間與內核交互的重要方式。api分兩套,legacy和atomic

b. drm& c. kms& d. gem& framebuffer 

Linux

DRM層包含用於支持複雜圖形設備需求的代碼,通常包含非常適合3D圖形加速的可編程管道。內核中的圖形驅動程序可以利用DRM函數來簡化內存管理,中斷處理和DMA等任務,併爲應用程序提供統一的接口。

KMS 負責modeset,負責將圖像合成,變成電信號,最終送到顯示設備上。

這兩個合起來負責渲染以及送顯。也就是整個圖像的生成以及顯示到硬件上的整個過程。

GEM是負責管理framebuffer的模塊。也是drm重點的一部分。

e. plane

Display Controller的數據源通道,每個crtc至少要有一個plane;切記這是硬件設備

f. crtc

1.DPMS (Display Power Manage System) 電源狀態管理 (crtc_funcs->dpms)
2.將 Framebuffer 轉換成標準的 LCDC Timing ,其實就是一幀圖像刷新的過程(crtc_funs->mode_set)
3.幀切換,即在 VBlank 消影期間,切換 Framebuffer(crtc_funcs->page_flip)
4.Gamma 校正值調整(crtc_funcs->gamma_set)

g. encoder

1.DPMS (Display Power Manage System) 電源狀態管理 (encoder_funcs->dpms)

2.將 VOP 輸出的 lcdc Timing 打包轉化爲對應接口時序 HDMI TMDS / … (encoder_funcs->mode_set)

h. bridge

1.轉換作用,將一種信號轉換或者加解串成另一種信號

比如mipi -> hdmi

i.connector

1.獲取上報熱拔插Hotplug狀態

2.讀取並解析屏(Panel)的EDID信息

高通自身在msm裏面有個sde文件夾,裏面有自己重新封裝的connector。文件爲sde_connector.c以及sde_connector.h文件。

注:

順序buffer -> plane -> crtc -> encoder -> (bridge) -> connector -> hw panel;

plane-crtc-encoder對應的實體,都是包含在mdp內部;

j.Makefile

1類drm-xxx,drm基礎模塊

2類drm-xxx-helper-xxx,drm的helper模塊。

3類xxx/文件夾,第三方廠商對drm,對自己硬件的實現與封裝。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章