DRM驱动框架


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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林同学_ioT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值