0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

了解DRM架构的形成、功能流程实现

Linux阅码场 来源:内核工匠 作者:Allen Zhang 2022-11-28 09:25 次阅读

1、 DRM简介(Direct Rendering Manager)

传统linux显示设备驱动开发时,通常使用FB驱动架构,随着显卡性能升级:显示覆盖(菜单层级)、GPU加速、硬件光标,传统FB架构无法很好支持,此外,对于多应用的访问冲突也无法很好控制。在这样的背景下,DRM应用而生。

DRM是linux内核中负责与显卡交互的管理架构,用户空间很方便的利用DRM提供的API,实现3D渲染、视频解码和GPU计算等工作。

1.1 DRM发展历史

1999年,Precision Insight公司首次为 XFree86 4.0 Server 开发 DRI 显示框架,用于更好的适配 3DFX 公司显卡,初版DRM代码产出后,接下来的几年时间里,DRM 所支持的显卡列表不断被扩充。

2008年10月,Linux kernel 2.6.27 进行了一次重大的源码重组:DRM 的整套源码被放到了/drivers/gpu/drm/目录下,不同的GPU厂商代码也被放到了各自子目录下。

2014年6月,Atomic API 被添加到Linux 3.16,许多驱动也都转而使用这些新的 API。

2018年,又有10个基于 atomic 框架的 DRM 新增驱动被添加到Linux kernel。

1.2 DRM架构对比FB架构优势

DRM是目前Linux的主流图形显示框架,相比于传统FB架构,DRM允许多个程序同时使用视频硬件资源,管理多个程序的资源请求、访问,综上所述DRM更能适应日益更新的显示硬件,DRM优势主要体现:

DRM原生支持多图层合成,FB原生不支持多层合成。

FB不支持VSYNC、DMA-BUF、异步更新和fence机制,但DRM原生都支持。

DRM统一管理GPU和Display驱动,让软件升级、维护和管理更加方便。

10e71bfa-6eb2-11ed-8abf-dac502259ad0.png

1.3 DRM图形显示框架

DRM检测到的每个GPU都作为DRM设备,并为之创建一个设备文件/dev/dri/cardX与之连接,从整体架构上来看主要分为3个主要部分:

libdrm (接口库)

对底层接口进行封装,向上层提供通用的API接口,主要是对各种IOCTL接口进行封装,便于重用与代码共享。

KMS (Kernel Mode Setting)

正常工作时,需要设置显卡或者图形适配器的模式,主要体现在以下两个方面:

更新画面:显示buffer的切换,多图层的合成方式控制,以及每个图层的显示位置。

设置显示参数:包括分辨率、刷新率、电源状态(休眠唤醒)等。

GEM (Graphics Execution Manager)

提供内存管理方法,主要负责显示buffer的分配和释放。

10fa189a-6eb2-11ed-8abf-dac502259ad0.png

图1.1 DRM图形显示框架总览

1.4 DRM图形显示框架涉及元素

本章节介绍DRM框架中的一些重点模块的功能与在显示链路中的作用,下图为APP调用DRM到屏幕显示的流程框图。

110cbc5c-6eb2-11ed-8abf-dac502259ad0.png

图1.2 DRM图形显示框架框图

下表对DRM中KMS和GEM两个模型的不同组件进行概述性说明,辅以高通平台代码层级的对应关系说明,以加深架构与流程之间的对应联系。

112339aa-6eb2-11ed-8abf-dac502259ad0.png

2 、DRM驱动框架

2.1 DRM驱动对象介绍

DRM内部的Objects是组成DRM框架的核心,下图中蓝色部分为物理硬件的抽象,棕色部分则为软件的抽象,其中GEM结构体为:drm_gem_object,其余部分位于结构体drm_mode_object中.

PS:drm_panel不属于object范畴,只是为了降低LCD驱动与encoder驱动间的耦合,是一堆回调函数集合。

113469c8-6eb2-11ed-8abf-dac502259ad0.png

图2.1 DRM核心组件介绍

2.2 DRM抽象硬件如何关联DRM Object

