美文网首页
Android 图形系统(3)---- DRM 显示框架初步

Android 图形系统(3)---- DRM 显示框架初步

作者: 特立独行的佩奇 | 来源:发表于2021-11-06 17:57 被阅读0次
    DRM框架简介

    DRM 是目前主流的图形显示框架,Linux 内核中已经有Framebuffer 驱动用于管理显示设备的 Framebuffer, Framebuffer 框架也可以实现Linux 系统的显示功能,但是缺点如下:

    • 不支持VSYNC
    • 不支持DMA-BUF
    • 不支持异步更新
    • 不支持Fence机制
    • 不支持和GPU的通信
      这些功能DRM框架都支持, 可以统一管理GPU和Display驱动,使得软件架构更为统一,方便管理和维护。


      Framebuffer显示框架.png

    下面是Linux graphic system 的框架,基于Wayland的Windowing system,在DRI框架下,通过两条路径(DRM和KMS),分别实现Rendering和送显两个显示步骤,注意观察 DRM 框架在其中的作用


    Linux Wayland DRI 显示框架.png
    1. Application(如3D game)根据用户动作,需要重绘界面,此时它会通过OpenGL|ES、EGL等接口,将一系列的绘图请求,提交给GPU。
      注意:
      a)OpenGL|ES、EGL的实现,可以有多种形式,这里以Mesa 3D为例,所有的3D rendering请求,都会经过该软件库,它会根据实际情况,通过硬件或者软件的方式,响应Application的rendering请求。
      b)当系统存在基于DRI的硬件rendering机制时,Mesa 3D会通过libGL-meas-DRI,调用DRI提供的rendering功能。
      c)libGL-meas-DRI会调用libdrm,libdrm会通过ioctl调用kernel态的DRI驱动,这里称作DRM(Direct Rendering Module)
      d)kernel的DRM模块,最终通过GPU完成rendering动作。

    2. GPU绘制完成后,将rendering的结果返回给Application。
      rendering的结果是以image buffer的形式返回给应用程序。

    3. Application将这些绘制完成的图像buffer(可能不止一个)送给Wayland compositor,Wayland compositor会控制硬件,将buffer显示到屏幕上。
      Wayland compositor会搜集系统Applications送来的所有image buffers,并处理buffer在屏幕上的坐标、叠加方式后,直接通过ioctl,交给kernel KMS(kernel mode setting)模块,该模块会控制显示控制器将图像显示到具体的显示设备上。

    DRM 基本概念

    DRM 框架的基本流程框图如下:


    drm 显示流程.png

    软件角度框图:


    drm 软件框图.png

    DRM框架涉及到的元素很多,大致如下:
    KMS:CRTC,ENCODER,CONNECTOR,PLANE,FB,VBLANK,property
    GEM:DUMB、PRIME、Fence

    下面一一介绍
    libdrm:
    应用层的一个动态链接库,对底层接口进行封装,向上层提供通用的API接口,主要是对各种IOCTL接口进行封装。

    KMS:
    Kernel mode setting 简而言之做两件事:更新画面 + 设置显示参数
    更新画面: 显示buffer 的切换,多图层之间的合成方式,每个图层的显示位置
    设置显示参数:包含 刷新率,分辨率,电源状态 休眠唤醒等等。

    GEM:
    Graphic Execution Manager,主要负责显示buffer的分配和释放,也是GPU唯一用到DRM的地方。

    元素 说明
    CRTC 对显示buffer 进行扫描产生时序的硬件模块,通常是指 Display Controller
    Encoder 负责将CRTC输出的Timing 转换为外部设备需要信号的硬件模块,比如 HDMI 转换器,LVDS转换器,MIPI/DSI 转换器等
    Connector 连接物理显示设备的连接器,比如 HDMI接口,LVDS 接口等,通常和 Encoder 绑定在一起
    Plane 硬件图层,一个 plane 对应于一张显示buffer,有的 显示设备支持多图层显示(overlay mode),但所有的Display Controller至少要有1个plane
    FB Framebuffer ,单个图层的显示buffer,对应于一段显存
    VBlank 软件和硬件的同步机制,LCD时序中两帧之间的垂直消隐区,软件通常使用硬件VSYNC来实现
    Property DRM 中用于设置显示参数的数据结构,所有设置到显示设备的参数都可以抽象为 property
    Dump 表示连续物理内存,基于kernel中通用CMA API实现,多用于小分辨率简单场景
    Prime 连续、非连续物理内存都支持,基于DMA-BUF机制,可以实现buffer共享,多用于大内存复杂场景
    Fence Buffer 之间的同步机制,基于内核dma_fence机制实现,用于防止显示内容出现异步问题

    学习 drm 就是学习上面这些概念的用法和实现。

    相关文章

      网友评论

          本文标题:Android 图形系统(3)---- DRM 显示框架初步

          本文链接:https://www.haomeiwen.com/subject/iapjzltx.html