一、简介

Linux DRM(Direct Rendering Manager)子系统是内核中管理图形硬件的核心组件,而 CRTC(CRT Controller)又是其中的关键之一。它起源于过去控制阴极射线管(CRT)显示器的控制器概念,如今在现代图形显示中依旧扮演着至关重要的角色。

可以把 CRTC 想象成图形显示管线的指挥中心。它主要负责从帧缓冲区(Framebuffer)中读取图像数据,生成符合特定时序和模式的视频信号,并将其传递给相应的编码器(Encoder)和连接器(Connector),最终输出到显示设备上。

  • 核心功能:CRTC 的核心是控制显示时序和模式。这包括生成像素时钟(pixel clock)、水平同步信号(HSync)、垂直同步信号(VSync)等,确保图像按正确的方式扫描并显示在屏幕上。

  • 显示管线中的角色:在 DRM 的显示管线 (Plane -> CRTC -> Encoder -> Connector -> 显示器) 中,CRTC 是一个承上启下的关键环节。它处理好的图像数据会交给 Encoder 转换成特定的接口协议(如 HDMI、DP),再通过 Connector 物理输出。

二、代码分析

主要包含了drm_crtc.c和drm_crtc_helper.c两个文件

两个代码文件的作用说明

drm_crtc.c 的作用

drm_crtc.c 是 Linux DRM (Direct Rendering Manager) 子系统中处理 CRTC (Cathode Ray Tube Controller) 核心功能的源文件。CRTC 是 DRM 显示管道的核心组件,负责从平面 (planes) 接收像素数据、混合它们,并根据显示模式 (timings) 输出到编码器 (encoders)。这个文件实现了 CRTC 的初始化、注册、清理、配置设置、属性管理以及与用户空间 ioctl 的交互(如获取/设置 CRTC 配置)。它支持遗留模式设置和原子模式设置的过渡,提供标准属性(如 ACTIVE、MODE_ID)和辅助功能(如 fence 创建、CRC 支持)。文件还处理错误检查和资源管理,确保 CRTC 与平面、帧缓冲和连接器的兼容性。该文件是 DRM 核心的一部分,主要用于驱动程序的 CRTC 管理,尤其在非原子驱动中。

drm_crtc_helper.c 的作用

drm_crtc_helper.c 是 DRM 子系统中提供遗留 CRTC 模式设置辅助函数的源文件。它为使用旧式 CRTC 接口的驱动程序提供便利函数,实现模式设置、电源管理 (DPMS)、禁用未使用资源、恢复配置等操作。该文件主要处理遗留模式设置的复杂逻辑,如计算最佳编码器、调整模式、处理 DPMS 状态,并确保配置更改的原子性(尽管不是真正的原子模式)。它与原子模式设置兼容,但强烈建议新驱动使用原子辅助函数。该文件的作用是简化驱动程序的模式设置实现,减少重复代码,但已标记为过时(deprecated),因为现代驱动应转向原子接口。

两个文件的函数及其作用列表