DRM的objects并不难理解,重要的是如何将实际的硬件与这些object进行关联,下面会以MIPI DSI接口为例进行介绍软件架构与DRM object的对应关系。

114ae324-6eb2-11ed-8abf-dac502259ad0.png

图2.2 典型MIPI DSI接口硬件连接图

1159d8f2-6eb2-11ed-8abf-dac502259ad0.png

图2.3 硬件与DRM Objects对应图

其中组件说明:

1168b0c0-6eb2-11ed-8abf-dac502259ad0.png

3 、DRM简单示例

DRM代码非常庞大,显卡逻辑也非常复杂,在学习DRM架构时,需要通过实践对DRM的流程进行理解,以达到事半功倍的效果。

下面会以模式设置案例,对DRM架构的流程进行解析。modeset主要流程如下:

1189c012-6eb2-11ed-8abf-dac502259ad0.png

图3.1 DRM Modeset流程总览

3.1 打开DRM设备文件

DRM框架成功加载后,会创建一个设备文件/dev/dri/card0,上层用户应用可以通过该文件节点,获取显卡的各种操作。

119f06ac-6eb2-11ed-8abf-dac502259ad0.png

3.2 获取显卡资源句柄

打开DRM设备文件后,通过以下函数获取显卡的资源句柄,进而进行显卡资源的操作。

11a93668-6eb2-11ed-8abf-dac502259ad0.png

3.3 获取connectorId

获取了drmModeRes后,获取它的连接对象。

11b545ca-6eb2-11ed-8abf-dac502259ad0.png

3.4 创建FrameBuffer

创建FrameBuffer后,然后映射一片内存,对这块内存进行像素数据填充。

11c13d8a-6eb2-11ed-8abf-dac502259ad0.png

3.5 设置Crtc模式

FB创建成功并进行清0操作,可以在里面填充任何数据,然后设置CRTC后,FB的内容就可以显示在屏幕。

CRTC模式设置函数:drmModeSetCrtc(),参数为:fd、crtc句柄、FB句柄、XY坐标等。

11ce38dc-6eb2-11ed-8abf-dac502259ad0.png

3.6 资源清理工作(非必需)

显示完成后,GUI会一直运行,一般不必实施资源清理工作。

11d5fc52-6eb2-11ed-8abf-dac502259ad0.png

本章小结

本文介绍了DRM架构的发展历史、驱动框架以及简单示例,旨在帮助读者了解DRM架构的形成、功能流程实现,DRM代码庞大且复杂,想要深入理解它的内涵,最好的办法就是根据实际需求来进行代码流程梳理,后续章节也会对该部分进行展开讲解。

此外,DRM架构符合功能日益强大的现代显示设备,但仍有很多老的设备以及软件需要FB支持,在目前DRM框架中,会存在模拟FB设备的代码。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206745
  • API
    API
    +关注

    关注

    2

    文章

    1384

    浏览量

    61000
  • DRM
    DRM
    +关注

    关注

    0

    文章

    44

    浏览量

    15025

