Linux内核4.14版本——drm框架分析(6)——实例注册drm device/ encoder/crtc/plane/connector等

目录

1. 简介

2. drm device的注册

 3. fops


         根据前面几篇文档的介绍,我们知道了drm的整体的构成,后面的文章我们从实际的一个例子中进行分析。

1. 简介

kernel版本:4.14

gpu:ARM Mali DP650

hdmi:dw hdmi

涉及的代码除了drm core层的代码外,还设计的如下:

gpu:

drivers\gpu\drm\arm\malidp_drv.c
drivers\gpu\drm\arm\malidp_crtc.c
drivers\gpu\drm\arm\malidp_hw.c
drivers\gpu\drm\arm\malidp_planes.c
drivers\gpu\drm\arm\malidp_regs.c
drivers\gpu\drm\arm\malidp_drv

hdmi:

drivers\gpu\drm\bridge\synopsys\dw-hdmi.c

2. drm device的注册

        主要代码在文件drivers\gpu\drm\arm\malidp_drv.c中,drm框架中还设计component子系统,本专题中不讨论这个,当dts匹配上的时候,最终调用函数malidp_bind。

Linux内核4.14版本——drm框架分析(6)——实例注册drm device/ encoder/crtc/plane/connector等_第1张图片

      crtc和plane是在gpu这边注册的,而connector和encoder是在dw-hdmi那边注册的,内核中没有现成的引用,可以参考drivers\gpu\drm\arm\virt_hdmi.c。

     其他的注册可以自己阅读这里不做详细介绍了。

 3. fops

#define DEFINE_DRM_GEM_CMA_FOPS(name) \
	static const struct file_operations name = {\
		.owner		= THIS_MODULE,\
		.open		= drm_open,\
		.release	= drm_release,\
		.unlocked_ioctl	= drm_ioctl,\
		.compat_ioctl	= drm_compat_ioctl,\
		.poll		= drm_poll,\
		.read		= drm_read,\
		.llseek		= noop_llseek,\
		.mmap		= drm_gem_cma_mmap,\
		DRM_GEM_CMA_UNMAPPED_AREA_FOPS \
	}

DEFINE_DRM_GEM_CMA_FOPS(fops);

        对linux来说,一切皆设备。drm对应的字符设备驱动描述符如上所示,drm_ioctl是用户态和内核态间的交互的重中之重,我们下一节讨论。

你可能感兴趣的:(Linux,drm框架分析,drm)