DRM(一):什么是DRM

article/2025/9/24 6:44:48

之前说了要一起学习一下与安全紧密相关的业务事项,于是这就开始了。

今天就来看看与版权保护相关的技术:DRM

内容基本上来自:【DRM架构介绍】

还是我推荐的那个号–》内核工匠,确实内容不错,学到很多。

1、DRM是什么?

提起版权保护你肯定知道是什么意思,避免盗版。实现这个目的的技术:DRM。

下面就来看看我们的DRM是什么?

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

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

1.1 DRM的架构优势

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

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

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

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

在这里插入图片描述

1.2 DRM图形显示框架

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

  • libdrm (接口库)

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

  • KMS (Kernel Mode Setting)

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

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

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

  • GEM (Graphics Execution Manager)

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

在这里插入图片描述

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

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

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

在这里插入图片描述

2、DRM驱动框架

上面知道了一个大概,现在来看看这个具体是个什么?

2.1 DRM驱动对象介绍

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

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

在这里插入图片描述
这个图真的太哇塞了

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

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

在这里插入图片描述
在这里插入图片描述
其中组件说明:

在这里插入图片描述
DSI:Display Serial Interface
DPHY:也是一个传输协议

3 、DRM简单示例

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

下面会以模式设置案例,对DRM架构的流程进行解析。modeset主要流程如下:
在这里插入图片描述

3.1 打开DRM设备文件

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

图片

3.2 获取显卡资源句柄

打开DRM设备文件后,通过以下函数获取显卡的资源句柄,进而进行显卡资源的操作。
在这里插入图片描述

3.3 获取connectorId

获取了drmModeRes后,获取它的连接对象。
在这里插入图片描述

3.4 创建FrameBuffer

创建FrameBuffer后,然后映射一片内存,对这块内存进行像素数据填充。
在这里插入图片描述

3.5 设置Crtc模式

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

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

在这里插入图片描述

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

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

在这里插入图片描述

小结

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

此外,DRM架构符合功能日益强大的现代显示设备,但仍有很多老的设备以及软件需要FB支持,在目前DRM框架中,会存在模拟FB设备的代码,参见drivers/gpu/drm/xxx/drv.c文件,会在设备目录下出现:/dev/fb0 。

参考文献

  • 1.https://www.kernel.org/doc/html/latest/gpu/index.html (Linux GPU Driver Developer’s Guide)

    1. https://www.kernel.org/doc/html/latest/gpu/drm-kms.html#kms-properties (Kernel Mode Setting (KMS))

http://chatgpt.dhexx.cn/article/3xoSJZok.shtml

相关文章

推荐系统强化学习DRN

文章目录 强化学习的基本概念强化学习推荐系统框架强化学习推荐模型的特点 深度强化学习推荐模型中的DQNDRN的学习过程DRN竞争梯度下降算法 强化学习的基本概念 强化学习的基本概念就是一个智能体通过与环境进行交互,不断学习强化自己的智力,来指导自己的…

DRN - 扩张残留网络(图像分类和语义分割)

DRN - 扩张残留网络(图像分类和语义分割) 原标题 | Review: DRN — Dilated Residual Networks (Image Classification & Semantic Segmentation) 作者 | Sik-Ho Tsang 翻译 | had_in(电子科技大学) 编辑 | Pita 本文回顾…

DRN——强化学习与推荐系统结合

强化学习是近年来机器学习领域非常热门的研究话题,它的研究起源于机器人领域,针对智能体在不断变化的环境 中决策和学习的过程进行建模。在智能体的学习过程中,会完成收集外部反馈,改变自身状态,再根据自身状态对下一步的行动进行决策&#x…

【Pytorch深度学习实战】(7)深度残差网络(DRN)

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

图像超分辨率 之 DRN 论文解读与感想

图像超分辨率 之 DRN (Closed-loop Matters: Dual Regression Networks for Single Image Super-Resolution)论文解读与感想 DRN是在2020年顶会(CVPR)上发表的一篇想法简单,但是结果非常不错的文章。 先来说一下文章的切入点: …

关于CSRF攻击及mvc中的解决方案 [ValidateAntiForgeryToken]

一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。 二.CSRF可以做什么&#xff…

CSRF简介

一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。 二.CSRF可以做什么&#xf…

django种表单post出现CSRF verification failed( CSRF验证失败 ) 的两种解决方案

现象 表单界面如下&#xff1a; 在点击提交之后&#xff0c;出现如下错误页面&#xff1a; HTML的代码如下&#xff1a; contact_form.html <!DOCTYPE HTML PUBLIC ><html> <head><title>Contact us</title> </head><body><h1&…

