DRM设备文件创建与open内核流程分析

一、介绍

本文主要介绍设备文件/dev/dri/cardxx、/dev/dri/renderDxx的创建与open内核流程。分析的内核代码版本为linux-5.4.191。

二、创建DRM设备文件

pci probe到GPU设备后,会调用函数devtmpfs_create_node将创建设备文件(或称为设备结点)的请求加入链表,并唤醒内核线程kdevtmpfs,最终创建设备文件由内核线程kdevtmpfs完成,pci probe相关调用流程如下:

pci probe到GPU设备
	-》drm_dev_alloc
		-》drm_dev_init
			-》drm_minor_alloc
				-》drm_sysfs_minor_alloc
					-》minor_str = "renderD%d";/minor_str = "card%d";
					-》kdev->class = drm_class;     drm_class->devnode被设置为函数drm_devnode,具体见函数drm_sysfs_init
					-》dev_set_name(kdev, minor_str, minor->index);
	-》drm_dev_register	
		-》drm_minor_register
			-》device_add
				-》devtmpfs_create_node
					-》req.name = device_get_devnode  将请求创建的结点名字设置为"dri/renderDxx"或"dri/cardxx"
						-》dev->class->devnode 		  即调用函数drm_devnode,该函数返回字符串"dri/renderDxx"或"dri/cardxx"
					-》req.next = requests;
					   requests = &req;    将创建设备结点请求加入链表
					-》wake_up_process 	   唤醒内核线程kdevtmpfs

内核启动初始化时,会调用函数driver_init->devtmpfs_init,函数devtmpfs_init的相关工作如下:

  1. 调用vfs_kern_mount mount devtmpfs,根据下面的流程可知,创建的devtmpfs基于shmem,函数shmem_fill_super创建了超级块,且超级块的成员s_root(类型为struct dentry *,指devtmpfs文件系统的根路径的目录项)的inode操作被设置为shmem directory的操作(shmem_dir_inode_operations)。
  2. 调用kthread_run创建内核线程kdevtmpfs。
static struct file_system_type i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值