DRM系列三:drm core模块入口

本系列文章基于linux 5.15

一、drm_core_init

执行一些drm core的初始化工作

static int __init drm_core_init(void)
{int ret;drm_connector_ida_init();idr_init(&drm_minors_idr);drm_memcpy_init_early();ret = drm_sysfs_init();if (ret < 0) {DRM_ERROR("Cannot create DRM class: %d\n", ret);goto error;}/*在/sys/kernel/debug/下创建dri目录*/drm_debugfs_root = debugfs_create_dir("dri", NULL);/*为drm申请主设备号,这里是DRM_MAJOR*/ret = register_chrdev(DRM_MAJOR, "drm", &drm_stub_fops);if (ret < 0)goto error;drm_core_init_complete = true;DRM_DEBUG("Initialized\n");return 0;error:drm_core_exit();return ret;
}

1.drm_connector_ida_init

为每个连接器类型分配一个独立的 IDA,IDA(ID Allocator,ID 分配器) 是一种用于分配和管理唯一 ID 的机制,通常用于内核中需要分配唯一标识符的场景。其好处是:内核开发者可以方便地管理唯一 ID 的分配和释放,从而避免 ID 冲突和资源浪费。

static struct drm_conn_prop_enum_list drm_connector_enum_list[] = {{ DRM_MODE_CONNECTOR_Unknown, "Unknown" },{ DRM_MODE_CONNECTOR_VGA, "VGA" },{ DRM_MODE_CONNECTOR_DVII, "DVI-I" },{ DRM_MODE_CONNECTOR_DVID, "DVI-D" },{ DRM_MODE_CONNECTOR_DVIA, "DVI-A" },{ DRM_MODE_CONNECTOR_Composite, "Composite" },{ DRM_MODE_CONNECTOR_SVIDEO, "SVIDEO" },{ DRM_MODE_CONNECTOR_LVDS, "LVDS" },{ DRM_MODE_CONNECTOR_Component, "Component" },{ DRM_MODE_CONNECTOR_9PinDIN, "DIN" },{ DRM_MODE_CONNECTOR_DisplayPort, "DP" },{ DRM_MODE_CONNECTOR_HDMIA, "HDMI-A" },{ DRM_MODE_CONNECTOR_HDMIB, "HDMI-B" },{ DRM_MODE_CONNECTOR_TV, "TV" },{ DRM_MODE_CONNECTOR_eDP, "eDP" },{ DRM_MODE_CONNECTOR_VIRTUAL, "Virtual" },{ DRM_MODE_CONNECTOR_DSI, "DSI" },{ DRM_MODE_CONNECTOR_DPI, "DPI" },{ DRM_MODE_CONNECTOR_WRITEBACK, "Writeback" },{ DRM_MODE_CONNECTOR_SPI, "SPI" },{ DRM_MODE_CONNECTOR_USB, "USB" },
};void drm_connector_ida_init(void)
{int i;for (i = 0; i < ARRAY_SIZE(drm_connector_enum_list); i++)ida_init(&drm_connector_enum_list[i].ida);
}

2.drm_sysfs_init

创建class类drm_class,同时会在/sys/class/目录下创建一个新的文件夹drm,并设置设备节点

int drm_sysfs_init(void)
{int err;
/*创建设备类,此函数的执行会在/sys/class/目录下创建一个新的文件夹drm*/drm_class = class_create(THIS_MODULE, "drm");if (IS_ERR(drm_class))return PTR_ERR(drm_class);err = class_create_file(drm_class, &class_attr_version.attr);if (err) {class_destroy(drm_class);drm_class = NULL;return err;}/*设置设备节点*/drm_class->devnode = drm_devnode;return 0;
}

2.1 drm_devnode

在/sys/class/drm下创建节点,例如/sys/class/drm/dri/card0、/sys/class/drm/dri/card1

static char *drm_devnode(struct device *dev, umode_t *mode)
{return kasprintf(GFP_KERNEL, "dri/%s", dev_name(dev));
}

二、drm_core_exit

针对drm_core_init做的一些注销工作