原文标题:DRM架构介绍(一)

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一文了解pcb电路板加急打样流程

    一文了解pcb电路板加急打样流程
    的头像 发表于 11-08 14:21 3112次阅读

    架构下的功能安全思考

    到新的区域控制器。同时,区域控制器也集成了二级智能配电功能,真正形成了Power HUB, IO HUB, Data HUB。 整车区域架构 新EEA架构下,
    的头像 发表于 11-06 08:40 252次阅读
    域<b class='flag-5'>架构</b>下的<b class='flag-5'>功能</b>安全思考

    PCB行业应如何实现流程追溯?

    了解决这些问题,PCB制造企业需要对 PCB产品进行全流程追溯,通过数字化系统确保所有流程数据都在可追溯的状态下,从而保证产品品质稳定可靠。那么,PCB行业应如何实现
    发表于 09-12 11:40 376次阅读
    PCB行业应如何<b class='flag-5'>实现</b>全<b class='flag-5'>流程</b>追溯?

    Labview通用软件实现功能介绍

    软件实现功能 1. 多个任务流程编辑 2. 子流程编辑 3. 流程编辑报错精确定位,及提示用户解决办法
    的头像 发表于 08-14 11:28 575次阅读
    Labview通用软件<b class='flag-5'>实现</b><b class='flag-5'>功能</b>介绍

    搭配Arm开源固件TF-M,共同形成完整IoT应用平台安全架构

    搭配Arm开源固件TF-M,共同形成完整IoT应用平台安全架构
    的头像 发表于 08-10 11:14 421次阅读
    搭配Arm开源固件TF-M,共同<b class='flag-5'>形成</b>完整IoT应用平台安全<b class='flag-5'>架构</b>

    ARM领域管理扩展(RME)系统架构介绍

    的高级特权软件的攻击。 特权较高的软件保留分配和管理由,但无法访问其内容,也无法影响其执行流程。 本文档描述了实现RME功能所需的系统属性。 这包括以下定义: •RME系统架构的概念和
    发表于 08-09 07:52

    Arm架构的扩展详解

    对Arm架构的补充以版本增量的形式提供,称为扩展。扩展允许我们根据合作伙伴的需求定期发布新功能,而无需制作主要架构的主要变化。 Arm每年都会发布一个新的扩展。Cortex cpu,它是arm的
    发表于 08-02 06:08

    了解体系结构 - 介绍 Arm 体系结构

    。该体系结构为软件开发人员公开了一个通用的指令集和工作流程,也称为程序员模型。这有助于确保架构的不同实现之间的互操作性,以便软件可以在不同的 Arm 设备上运行。本指南为任何对此感兴趣的人介绍了 Arm
    发表于 08-01 14:35

    能流量积算仪介绍

    1、产品简介 嘉可仪表JK系列智能流量积算仪,是以工业级ARM内核CPU为核心的智能化仪表,具有精度高、响应快、易操作、功能多样的特点。有智能采集、流量补偿、计量管理、记录存储查询功能。可实现
    发表于 07-14 10:29 314次阅读

    基石DDPM(模型架构篇),最详细的DDPM架构图解

    DDPM(模型架构篇):也就是本篇文章。在阅读源码的基础上,本文绘制了详细的DDPM模型架构图,同时附上关于模型运作流程的详细解说。本文不涉及数学知识,直观帮助大家了解DDPM怎么用,
    的头像 发表于 06-29 16:32 6497次阅读
    基石DDPM(模型<b class='flag-5'>架构</b>篇),最详细的DDPM<b class='flag-5'>架构</b>图解

    DRM技术的工作原理

    数字版权管理(DRM)是一种用于控制数字内容(包括音乐、电影、电子书和软件)的使用和分发的技术。DRM的主要目的是确保数字内容仅以版权所有者授权的方式使用。DRM技术的工作原理是对数字内容的使用施加
    的头像 发表于 06-13 09:21 2390次阅读

    GPU如何在imx8m plus上工作以及GPU驱动程序如何集成到DRM驱动程序框架中?

    驱动程序不是开源的,但我没有找到任何 .ko 文件或其他东西。我发布这个问题是因为我想了解 GPU 如何在 imx8m plus 上工作以及 GPU 驱动程序如何集成到 DRM 驱动程序框架中。我
    发表于 06-08 08:23

    I2C与DRM启动顺序异常怎么解决?

    问题:我使用4.14.98版本的内核,i2c先后drm启动,这样使用bridge(it6161)可以正常工作,启动流程作为附件。当我使用5.4.70版本的内核时,drm启动先于i2c,这样引导
    发表于 06-02 09:49

    使用springboot完成流程的业务功能

    图 使用springboot开发流程使用的接口完成流程的业务功能 基于 Spring Boot + MyBatis Plus + Vue Element 实现的后台管理系统 + 用户小
    的头像 发表于 05-15 17:40 419次阅读
    使用springboot完成<b class='flag-5'>流程</b>的业务<b class='flag-5'>功能</b>

    WAYLAND下如何用DRM控制显示呢?

    您好:WAYLAND平台下(可以关闭WAYLAND也可以保持运行),如何用DRM控制显示?我想把原始数据YUV的或者RGB的通过DRM接口,显示在HDMI显示器上。
    发表于 05-11 15:59