OS: Android 7.1
Board: Firefly-RK3399
Kernel: v4.4.55

DRM介绍
DRM全称 Direct Rendering Manager, 是device-independent内核级别驱动,内核提供直接访问硬件的权限, 原本是设计提供给PC使用来支持复杂的图形设备,后来也用于嵌入式系统上。
PC一般都有显卡并且有自己的video memory,而嵌入式系统没有。


DRM组成

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

没有DRM,嵌入式系统怎么实现显示和内存管理?

  • Display:基于Linux Framebuffer
  • Multimedia: 基于V4L2
  • Buffer Manager: 基于ION, PMEM等

为什么要选择DRM?

  • 社区一直在维护
  • 在显示部分提供细粒度控制
  • user-space graphic使用很广
  • 提供一整套高级features

为什么不选择FBDEV或者V4L2?

  • FBDEV: 社区维护者较少; 无法提供overlay hw cursor等features; 开发者鼓励以后迁移到DRM/KMS上。
  • V4L2: 主要用于video模块,display模块有点大材小用。

DRM优势在哪里?

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

KMS Framework组成:

Framebuffer,CRTC,Encoder和Connector,以及Plane和drm device。

各个模块在框架中的位置如下图:

  • Framebuffer:
    内存信息如宽,高,bpp等。
    代码中由 struct drm_framebuffer 表示,
    在rockchip_drm_fbdev_create()@rockchip_drm_fbdev.c中创建。

  • CRTC:
    之前代表的是CRT controller,目前主要用于显示控制,如用于display timings,
    resolution的配置,将framebuffer内容送到display,更新framebuffer等。
    在代码中由struct drm_crtc_funcs 和 struct drm_crtc_helper_funcs两个结构来表示。
    在vop_create_crtc()@rockchip_drm_vop.c中创建。

  • Encoder:
    将数据转换成合适的格式,送给connector,比如HDMI需要TMDS信息, encoder就将数据转成HDMI需要的TMDS格式。
    在代码中由struct drm_encoder_funcs和struct drm_encoder_helper_funcs两个结构表示。
    因为和connnector有相当紧密的关系,所以它的注册放在各个connector的驱动文件中,如rockchip_dp_drm_create_encoder()@analogix_dp-rockchip.c

  • Connector:
    代表具体外部接口,如edp, hdmi, mipi等。用于传输信号给外部硬件显示设备,探测外部显示设备接入。
    在代码中由struct drm_connector_funcs 和 struct drm_connector_helper_funcs表示。
    目前有rockchip_lvds.c, analogix_dp-rockchip.c, cdn-dp-core.c , dw-mipi-dsi.c, dw_hdmi-rockchip.c这几个驱动文件。
    analogix_dp-rockchip.c的注册放在了analogix_dp_core.c 中,会通过rockchip_dp_bind()间接调用到。

Encoder和Connector这两个模块有些内容会重叠在一起,所以很难清晰划分开来。

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 device:
    处理用户空间的请求。
    在代码中由struct drm_driver表示执行。
    在rockchip_drm_bind()@Rockchip_drm_drv.c 创建和注册。

参考:
brezillon-drm-kms.pdf
DRM Driver Development For Embedded Systems.pdf

