[RK3399][Android7.1] 学习笔记 DRM驱动程序开发(介绍)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33487044/article/details/85312114
平台 内核版本 安卓版本
rk Linux4.4 Android7.1

1. 简介

DRM 全称是 Direct Rendering Manager,是 DRI(Direct Rendering Infrastructure)框架的一个组件;Android 新版本逐渐从Framebuffer 框架迁移到 DRM 上,从内核 4.4 开始,RK 的显示框架逐渐迁移到 DRM 上;


DRM组成:

  • KMS(Kernel Mode Setting): 改变分辨率和位深
  • DRI(Direct Rendering Infrastructure): 直接访问硬件接口
  • GEM(Graphics Execution Manager): 内存管理
  • DRM Driver in kernel side:  访问硬件

嵌入式系统实现显示和内存管理方式

  • Linux Framebuffer for Display
  • V4L2 based device drivers for multimedia
    Rotator and Scaler
    Video codec
    HDMI
  • Buffer managers such as UMP, HWMEM, CMEM, PMEM, ION, and so on.

为什么要选择DRM?

  1. 从界面的角度来看
  • 通过单个设备节点控制所有HW
  • 硬件访问的通用接口
  • 缓冲区管理的通用接口
  1. 从机制的角度来看
  • 构建屏幕

DRM优势在哪里?

  • 通过单单一个device node来控制所有硬件设备
  • 通用访问硬件接口
  • 通用内存管理机制

DRM KMS Framework

KMS Framework组成:
在这里插入图片描述

  1. Framebuffer
    内存信息,如宽度,高度,深度,bpp,像素格式等

  2. CRTC(CRT controller)

  • Mode information(模式信息)
    display timings, resolution、分辨率,深度,极性,门廊,刷新率,等等的配置
  • Information of the buffer region displayed(显示缓冲区的信息)
  • Change current framebuffer to new one(更新framebuffer)
  1. Encoder
  • Take the digital bit-stream from the CRTC(从CRTC获取数字比特流)
  • Convert to the appropriate analog levels (将数据转换成合适的格式送给connector)
    比如HDMI需要TMDS信息, encoder就将数据转成HDMI需要的TMDS格式。
  1. Connector
  • 代表具体外部接口,如edp, hdmi, mipi等。用于传输信号给外部硬件显示设备,探测外部显示设备接入。

代码

  1. Framebuffer
    目录rockchip_drm_fbdev.c
    代码中由 struct drm_framebuffer 表示
    rockchip_drm_fbdev_create()创建
    在这里插入图片描述

  2. CRTC:
    目录rockchip_drm_vop.c
    代码中由 struct drm_crtc_funcsstruct drm_crtc_helper_funcs两个结构来表示
    vop_create_crtc()中创建

  3. Encoder
    目录analogix_dp-rockchip.c
    在代码中由struct drm_encoder_funcsstruct drm_encoder_helper_funcs两个结构表示
    rockchip_dp_drm_create_encoder()中创建

  4. Connector
    目录rockchip_lvds.canalogix_dp-rockchip.ccdn-dp-core.cdw-mipi-dsi.cdw_hdmi-rockchip.c


Planes:

一个Plane代表一个image layer, 最终的image由一个或者多个Planes组成。

不同类型的Planes

  1. DRM_PLANE_TYPE_PRIMARY: 一定要有,由于显示背景或者图像内容
  2. DRM_PLANE_TYPE_OVERLAY: 用于显示Overlay
  3. DRM_PLANE_TYPE_CURSOR: 用于显示鼠标

代码中由struct drm_plane_funcs 表示。
在vop_plane_init()@Rockchip_drm_vop.c中创建注册。
在这里插入图片描述在这里插入图片描述

DRM Driver Development For Embedded Systems

猜你喜欢

转载自blog.csdn.net/qq_33487044/article/details/85312114