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

    文章

    11199

    浏览量

    208691
  • API
    API
    +关注

    关注

    2

    文章

    1471

    浏览量

    61742
  • DRM
    DRM
    +关注

    关注

    0

    文章

    46

    浏览量

    15093

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    了解TPS61175的脉冲跳跃功能

    电子发烧友网站提供《了解TPS61175的脉冲跳跃功能.pdf》资料免费下载
    发表于 10-10 10:31 0次下载
    <b class='flag-5'>了解</b>TPS61175的脉冲跳跃<b class='flag-5'>功能</b>

    【「嵌入式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>

    万界星空科技电线电缆MES系统实现线缆全流程追溯

    万界星空科技电线电缆行业的MES系统通过高度集成的数据平台和强大的追溯功能实现了线缆从原材料入库到成品出库的全流程追溯。
    的头像 发表于 09-19 15:14 200次阅读

    了解功能隔离

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

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

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

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

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

    pcb线路板功能测试流程

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

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

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

    fpga原型验证流程

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

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

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

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

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

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

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