static void drm_core_exit(void)
{unregister_chrdev(DRM_MAJOR, "drm");debugfs_remove(drm_debugfs_root);drm_sysfs_destroy();idr_destroy(&drm_minors_idr);drm_connector_ida_destroy();
}

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

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

相关文章

85.[1] 攻防世界 WEB easyphp

进入靶场 属于代码审计 <?php // 高亮显示当前 PHP 文件的源代码&#xff0c;常用于调试或展示代码 highlight_file(__FILE__);// 初始化两个标志变量&#xff0c;用于后续条件判断 $key1 0; $key2 0;// 从 GET 请求中获取参数 a 和 b $a $_GET[a]; $b $_GET[b];// 检…

智慧园区管理系统推动企业智能运维与资源优化的全新路径分析

内容概要 在当今快速发展的商业环境中&#xff0c;园区管理的数字化转型显得尤为重要。在这个背景下&#xff0c;快鲸智慧园区管理系统应运而生&#xff0c;成为企业实现高效管理的最佳选择。它通过整合互联网、物联网等先进技术&#xff0c;以智能化的方式解决了传统管理模式…

HTMLCSS :下雪了

这段代码创建了一个动态的雪花飘落加载动画&#xff0c;通过 CSS 技术实现了雪花的下落和消失效果&#xff0c;为页面添加了视觉吸引力和动态感。 大家复制代码时&#xff0c;可能会因格式转换出现错乱&#xff0c;导致样式失效。建议先少量复制代码进行测试&#xff0c;若未能…

java练习(1)

两数之和&#xff08;题目来自力扣&#xff09; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相…

[EAI-028] Diffusion-VLA,能够进行多模态推理和机器人动作预测的VLA模型

Paper Card 论文标题&#xff1a;Diffusion-VLA: Scaling Robot Foundation Models via Unified Diffusion and Autoregression 论文作者&#xff1a;Junjie Wen, Minjie Zhu, Yichen Zhu, Zhibin Tang, Jinming Li, Zhongyi Zhou, Chengmeng Li, Xiaoyu Liu, Yaxin Peng, Chao…

DB-GPT试用

继续上一篇 DB-GPT的安装 https://blog.csdn.net/berryreload/article/details/142845190 访问http://xxx:5670 访问这里 创建数据库连接 http://10.168.1.208:5670/construct/database 访问这里&#xff0c;点击刷新 http://10.168.1.208:5670/construct/app 刷新后才能出…

华硕笔记本装win10哪个版本好用分析_华硕笔记本装win10专业版图文教程

华硕笔记本装win10哪个版本好用&#xff1f;华硕笔记本还是建议安装win10专业版。Win分为多个版本&#xff0c;其中家庭版&#xff08;Home&#xff09;和专业版&#xff08;Pro&#xff09;是用户选择最多的两个版本。win10专业版在功能以及安全性方面有着明显的优势&#xff…

Kafka中文文档

文章来源&#xff1a;https://kafka.cadn.net.cn 什么是事件流式处理&#xff1f; 事件流是人体中枢神经系统的数字等价物。它是 为“永远在线”的世界奠定技术基础&#xff0c;在这个世界里&#xff0c;企业越来越多地使用软件定义 和 automated&#xff0c;而软件的用户更…

LabVIEW温度修正部件测试系统

LabVIEW温度修正部件测试系统 这个基于LabVIEW的温度修正部件测试系统旨在解决飞行器温度测量及修正电路的测试需求。该系统的意义在于提供一个可靠的测试平台&#xff0c;用于评估温度修正部件在实际飞行器环境中的性能表现&#xff0c;从而确保飞行器的安全性和可靠性。 系统…

解析与使用 Apache HttpClient 进行网络请求和数据抓取

目录 1. 什么是 HttpClient&#xff1f; 2. 基本使用 3. 使用 HttpClient 爬取腾讯天气的数据 4. 爬取拉勾招聘网站的职位信息 5. 总结 前言 Apache HttpClient 是 Apache 提供的一个用于处理 HTTP 请求和响应的工具类库。它提供了一种便捷、功能强大的方式来发送 HTTP 请…

