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

    文章

    11225

    浏览量

    208909
  • API
    API
    +关注

    关注

    2

    文章

    1484

    浏览量

    61810
  • DRM
    DRM
    +关注

    关注

    0

    文章

    46

    浏览量

    15097

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

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

收藏 人收藏

    评论

    相关推荐

    易控智驾正式通过汽车功能安全流程认证

    近日,易控智驾正式通过「ISO26262:2018 ASIL-D」汽车功能安全流程认证,并获得由国际知名认证机构SGS颁发的功能安全流程认证证书。这不仅标志着易控智驾在
    的头像 发表于 11-21 09:46 477次阅读
    易控智驾正式通过汽车<b class='flag-5'>功能</b>安全<b class='flag-5'>流程</b>认证

    了解和使用GNU Radio软件的功能并制作蓝牙抓包器

    背景 在上一小节中,我们简单介绍和使用了GNU Radio软件的基础功能和模块,同时通过GNU Radio Companion(GRC)创建了简单的流程图,展示了信号生成、处理和输出的流程。最后通过
    的头像 发表于 11-15 16:10 232次阅读
    <b class='flag-5'>了解</b>和使用GNU Radio软件的<b class='flag-5'>功能</b>并制作蓝牙抓包器

    AUTOSAR架构下,持续集成CI的最佳实践

    随着汽车电子技术的快速发展,汽车软件的复杂性与日俱增,如何确保软件开发的高效性与稳定性成为了一个关键问题。为了解决这个问题,许多汽车企业和供应商逐渐引入了AUTOSAR架构,并在此基础上构建了持续
    的头像 发表于 10-24 08:06 385次阅读
    AUTOSAR<b class='flag-5'>架构</b>下,持续集成CI的最佳实践

    【「嵌入式Hypervisor:架构、原理与应用」阅读体验】+第三四章阅读报告

    Hypervisor如何通过特定的架构设计和算法实现,来确保多个虚拟机(VMs)在有限资源下的高效、安全运行。 关键收获 : 架构设计 :了解到嵌入式Hypervisor通常采用微内核
    发表于 10-09 18:29

    【「数字IC设计入门」阅读体验】+ 数字IC设计流程

    设计的流程,对IC行业有个初步的认识,这样有助于后面技术章节的学习;对于我通读第1章后,最大的收获就是了解了数字IC的设计流程。书中使用图1-1总结了数字IC的设计流程: 对于IC专业
    发表于 09-25 15:51

    在Jacinot6 SOC上集成VISION SDK和PSDK之间的虚拟DRM

    电子发烧友网站提供《在Jacinot6 SOC上集成VISION SDK和PSDK之间的虚拟DRM.pdf》资料免费下载
    发表于 09-24 11:28 0次下载
    在Jacinot6 SOC上集成VISION SDK和PSDK之间的虚拟<b class='flag-5'>DRM</b>

    了解功能隔离

    电子发烧友网站提供《了解功能隔离.pdf》资料免费下载
    发表于 08-28 10:37 0次下载
    <b class='flag-5'>了解</b><b class='flag-5'>功能</b>隔离

    SDN全景:架构创新与网络功能的未来

    软件定义网络(SDN)代表了一种前沿的网络体系架构,其核心在于实现数据平面与控制平面的分离,并确保网络的软件可编程性。SDN的设计理念着重于技术架构的革新,推动网络硬件与软件的解耦,分离控制
    的头像 发表于 07-26 14:26 351次阅读

    智能工厂的架构及ERP的基本功能是什么?

    一、引言 随着科技的飞速发展,智能制造逐渐成为制造业的主流趋势。智能工厂作为智能制造的核心,其架构和ERP系统的基本功能对于提高生产效率、降低成本、提升产品品质具有重要意义。本文将详细介绍智能工厂
    的头像 发表于 06-07 15:27 1127次阅读

    pcb线路板功能测试流程

    在电子制造业中,PCB(印刷电路板)是电子设备的核心组件之一。PCB线路板功能测试是确保产品质量和可靠性的关键环节。本文将详细介绍PCB线路板功能测试的流程,包括测试前的准备、测试方法、测试后的处理
    的头像 发表于 05-29 11:27 2791次阅读

    专用集成电路设计流程包括 专用集成电路的特点包括

    专用集成电路(ASIC)设计流程是指将特定应用需求转化为硅芯片的过程。下面将详细介绍ASIC设计流程,并进一步探讨ASIC的特点。 一、ASIC设计流程: 需求分析:确定设计要求和功能
    的头像 发表于 05-04 15:00 562次阅读

    fpga原型验证流程

    FPGA原型验证流程是确保FPGA(现场可编程门阵列)设计正确性和功能性的关键步骤。它涵盖了从设计实现功能验证的整个过程,是FPGA开发流程
    的头像 发表于 03-15 15:05 1441次阅读

    RFID血液智能流转系统在赤峰市中心血站正式启动

    站长周晓鹏主持的启动会。 RFID血液智能流转系统是将 RFID技术 与采供血作业流程进行有机嫁接,对血液采集、制备、储存、发放的全过程全流程实时跟踪管控,精准地追溯作业面覆盖的各个环节,完美的
    的头像 发表于 03-07 16:49 336次阅读
    RFID血液智<b class='flag-5'>能流</b>转系统在赤峰市中心血站正式启动

    中心能源管控平台架构功能

    集群。 在中心建设,强化节能降耗要求。 如何降低数据中心绿色电力供应。 数据中心能源站、冬奥村能源站、光伏系统等子系统交互,实现能源的综合调度与运行管理;参考文献研究智慧能源管控平台的架构和主要功能,主要
    的头像 发表于 02-20 15:52 417次阅读
    中心能源管控平台<b class='flag-5'>架构</b>与<b class='flag-5'>功能</b>

    linux驱动程序的主要流程功能

    介绍Linux驱动程序的主要流程功能。 一、驱动程序的加载和初始化 Linux系统在启动过程中,会自动加载已安装的设备驱动程序。加载驱动程序的过程一般分为三个阶段,即启动阶段、模块加载阶段和设备注册阶段。 启动阶段:操作系统在启
    的头像 发表于 12-08 14:56 2241次阅读