13.1 DRM简介
传统linux显示设备驱动开发时,通常使用FB驱动架构,随着显卡性能升级:显示覆盖(菜单层级)、GPU加速、硬件光标,传统FB架构无法很好支持,此外,对于多应用的访问冲突也无法很好控制。在这样的背景下,DRM应用而生。
DRM是linux内核中负责与显卡交互的管理架构,用户空间很方便的利用DRM提供的API,实现3D渲染、视频解码和GPU计算等工作。是 Linux 内核对显示框架进行分层设计的思想,相较于直接操作 Framebuffer,DRM 框架提供了更多的功能。
Framebuffer,帧缓冲,帧缓冲并不是指的显存上的某一块区域,而是 DRM 抽象出来的一个概念,用 fb_id 表示。 CRTC,对显存进行扫描,将显存图像数据转换成硬件时序信号传输到 Encoder,通常指的是 Display Controller(包括 LCD 控制器)。Plane,图层,有的硬件支持多层合成显示,Plane 是连接 Framebuffer 和 CRTC 的纽带,是内存的搬运工,所有的 Display 控制器(包括 LCD 控制器)至少有一个 Plane。 Encoder,Encoder 与 Connector 相连接,Connector 理解为 hdmi,mipi 等接口的抽象,但是这些接口的时序,协议不同,所有需要 Encoder 将 CRTC 传过来的信号转换成 hdmi,mipi 支持的协议,然后通过 Connector 传输到显示器上。
13.2 libdrm库介绍
libdrm 的作用是将 DRM 内核功能封装成一系列的 open/close/ioctl 等标准接口,应用程序通过调用这些接口来驱动设备实现画面显示。
绝大部分可以分成两类行为,一类是 GEM(Graphics Execution Manager)显存管理,例如显存的分配和释放,另一类是 KMS(Kernel Mode-Setting),显示模式管理,如分辨率等的设置。
总之,libdrm,对底层接口进行封装,向上提供通用的 API 接口,主要是各种 ioctl 接口进行封装。 KMS,Kernel Mode Setting,所谓的 Mode Setting,就是更新画面和设置显示参数,更新画面,显示 buffer 的切换,多图层的合成方式,以及每个图层的显示位置,设置显示参数,包括分辨率,刷新率,电源状态等。 GEM,Graphic Execution Manager,主要负责显示 buffer 的分配与释放,也就是 GPU 唯一用到 DRM 的地方。
13.3 libdrm库移植
首先,下载 libdrm 的压缩包,并放在虚拟机中,解压后,在同级目录创建 install 文件夹。
下载链接 https://dri.freedesktop.org/libdrm/
lxc@ubuntu:~/libdrm$ ls
install libdrm

最低0.47元/天 解锁文章
5624

被折叠的 条评论
为什么被折叠?



