全志 drm架构------基础篇
1.drm架构:(Direct Render Manage)图形渲染架构
drm驱动是显卡驱动的一种架构。相比FB架构,DRM更能适应当前日益更新的显示硬件。比如FB原生不支持多层合成,不支持VSYNC,不支持DMA-BUF,不支持异步更新,不支持fence机制等等,而这些功能DRM原生都支持。同时DRM可以统一管理GPU和Display驱动,使得软件架构更为统一,方便管理和维护。
DRM从模块上划分,可以简单分为3部分:libdrm、KMS、GEM
DRI(应用层)
DRI的主要作用是让X客户机和X服务器直接控制硬件用的。
DRI的应用程序通过libdrm库同DRM内核模块进行通信。
libdrm
对底层接口进行封装,向上层提供通用的API接口,主要是对各种IOCTL接口进行封装。
KMS
Kernel Mode Setting,所谓Mode setting,其实说白了就两件事:更新画面和设置显示参数。
更新画面:显示buffer的切换,多图层的合成方式,以及每个图层的显示位置。
设置显示参数:包括分辨率、刷新率、电源状态(休眠唤醒)等。
GEM
Graphic Execution Manager,主要负责显示buffer的分配和释放,也是GPU唯一用到DRM的地方。
基本元素
DRM框架涉及到的元素很多,大致如下:
KMS:CRTC,ENCODER,CONNECTOR,PLANE,FB,VBLANK,property
GEM:DUMB、PRIME、fence
2.发展历史:
2008年10月,Linux kernel 2.6.27 进行了一次重大的源码重组,随后 DRM 也迎来了历史性的重大修改:DRM 的整套源码被放到了 /drivers/gpu/drm/ 目录下,不同的GPU厂商代码也被放到了各自的子目录下,同时头文件也被移到了 /include/drm 目录下。
该框架以基于Wayland的Windowing system为例,描述了linux graphic系统在DRI框架下,通过两条路径(DRM和KMS),分别实现Rendering(渲染)和送显两个显示步骤。
KMS是Kernel Mode Setting的缩写,也称作Atomic KMS,它是一个在linux 4.2版本的kernel上,才最终定性的技术。从字面意义上理解,它要实现的功能比较简单,即:显示模式(display mode)的设置,包括屏幕分辨率(resolution)、颜色深的(color depth)、屏幕刷新率(refresh rate)等等。一般来说,是通过控制display controller的来实现上述功能的。
目前的kernel版本(如4.2之后),KMS和DRM基本上没有什么逻辑耦合(除了代码位于相同目录,以及通过相同的设备节点提供ioctl之外),可以当做独立模块看待。
3.内核目录结构:
De2_drv.c 实现drm注册 fbdev的注册
De2_