MTK Linux DRM分析(一)- DRM简介

Linux的DRM(Direct Rendering Manager)驱动是内核中管理图形硬件的核心子系统,旨在支持现代显卡的复杂功能(如3D渲染、多图层合成和硬件加速),同时解决传统FB(Framebuffer)架构的局限性(如资源冲突和功能单一)。其核心设计如下:

⚙️ 1. ​​基本架构与组件​

DRM框架分为两部分:

  •  

    ​KMS(Kernel Mode Setting)​

    负责显示输出控制,通过硬件抽象组件实现:

    •  

      ​CRTC​​:扫描帧缓冲并生成时序信号(如分辨率、刷新率)。

    •  

      ​Plane​​:管理图层合成(主图层/视频图层/光标),支持多层级叠加。

    •  

      ​Encoder​​:将CRTC信号转换为物理接口协议(如HDMI、DSI)。

    •  

      ​Connector​​:抽象物理接口(如HDMI端口),检测设备连接状态和EDID信息。

  •  

    GEM(Graphics Execution Manager)​

    管理显存资源:

    •  

      分配/释放显存(如通过DRM_IOCTL_MODE_CREATE_DUMB创建缓冲区)。

    •  

      支持缓冲区共享(如PRIME机制)和同步(fence机制)。

📡 2. ​​用户空间交互​

  •  

    ​libdrm库​​:封装内核IOCTL调用,提供用户态API(如打开/dev/dri/card0、设置CRTC模式)。应用程序可通过drmModeSetCrtc()等函数控制显示输出。

  •  

    ​高级图形库​​:多数场景推荐基于Mesa3D(OpenGL/Vulkan)、SDL2或Qt开发,避免直接操作底层DRM接口(因硬件依赖性强且易出错)。

⚡ 3. ​​实际工作流程示例​

1.​​初始化​​:打开设备节点(open("/dev/dri/card0"))并获取资源句柄(drmModeGetResources())。

2.​​检测显示设备​​:遍历Connector,确认连接状态(DRM_MODE_CONNECTED)。

3.

  1. .

    ​帧缓冲操作​​:

    • 创建缓冲区(DRM_IOCTL_MODE_CREATE_DUMB)。

    • 映射内存(mmap())并写入图像数据。

  2. ​显示控制​​:通过drmModeSetCrtc()将帧缓冲绑定到CRTC,输出图像

🖥️ 4. ​​与硬件的关联​

  •  

    不同GPU厂商(如Intel的i915、AMD的amdgpu)在内核中实现特定驱动模块(位于drivers/gpu/drm/)。•

  • 设备树(DTS)配置硬件接口(如Rockchip平台定义VOP显示控制器和端口映射)。

💎 总结

DRM驱动通过分层设计(KMS/GEM)统一管理显示与渲染任务,支持多应用并发访问、原子更新(无闪烁)和高级GPU功能,成为现代Linux图形栈的核心基础。其灵活性适用于从嵌入式设备(如RK3506处理器)到桌面级显卡的广泛场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919501.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据挖掘笔记:点到线段的距离计算

1. 写在前面 最近在搞一个"大曲率弯道"场景的数据挖掘,里面有个逻辑是给定自车的定位坐标和车道线的坐标点,根据点到线段的距离,去找到自车所在的车道中心线。 然后发现这个计算其实在很多场景中都是可以用到的,所以就…

C++篇(2)C++入门(下)

一、引用1.1 引用的概念和定义引用不是新定义一个变量,而是给已经存在的变量取别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用一块内存空间。类型& 引用别名 引用对象int a 10;int& b a; //b是a的引用1.2 引用的…

Windows 如何清理右键菜单?电脑桌面右键菜单里出现一个清理内存 怎么去掉?

RightMenuMgr是一款绿色小巧免费的右键菜单管理工具,简体中文界面,很方便操作,可以帮助用户轻松管理右键菜单,能够重新定义传统的右键,软件体积小,功能强大,安全无毒,且使用免费&…

【力扣 Hot100】 刷题日记——双指针的经典应用

D11 两数之和 II - 输入有序数组 LCR 006. 两数之和 II - 输入有序数组 - 力扣(LeetCode) 这道题目也是双指针的一个典型应用,题目要求找出和为target的两个数字的下标,并且告诉了有且仅有一对符合条件的数字。 而且题目已经给…

在一台没联网的机器上,用ollama加载qwen3,14b

文章目录 背景 去另一台机器下载模型 使用docker部署ollama 后续 背景 项目甲方终于搞定了一台T4,咱们的项目又可以正常推进了。 但是,高高兴兴地上去之后,发现,此机器竟不可以联网~ 不过好在,前辈已经把docker装好了。 竟然还有ollama的镜像。 可以的,至少可以节省一…

Angular由一个bug说起之十八:伴随框架升级而升级ESLint遇到的问题与思考