扣子平台音频功能:让声音也能“智能”起来。扣子免费系列教程(14)

在数字化时代&#xff0c;音频内容的重要性不言而喻。无论是在线课程、有声读物&#xff0c;还是各种多媒体应用&#xff0c;音频都是传递信息、增强体验的关键元素。扣子平台的音频功能&#xff0c;为开发者和内容创作者提供了一个强大而灵活的工具&#xff0c;让音频的使用和…

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具01

1、开发背景 大家都很熟悉&#xff0c;Oracle提供了Impdp和ExpDp工具&#xff0c;功能很强大&#xff0c;可以进行db的导入导出的处理。但是对于Sqlserver数据库只是提供了简单的图形化的导出导入工具&#xff0c;在实际的开发和生产环境不太可能让用户在图形化的界面选择移行…

上手DeepSeek大模型:本地化安装部署,确保数据不泄露

摘要&#xff1a;过年前DeepSeek横空出世&#xff0c;在世界范围内掀起AI狂潮&#xff0c;成了大家茶余饭后的话题。对于普通人怎样使用这个大模型呢&#xff1f;这篇文章来上手实践。 使用DeepSeek最简单的办法就是使用在线版或者手机版。 - 1 - 使用在线版 在浏览器中输…

蓝桥杯刷题DAY1:前缀和

所谓刷题&#xff0c;讲究的就是细心 帕鲁服务器崩坏【算法赛】 “那个帕鲁我已经观察你很久了&#xff0c;我对你是有些失望的&#xff0c;进了这个营地&#xff0c;不是把事情做好就可以的&#xff0c;你需要有体系化思考的能力。” 《幻兽帕鲁》火遍全网&#xff0c;成为…

【React】PureComponent 和 Component 的区别

前言 在 React 中&#xff0c;PureComponent 和 Component 都是用于创建组件的基类&#xff0c;但它们有一个主要的区别&#xff1a;PureComponent 会给类组件默认加一个shouldComponentUpdate周期函数。在此周期函数中&#xff0c;它对props 和 state (新老的属性/状态)会做一…

ZZNUOJ(C/C++)基础练习1021——1030(详解版)

目录 1021 : 三数求大值 C语言版 C版 代码逻辑解释 1022 : 三整数排序 C语言版 C版 代码逻辑解释 补充 &#xff08;C语言版&#xff0c;三目运算&#xff09;C类似 代码逻辑解释 1023 : 大小写转换 C语言版 C版 1024 : 计算字母序号 C语言版 C版 代码逻辑总结…

此虚拟机的处理器所支持的功能不同于保存虚拟机状态的虚拟机的处理器所支持的功能

1.问题&#xff1a;今天记录下自己曾经遇到的一个问题&#xff0c;就是复制别人虚拟机时弹出来的一个报错&#xff1a; 如图&#xff0c;根本原因就在于虚拟机版本的问题&#xff0c;无法对应的上&#xff0c;所以必须升级虚拟机。 2.问题解决&#xff1a; 1.直接点击放弃,此时…

高温环境对电机性能的影响与LabVIEW应用

电机在高温环境下的性能可能受到多种因素的影响&#xff0c;尤其是对于持续工作和高负荷条件下的电机。高温会影响电机的效率、寿命以及可靠性&#xff0c;导致设备出现过热、绝缘损坏等问题。因此&#xff0c;在设计电机控制系统时&#xff0c;特别是在高温环境下&#xff0c;…

C++ Primer 处理类型

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

本地部署DeepSeek开源多模态大模型Janus-Pro-7B实操

本地部署DeepSeek开源多模态大模型Janus-Pro-7B实操 Janus-Pro-7B介绍 Janus-Pro-7B 是由 DeepSeek 开发的多模态 AI 模型&#xff0c;它在理解和生成方面取得了显著的进步。这意味着它不仅可以处理文本&#xff0c;还可以处理图像等其他模态的信息。 模型主要特点:Permalink…