Django CSRF验证失败. 请求被中断.

项目场景&#xff1a; Python版本&#xff1a;3.7 Django版本&#xff1a;3.1.7 问题描述&#xff1a; 出现了CSRF验证失败. 请求被中断. 原因分析&#xff1a; 在Django中有个设定&#xff0c;防止跨域来请求。比如有爬虫&#xff0c;爬虫不是从网站根目录开始搜寻&#x…

detail: “CSRF Failed: CSRF token missing or incorrect 问题解决方法

如果你尝试了所有方法之后还是没用&#xff0c;那定位你的Ajax方法&#xff1a; 1&#xff0c;var $crf_token $(‘[name“csrfmiddlewaretoken”]’).attr(‘value’) 2&#xff0c;headers:{“X-CSRFToken”: $crf_token} 原因分析&#xff1a; 这是由于你的django,有一个…

CSRF防御之token认证

一、CSRF是什么&#xff1f; CSRF&#xff08;Cross-site request forgery&#xff09;&#xff0c;中文名称&#xff1a;跨站请求伪造。攻击者盗用你的身份&#xff0c;以你的名义发送恶意请求。CSRF能够做的事情包括&#xff1a;以你名义发送邮件&#xff0c;发消息&#xf…

禁止访问 (403)CSRF验证失败. 请求被中断.

出现这个问题是因为django在收到表单提交过来的信息时&#xff0c;会检查提交过来的信息中是否有token,并会对token进行校验&#xff0c;如果校验通过&#xff0c;那就继续执行&#xff0c;反之就会认定这次的数据有伪造的风险。 解决方案&#xff1a; 在项目的settings.py文…

禁止访问 (403) CSRF验证失败. 请求被中断.————错误处理(测试接口时遇到的问题)

问题描述 解决措施 在Header参数中添加Content-Type和X-CSRFToken信息&#xff0c;这样就不会报错了。 运行结果

通过验证Referer解决CSRF安全防御问题

一、背景 JAVAWEB 类项目处于客户验收阶段&#xff0c;在安全扫描处出现 CSRF 问题&#xff0c;通过多个博客中解决思路都无法解决。后来通过同事提醒 可以试试判断 Referer页面来源参数&#xff0c;最终使用该方法解决问题。 二、环境 服务器&#xff1a;Linux 前端&#…

CSRF实战案例—绕过referer值验证

在一个添加管理员的界面引起了我的注意 尝试添加一个管理员&#xff0c;如下添加成功&#xff0c;我们可以观察其请求包中并未存在token字段&#xff0c;可能存在csrf漏洞。但是存在“Referer”和“Origin”字段 我们把referer字段删了只剩origin&#xff0c;查看是否可以请求成…

访问django后台,提示CSRF验证失败. 请求被中断.Referer checking failed - **** does not match any trust

1.非debug模式看到的报错 2.settings打开debug模式&#xff0c;才能把报错信息看的详细 3.去settings.py中&#xff0c;找到CsrfViewMiddleware 中间件&#xff0c;点击进入 4.搜索匹配报错信息 5.往下看看用到这个关键字的地方 6.从源码第一行开始看 7.settings.py&…

安全认证中的CSRF

1、什么叫做CSRF攻击 简单地说&#xff0c;就是说恶意网站&#xff0c;虽然没有盗取你的用户名和密码信息&#xff0c;但是却可以伪装成你&#xff0c;然后登录到银行&#xff0c;或者等危险网站&#xff0c;模拟你进行操作。利用的就是cookies这个特性&#xff0c;即浏览器提供…

csrf验证问题 -- 不同域名下Iframe嵌套Cookie失效导致csrf验证失败

问题原因 Cookie:SameSite Chrome 51 开始&#xff0c;浏览器的 Cookie 新增加了一个SameSite属性&#xff0c;主要用于防止CSRF攻击和用户追踪。 cookie的SameSite属性用来限制第三方Cookie&#xff0c;从而减少安全风险(防止CSRF)。 SameSite可以有下面三种值&#xff1a;…

接口报403,报CSRF验证失败的问题

问题定位&#xff1a;后台两个接口重名&#xff0c;走了优先级更高的接口&#xff0c;接口没有过滤CSRF&#xff1b; 一、csrf是什么 CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff0c;是一种常见的web安全漏洞&#xff0c;概括地说就是指&…

Django的csrf豁免:解决CSRF验证失败,请求被中断问题

1.CSRF介绍 跨站请求伪造&#xff08;英语&#xff1a;Cross-site request forgery&#xff09;&#xff0c;也被称为 one-click attack 或者 session riding&#xff0c;通常缩写为 CSRF 或者 XSRF&#xff0c; 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的…