[RK3399][Android7.1] Display系统中的DRM模块介绍相关推荐

  1. Windows系统中安装Python模块pip numpy matplotlib

    Windows系统中安装Python模块pip numpy matplotlib  [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/deta ...

  2. python安装numpy模块教程_Windows系统中安装Python模块pip numpy matplotlib

    Windows系统中安装Python模块pip numpy matplotlib ]http://blog.csdn.net/guyuealian/article/details/52767125 一 ...

  3. 自动驾驶系统中视觉感知模块的安全测试

    本文由吴昊,王浩,苏醒,李明昊,许封元,仲盛联合创作 摘要 近年来,基于深度学习的视觉感知技术的发展极大地促进了车联网领域中自动驾驶的繁荣,然而自动驾驶系统的安全问题频出引发了人们对自动驾驶未来的担忧 ...

  4. 智能催收系统中自然语言理解模块设计

    摘要 随着社会信贷消费的流行,待催收的违约用户逐渐增多.针对此问题,对Rasa对话系统开发框架中的自然语言理解模块进行改进,显著提升智能催收系统中自然语言理解模块的准确率,并对最终得到的训练模型进行性 ...

  5. agv系统介绍_AGV物流系统工作流程及模块介绍

    原标题:AGV物流系统工作流程及模块介绍 众所周知,企业内部物流体系是-个复杂系统,很多企业都逐渐开始重视物流提高自己竞争力. 因此能降低零部件库存,降低周转箱数量,平衡物料接收,提高装货卸货效率的A ...

  6. 读保护_混合ASIL系统中不同安全等级模块间的边界保护

    01 功能安全组件的软件开发 针对ISO 26262对功能安全软件研发的要求,AUTOSAR将功能安全需求进行了具体拆分.当前的AUTOSAR规范囊括了诸多功能安全组件软件开发的需求概念. 在AUTO ...

  7. MES系统中产品质量追溯模块的重要作用

    MES系统中存储着产品的生产履历,详细记录产品在制造过程中的生产信息.近年来产品召回事件屡有发生,若有MES系统追溯管理,只需对有问题的产品序号加以回收,不但能缩小产品召回范围,更可以降低因为召回产品 ...

  8. MES系统中生产计划模块的重要作用

    MES系统中的"生产调度"支持从"工单管理"中收到的作业队列,根据生产目标(时间和数量),必须考虑到人员.设备.材料的可用性等限制和生产过程中的各种中断,生成一 ...

  9. 学习PCL库:PCL库中的IO模块介绍

    公众号致力于点云处理,SLAM,三维视觉,高精地图等领域相关内容的干货分享,欢迎各位加入,有兴趣的可联系dianyunpcl@163.com.未经作者允许请勿转载,欢迎各位同学积极分享和交流. IO模 ...

  10. 深度神经网络中的Inception模块介绍

    深度神经网络(Deep Neural Networks, DNN)或深度卷积网络中的Inception模块是由Google的Christian Szegedy等人提出,包括Inception-v1.I ...

最新文章

  1. 重装系统找不到固态_重装系统时找不到固态
  2. LMDIF_函数源码
  3. 一次mysql数据库连接池泄露的解决经历
  4. Replation requires the actual server name ... Replication.Utilies
  5. windows 2012 如何设置取消禁拼ping
  6. 【转载】fullpage.js学习
  7. 采用开源技术的好处_采用开源的6个技巧
  8. c11 语言,语言学C11-1.ppt
  9. 双目摄像头和单目摄像头_挑战激光雷达,MAXIEYE要重新定义单目摄像头?
  10. c++builder 代码格式化工具 AStyle
  11. 全新版大学英语综合教程第二册学习笔记(原文及全文翻译)——1 - Learning, Chinese-Style(中国式的学习风格)
  12. mysql联合查询的几种方式
  13. WPS中设置一级、二级、三级标题以及正文和目录
  14. 木马万能查杀清除方法,木马专杀
  15. 超级强大灵活的文件批量修改文件名工具,彻底告别手工改名的烦恼
  16. 学生宿舍(寝室)管理系统设计与实现(JavaWeb 附 演示、源码下载地址)
  17. php接入外汇购物,兑换难!这些外币最好别带回国
  18. w ndows7启动项怎么关,win7如何关闭启动项Windows Security notification icon
  19. 使用Jmeter做性能测试
  20. 通知与服务——消息通知——通知推送Notification

热门文章

  1. 奇怪吸引子---Rucklidge
  2. 中文的习题解答中国人看懂, 英文的习题解答外国人能看懂
  3. 在数据库WSEDSQLDB中检测到一个可能的数据库一致性问题。|解决方法
  4. DataList 编辑记录时,更新取不到值的原因。
  5. Win10下安装MySQL5.6
  6. 基于分布式锁的分布式定时任务实现
  7. Linux -lvm -扩容、缩容逻辑卷(针对xfs)
  8. docker相关实验
  9. 网络安全联盟推进威胁情报共享的扩张
  10. Oracle查询显示CLOB的内容