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,对自己硬件的实现与封装。

 

 

 

 

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