drm_crtc.c 中的函数
  • drm_crtc_from_index: 根据索引在 DRM 设备中查找并返回对应的 CRTC 对象。用于 vblank 回调等场景,将索引转换为指针。
  • drm_crtc_force_disable: 强制禁用指定 CRTC,通过设置空模式配置实现。用于遗留驱动的电源管理。
  • drm_num_crtcs: 计算 DRM 设备中 CRTC 的总数。通过遍历列表实现。
  • drm_crtc_register_all: 注册所有 CRTC 到 DRM 核心,包括 debugfs 和 late_register 回调。用于驱动初始化。
  • drm_crtc_unregister_all: 注销所有 CRTC,包括 early_unregister 回调和 debugfs 移除。用于驱动卸载。
  • drm_crtc_crc_init: 初始化 CRTC 的 CRC (Cyclic Redundancy Check) 支持,包括锁和队列。用于帧校验调试。
  • drm_crtc_crc_fini: 结束 CRTC 的 CRC 支持,释放资源。
  • fence_to_crtc: 从 DMA fence 结构中提取对应的 CRTC 对象。用于 fence 操作的容器转换。
  • drm_crtc_fence_get_driver_name: 返回 fence 的驱动名称。用于 DMA fence 接口。
  • drm_crtc_fence_get_timeline_name: 返回 fence 的时间线名称。用于 DMA fence 接口。
  • drm_crtc_create_fence: 为 CRTC 创建一个 DMA fence 对象,用于同步操作。
  • __drm_crtc_init_with_planes: 内部函数,用于初始化 CRTC 对象,包括锁、ID、属性和标准属性附加。核心初始化逻辑。
  • drm_crtc_init_with_planes: 初始化一个新的 CRTC 对象,关联主平面和游标平面。用于驱动创建 CRTC。
  • drmm_crtc_alloc_with_planes_cleanup: 清理函数,用于释放 CRTC 资源。通过 drm_crtc_cleanup 调用。
  • __drmm_crtc_alloc_with_planes: 分配并初始化一个托管的 CRTC 对象,支持 managed 资源管理。
  • drm_crtc_cleanup: 清理 CRTC 对象,包括注销、释放内存和状态销毁。用于 CRTC 销毁。
  • drm_mode_getcrtc: 通过 ioctl 获取 CRTC 配置(如 gamma 大小、位置、模式)。用户空间接口。
  • __drm_mode_set_config_internal: 内部设置 CRTC 配置,包括帧缓冲 refcounting 和回调调用。
  • drm_mode_set_config_internal: 包装设置 CRTC 配置的内部函数,用于遗留驱动。
  • drm_crtc_check_viewport: 检查帧缓冲是否足够大以支持 CRTC 的视口(viewport)。用于模式验证。
  • drm_mode_setcrtc: 通过 ioctl 设置 CRTC 配置,包括模式、帧缓冲和连接器。用户空间接口。
  • drm_mode_crtc_set_obj_prop: 设置 CRTC 对象的属性值。用于遗留属性管理。
  • drm_crt

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

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

相关文章

vue+openlayers示例:适配arcgis矢量瓦片服务以及样式(附源码下载)

由于单位这边有个项目是基于openlayers地图引擎框架实现webgis地图可视化功能,但是要调用第三方的arcgis矢量瓦片服务以及适配样式,在这个背景下,基于openlayersvue实现适配arcgis矢量瓦片服务以及样式效果,适合学习openlayers与前…

mybatis xml中表名 字段报红解决

mybatis xml中表名 字段报红解决

谷歌浏览器重定向url,谷歌浏览器浏览网页修改url到本地

谷歌应用商店搜索插件requestly(有个相似名称的插件,选择这个Requestly: Supercharge your Development & QA) 安装后打开插件网址https://app.requestly.io/rules/my-rules 新建规则rules->my rules-> new rule -> redirect …

教育场景下禁用html5播放器拖动进度条的例子

禁用视频课程进度条的拖动功能,主要是为了强制学员按照课程设计的顺序观看内容,防止跳过关键知识点,从而保证学习效果和课程的完整性。 1.防止应试作弊: 在一些需要观看视频才能解锁下一章节或完成测试的场景中,禁用…

async实战

一、协程 协程是程序员人为创造 协程是一种用户态内的上下文切换技术。通过一个线程实现代码块相互切换执行。yield返回生成器 yield from 代表,跳到 func2协程函数 通过函数名(),是执行不了的。需要把函数加入到loop里面来,才可以被执行。 把…

个人搭建小网站教程(云服务器Ubuntu版本)

