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。

      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是用户态和内核态间的交互的重中之重,我们下一节讨论。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux DRM(Direct Rendering Manager)提供了一个通用的框架,用于开发LCD驱动程序。下面是Linux DRM LCD驱动框架的一般概述: 1. DRM核心框架Linux内核中的DRM核心框架提供了与图形和显示相关的基本功能,如模式设置、缓冲管理和DMA传输等。它还提供了与用户空间交互的接口,允许应用程序通过DRM设备节点与LCD驱动程序通信。 2. CRTC(Cathode Ray Tube Controller):CRTCDRM框架中的一个重要组件,负责控制LCD的时序和显示参数。在LCD驱动程序中,您可以通过配置CRTC来设置分辨率、刷新率和时序参数等。 3. Encoder和ConnectorEncoder和ConnectorDRM框架中用于连接CRTC和显示设备(如LCD)的中间组件。Encoder负责将CRTC中的图像数据编码为特定格式,并将其发送到Connector上。Connector则负责与显示设备进行物理连接,并将编码后的图像数据传输到显示设备。 4. Plane:Plane是DRM框架中用于管理图像平面(如主显示平面、叠加平面等)的组件。它允许您在LCD上叠加多个图像或进行其他图像处理操作。 5. Framebuffer和Gem:Framebuffer是DRM框架中用于管理显存的组件,用于存储和管理显示数据。Gem(Graphics Execution Manager)是DRM框架中的内存管理器,用于分配和管理显存。您可以通过Framebuffer和Gem来设置和操作LCD的显示数据。 6. KMS(Kernel Mode Setting):KMS是DRM框架中的一项功能,它允许用户空间应用程序通过DRM接口来设置和管理显示模式。通过KMS,应用程序可以动态地更改分辨率、刷新率和旋转等显示参数。 以上是Linux DRM LCD驱动框架的一般概述。在编写LCD驱动程序时,您需要理解DRM框架的相关概念和组件,并根据LCD设备的特性和规格来配置和操作这些组件。具体的实现细节可能因您使用的硬件平台和LCD控制器而有所不同。建议您参考Linux内核文档、示例代码和相关社区资源,以获取更具体和针对性的指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值