伴随框架升级而升级ESLint遇到的问题与思考 对于eslint这个前端事实上的代码检查工具标准,大家可能是再熟悉不过了。几乎是在编码的时时刻刻都在和它接触。在我们开发维护长达十年的项目中自然也是采用了ESLint,在从 AngularJS 一路到今天现代化的 Angu…

unfold 切图像,图形transformer的切割操作

import torch x torch.arange(8*12).view(1,1,8,12) mx.unfold(2, 4, 4) n m.unfold(3, 4, 4)输入第一次切,切高度维度,但是切完做了转置 ,得到(1,1,2,12,4)切宽度 得…

基于最小二乘支持向量机的数据回归预测 LSSVM

一、作品详细简介 1.1附件文件夹程序代码截图 全部完整源代码,请在个人首页置顶文章查看: 学行库小秘_CSDN博客​编辑https://blog.csdn.net/weixin_47760707?spm1000.2115.3001.5343 1.2各文件夹说明 1.2.1 main.m主函数文件 该MATLAB 代码实现了…

Java虚拟机故障处理工具全指南

目录 一、JVM故障处理工具概述 二、详细工具解析 1. jps:虚拟机进程状况工具 2. jstat:虚拟机统计信息监视工具 3. jinfo:Java配置信息工具 4. jmap:Java内存映像工具 5. jhat:堆转储快照分析工具 6. jstack&a…

【LeetCode热题100道笔记+动画】接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水…

短剧小程序系统开发:构建影视娱乐新生态的基石

在移动互联网的浪潮中,影视娱乐行业正经历着深刻的变革。短剧,作为一种新兴的内容形式,以其独特的魅力和广泛的受众基础,成为了行业发展的新亮点。而短剧小程序系统开发,则是构建影视娱乐新生态的基石,为行…

基于Pytochvideo训练自己的的视频分类模型

视频分类模型简介 ​X3D 系列模型 官方网站 https://github.com/facebookresearch/SlowFast ​提出论文​ Facebook Research 的《X3D: Expanding Architectures for Efficient Video Recognition》 https://arxiv.org/pdf/2004.04730 原理 X3D 的设计思路受到机器学习中…

LidaRefer-v2论文速读

研究背景 研究背景 3D视觉定位(3D Visual Grounding, VG)是一项旨在根据自然语言描述,在三维场景中精确定位出相应物体或区域的任务 。这项技术在人机交互领域至关重要,尤其是在自动驾驶、机器人技术和AR/VR等应用中,它…

逻辑移位与算术移位

根本的区别在于:它们如何对待符号位(最高位)。 一、逻辑移位 (Logical Shift) 无论左移、右移,空出的位永远用 0 填充。主要针对无符号整数、快速乘除2的幂。 二、算术移位 (Arithmetic Shift) 左移用 0 填充、右移用符号位填充。…

内存对齐的使用和禁用

在 C 语言和 C 中,__attribute__((packed)) 是一种用于数据结构体的编译器扩展属性,这个属性主要用于修改结构体的内存对齐行为。背景知识:结构体内存对齐在许多计算机架构中,编译器会自动对数据进行对齐(alignment&am…

SpringBoot3后端项目介绍:mybig-event

mybig-event 项目简介 mybig-event 是一个基于 Spring Boot 的事件管理系统,提供用户管理、文章发布、分类管理、文件上传等功能,采用现代化的 Java 技术栈构建,支持高效开发和部署。 仓库链接:https://github.com/foorgange/mybi…

week3-[分支嵌套]方阵

week3-[分支嵌套]方阵 题目描述 有 nmn\times mnm 个人站成 nnn 行 mmm 列的方阵。我们想知道第 xxx 行 yyy 列的人的某个方向有没有人。 输入格式 输入共 222 行。 第 111 行输入 444 个正整数 n,m,x,yn,m,x,yn,m,x,y。 第 222 行输入 111 个字符为 U、D、L、R 其中之一&#…

深入理解C++ std::shared_ptr:现代C++内存管理的艺术与实践

在C++的发展历程中,内存管理始终是开发者面临的核心挑战。从C语言继承而来的手动内存管理方式,虽然提供了极大的灵活性,却也成为无数程序错误的根源。内存泄漏、悬空指针、双重释放等问题长期困扰着C++开发者,直到智能指针的出现改变了这一局面。作为C++11标准引入的重要特…

一个 WPF 文档和工具窗口布局容器

一个 WPF 文档和工具窗口布局容器、用于排列文档 和工具窗口的方式与许多知名 IDE 类似,例如 Eclipse、Visual Studio、 PhotoShop 等等 AvalonDock 是一个 WPF 文档和工具窗口布局容器,用于排列文档 和工具窗口的方式与许多知名 IDE 类似,例…

【qml-5】qml与c++交互(类型单例)

背景: 【qml-1】qml与c交互第一次尝试(实例注入) 【qml-2】尝试一个有模式的qml弹窗 【qml-3】qml与c交互第二次尝试(类型注册) 【qml-4】qml与c交互(类型多例) 【qml-5】qml与c交互&#…