Linux DRM 理解

1. DRM 概念介绍

DRM 是Direct Render Manager的缩写:

  • Linux 显示子系统结构框架
    • 向上提供标准API给到应用使用
    • 管理GPU和Display模块
  • 相较于原来的framebuffer结构,DRM将更多的硬件模块抽象并管理起来,所以更加的灵活方便;

包含如下模块:

  • GEM(Graphics Execution Manager) 用于管理显示buffer的申请和释放
    • DUMB:只支持连续的物理内存,基于Linux底层的CMA内存管理实现,多用于小分辨率的场景
    • PRIME:可以支持连续 & 非连续内存,基于DMA-BU机制,可以实现buffer共享,多用于大内存复杂场景
    • FENCE:buffer同步机制,基于dma_fence实现,解决buffer控制不同步而出现的撕裂、抖帧、回帧等现象
  • KMS (Kernel Mode Sstting)用于设置显示相关配置,显示画面
    • 硬件模块划分
      • CRTC:配置timing、resolution等参数
      • ENCODER:将data数据转换为输出数据格式的模块
      • Connector:连接器,显示数据传输模块,比如LVDS TX / MIPI DSI / HDMI
      • Panels:物理屏幕,同时也包含硬件模块中Overlay的图层;
    • 其他相关概念
      • framebuffer:显示buffer中的数据,一般是GPU渲染的数据或者camera输入数据;
      • VBLANK:DRM框架中显示同步信号,以DPU中vsync信号触发;
      • page flip:当前framebuffer中数据填充已经完成,可以送显信号;
      • property:drm框架中的通用配置项,用于补充上述无法包含的内容信息‘

image-20210220151427205

如图所示,相较于原始FB结构,DRM device结构,将相关的硬件模块都抽象出来对象进行管理,则可以更加灵活的配置

2. 对比HW结构分析

这里是一个显示模块的大体框架结构:

image-20210220153917106

上图仅描述数据path(控制部分未添加):

  • DPU从framebuffer中读取数据
  • 经控制合成缩放等处理后输出给到LVDS Encoder模块
  • Encoder 模块将数据转换为物理线路信号发送到PHY上输出;

可以看到数据输出path为:DPU – LVDS – TX,与DRM中抽象概念可以一一对应起来:

  • CRTC 对应DPU
  • Encoder 对应 LVDS Encoder
  • Connector对应PHY或者线路,不涉及过多控制,可以在code中不用特别体现

image-20210220152138258

详细来看DPU的内部结构:

  • Display Engine中包含我们之前叙述的Overlay模块,以及后边的合成模块;
  • Output Engine中配置Display timing相关配置;
  • 支持旋转、缩放、PQ等处理;

此部分硬件支持功能可以灵活地在DRM中添加控制;

3. code分析

首先来看维基百科上的DRM Architecture图示:

image-20210220155002517

  • 实现libdrm库,用于在user层提供标准API来操作 DRM device ,并获取其中的各个组件(CRTC、Connector、Encoder)
  • 实现kernel层中core管理:
    • 对接上层libdrm结构
    • 提供注册接口,实际实现drv时通过此类接口注册crtc、encoder、connector等
    • 对应物理设备操作的ioctl也与实际drv进行链接
  • kernel中的GEM管理
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Linux DRM(Direct Rendering Manager)是一个在Linux系统中进行图形硬件驱动程序开发的子系统。它处理显示和GPU硬件之间的交互,为用户空间程序提供了一套编程接口,使它们能够与硬件交互和进行图形渲染。 Linux DRM编程可以用于各种应用,例如游戏开发、图形设计、计算机辅助设计等。它为开发者提供了一些重要的功能和特性: 1. 显示管理:Linux DRM允许开发者管理多个显示设备,并为每个设备分配不同的图像输出。这使得开发者可以实现多屏幕显示和多监视器支持,从而提供更好的用户体验。 2. GPU管理:Linux DRM允许开发者与GPU硬件进行交互,包括配置和管理GPU参数,发送渲染命令并获取图像输出。这使得开发者可以更好地控制和优化图形渲染过程,提供更高的性能和更好的图像质量。 3. 内存管理:Linux DRM提供了对GPU内存的管理接口,开发者可以在用户空间中分配和释放GPU内存。这有助于有效地管理内存资源,避免内存泄漏和资源浪费。 4. 显示模式设置:Linux DRM允许开发者配置和管理显示模式,包括分辨率、刷新率和颜色深度等。这使得开发者可以适应不同的显示设备和用户需求,提供更好的兼容性和可定制性。 5. 缓冲区管理:Linux DRM提供了缓冲区管理功能,开发者可以创建和管理图像缓冲区,包括前端缓冲和后端缓冲。这有助于实现流畅的图像显示和处理,并提供更好的用户交互体验。 总之,Linux DRM编程为开发者提供了丰富的功能和工具,用于图形硬件驱动程序的开发和优化。它使得开发者能够更好地控制和管理图形渲染过程,提供更高的性能和更好的用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值