目录 1.配置云服务器(略讲) 2.vscode连接(ssh连接) 3.本地压缩项目包 4.传输项目 5.配置项目依赖 6.运行项目 1.启动 FastAPI 后端(Python 部分) 2.启动 Next.js 前端(Node.js 部分&…

pion/webrtc v4.1.4 版本发布:关键特性与性能优化全面解析

引言 实时通信技术在现代互联网应用中扮演着越来越重要的角色,从视频会议到在线教育,从远程医疗到物联网设备交互,WebRTC技术已经成为实时音视频通信的事实标准。作为Go语言中最成熟且广泛使用的WebRTC实现,pion/webrtc项目持续推…

集成算法(聚类)

下面简单集成算法代码from sklearn.datasets import make_blobs from sklearn.cluster import KMeans import matplotlib.pyplot as plt# 创建数据集,生成 3 个中心的聚类数据,共 300 个样本,每个样本 2 个特征 X, _ make_blobs(n_samples30…

01 网络信息内容安全--绪论

1 课程内容 网络信息内容获取技术网络信息内容预处理技术网络信息内容过滤技术社会网络分析技术入侵检测技术异常流量检测技术对抗攻击技术 2 理论研讨 分为16个组 2.1 网络信息内容获取技术:第1组 【用DeepSeek网站爬虫,数据获取零成本&#xff01…

GPT-5:天变了吗?还是风停了?

2025年8月8日,OpenAI 发布了 GPT-5。这次更新被许多人寄予厚望,也引发了不少争议。对普通用户来说,这是一场“又快又会做事”的智能盛宴;而对资深开发者和 AI 研究者而言,GPT-5 可能更像是一次不够激进、略显保守的版本…

生信分析自学攻略 | R语言数据筛选和修改

在《生信小白自学攻略》系列的前几篇文章中,我们已经了解了 R 和 RStudio 的安装、RStudio 的深度探索,以及 R 语言的基本数据类型和数据结构。现在,是时候深入探讨如何运用 R 语言对数据进行精细化处理了。本篇推文将详细介绍如何在 R 中对数…

从零开始学习概念物理(第13版)(1)

前言:对我来说,最有用的就是物理了,尤其是电磁学。但是要学好它,我得夯实我的基础,前面更加基础的数学和物理都不能拉下。现在我问了Deepseek推荐的国外物理书,这本《概念物理》是最适合我,等入…

CSS变量

元素背景需要统一,一个个设置修改起来很麻烦,也没有全局变量? CSS中的变量_css变量-CSDN博客 -- 前缀定义变量,var(--) 使用变量,:root 表示根元素。 :root { --bg:#222; --fg:#bbb; } body { background:var(--bg)…

C++(Qt)软件调试---vscode配置clang-tidy静态分析(30)

C(Qt)软件调试—vscode配置clang-tidy静态分析(30) 文章目录C(Qt)软件调试---vscode配置clang-tidy静态分析(30)[toc]1 概述2 clang-tidy基本用法3 目前已有检查项4 vscode配置clang-tidy5 .clang-tidy配置文件6 参考地址更多精彩…

每天自动备份oracle

oracle数据库比其他数据库都贵,但是自带的管理工具却很差,真不知道咋想的。想完成每天自动备份,只能自己动手(window环境):1、创建个备份目录,如D:\databack2、创建个脚本:backup.bat核心内容如下&#xff…

HBase Coprocessor:扩展HBase功能的利器

HBase Coprocessor:扩展HBase功能的利器 关键词:HBase, Coprocessor, 协处理器, RegionServer, 分布式计算, 扩展功能, 二级索引 摘要:HBase作为Hadoop生态中的分布式列存储数据库,以高可靠性、高吞吐量和强一致性著称&#xff0c…

【Java后端】Spring Boot 实现请求设备来源统计与UA解析全攻略

Spring Boot 实现请求设备来源统计与UA解析全攻略 在 Web 应用的实际场景中,我们经常需要知道 请求来自哪里 —— 是 Android 手机?还是 iOS?或者是 PC 浏览器? 这类信息往往可以通过 User-Agent (UA) 来统计,进而帮助…

技术框架搭建:支撑竞拍全流程

纯竞拍的技术框架是一个多层协同的系统,从用户交互到数据处理,每个环节都有专门的技术组件提供支持。​前端层是用户与竞拍系统交互的窗口,核心目标是提供流畅、实时、直观的操作体验。采用 React、Vue 等主流前端框架构建单页应用&#xff0…

2025.8.18-2025.8.24第34周:有内耗有挣扎

🌟 本周完成的3件亮点事情(可具体写过程): openvla debug起来了把上周的演讲视频发给了导师,人家帮我提了很多建议。罗永浩,李想4小时访谈看完了即兴演讲开始不内耗,直接讲,这样才能…

点播视频预览是怎么做到的?

看进度条上的小窗口,你有没有想过,哔哩哔哩是如何在进度条上显示视频预览的? 这个功能非常有用,尤其是在播放长视频时。 如何才能实现? 实现这一点有三种方法。 预先为视频生成 CSS sprites,并通过 API 获取预先为视频生成 W…