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
    +关注

    关注

    88

    文章

    11817

    浏览量

    219550
  • API
    API
    +关注

    关注

    2

    文章

    2476

    浏览量

    67023
  • DRM
    DRM
    +关注

    关注

    0

    文章

    48

    浏览量

    15660

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ISO 26262功能安全落地全流程解析

    、HVAC模块、座椅调节模块等),如今也被要求提供安全设计证据才能融入整车安全架构。 提升开发质量和效率。遵循功能安全流程的产品开发,在需求追溯、设计验证和测试覆盖等方面更加系统化,有助于降低后期缺陷
    发表于 04-24 17:23

    如何确保微电网标准化架构设计流程的完整性?

    当前,微电网建设普遍存在设计流程碎片化、环节衔接不畅、标准执行不到位、成果追溯缺失等问题,导致架构设计与实际需求脱节、工程落地困难、运维成本偏高,甚至影响系统长期稳定运行。GB/T
    的头像 发表于 04-24 11:19 48次阅读
    如何确保微电网标准化<b class='flag-5'>架构</b>设计<b class='flag-5'>流程</b>的完整性?

    借助安森美PRISM模块简化成像产品原型构建流程

    本教程围绕安森美(onsemi) 图像传感器模块参考设计(PRISM)展开,聚焦成像设备从设计到制造的全流程优化需求,系统介绍 PRISM 方案的核心架构功能模块、性能特性及生态接入方式,为成像
    的头像 发表于 03-16 16:30 664次阅读
    借助安森美PRISM模块简化成像产品原型构建<b class='flag-5'>流程</b>

    【「芯片设计基石——EDA产业全景与未来展望」阅读体验】--EDA了解与发展概况

    客户粘性巩固寡头地位。另外这三家公司非常注重EDA生态系统建设,这种生态系统建设有助于吸引更多的用户和合作伙伴,形成良性发展的态势。 通过学习,对EDA专业技术概念、设计流程、工具有了进一步认识。对行业EDA发展情况有了整体全局的了解
    发表于 01-19 21:45

    电能质量在线监测装置的多级告警阈值功能是如何实现的?

    与设备耐受度。以下从技术架构实现流程、核心机制三方面详细解析: 一、技术架构:分层实现多级告警能力 多级告警阈值
    的头像 发表于 12-10 14:32 624次阅读
    电能质量在线监测装置的多级告警阈值<b class='flag-5'>功能</b>是如何<b class='flag-5'>实现</b>的?

    RDMA设计5:RoCE V2 IP架构

    ,系统控制模块设计了对应的功能控制单元及相应的寄存器,并将这些寄存器抽象为 AXI-Lite 从机端接口,使得本数据传输系统可以简易地集成进用户环境。同时通过 AXI-Lite 接口,用户可以高效的与本数据传输系统进行交互,实现对系统
    发表于 11-25 10:34

    RK 平台 Vendor Storage 开发指南:基础知识、流程与实用技巧

    备可靠性校验、掉电恢复等关键特性,是保障设备身份标识、功能授权等核心信息安全的重要组件。本文将从基础知识、开发流程、使用途径三方面,为开发者梳理完整的开发逻辑。 一、核心基础知识:了解 Vendor Storage 是什么? 1
    的头像 发表于 11-22 07:11 1182次阅读
    RK 平台 Vendor Storage 开发指南:基础知识、<b class='flag-5'>流程</b>与实用技巧

    AG32 内置的CPLD 的DMA功能如何实现

    一、在AGM 的AG32 CPLD中实现DMA(直接内存访问)功能,其核心逻辑如下: 1、系统架构•采用主从架构:MCU作为主设备,CPLD作为从设备•交互方式:MCU通过访问寄
    发表于 10-31 15:42

    DRM Kit数字版权保护服务介绍

    DRM Kit (Digital Rights Management Kit,数字版权保护服务)提供了DRM加密节目授权解密的功能,包括DRM插件管理、
    的头像 发表于 10-15 13:58 1180次阅读
    <b class='flag-5'>DRM</b> Kit数字版权保护服务介绍

    闩锁效应的形成原理和测试流程

    在CMOS电路中,存在寄生的PNP和NPN晶体管,它们相互影响在VDD与GND间产生一低阻通路,形成大电流,烧坏芯片,这就是闩锁效应,简称latch-up。
    的头像 发表于 07-03 16:20 4870次阅读
    闩锁效应的<b class='flag-5'>形成</b>原理和测试<b class='flag-5'>流程</b>

    HarmonyOS实战:高德地图定位功能完整流程详解

    完整的定位功能流程,建议点赞收藏! 需求分析 要想实现一个完整的定位需求流程,就必须要做好准备工作,了解实现需求的具体步骤。 权限申请 检查
    的头像 发表于 06-09 15:23 1325次阅读

    小鹏汽车斩获两项国际顶级安全认证 ISO 26262功能安全流程认证和ISO 21448预期功能安全(SOTIF)流程认证

    2025年5月,小鹏汽车顺利通过全球权威安全认证机构雅析exida 功能安全(ISO 26262)ASIL D 流程认证和 预期功能安全(ISO 21448)SOTIF 流程认证,成为
    的头像 发表于 06-07 19:00 5246次阅读
    小鹏汽车斩获两项国际顶级安全认证 ISO 26262<b class='flag-5'>功能</b>安全<b class='flag-5'>流程</b>认证和ISO 21448预期<b class='flag-5'>功能</b>安全(SOTIF)<b class='flag-5'>流程</b>认证

    GPU架构深度解析

    、游戏娱乐等领域。本文将深入探讨GPU架构的演变历程、核心组件以及其在不同应用场景中的优势。1、GPU架构的演变早期的GPU采用固定功能流水线架构,专为图形渲染任务而
    的头像 发表于 05-30 10:36 2025次阅读
    GPU<b class='flag-5'>架构</b>深度解析

    技术分享 | 如何在2k0300(LoongArch架构)处理器上跑通qt开发流程

    技术分享 | 如何在2k0300开发板(LoongArch架构)处理器上跑通qt开发流程
    的头像 发表于 05-20 11:05 1020次阅读
    技术分享 | 如何在2k0300(LoongArch<b class='flag-5'>架构</b>)处理器上跑通qt开发<b class='flag-5'>流程</b>

    PanDao:通过可生产性调控实现光学设计流程的动态优化

    [1,2])。未来下一步发展应该就是在光学设计阶段就集成生产制造分析功能,甚至是将其直接嵌入光学设计软件中。本文首次尝试在光学设计的早期阶段动态应用PanDao软件,探索在早期光学设计流程中集成生产制造
    发表于 05-09 08:49