DRM 架构简要说明

1.概述

DRM全称是Direct Rendering Manager,管理进行显示输出的, buffer分配, 帧缓冲. libdrm库提供了一系列友好的控制封装, 使用户可以方便的进行显示的控制, 但并不是 只能通过libdrm库来 控制drm, 用户可以直接操作drm的ioctl或者是使用framebuffer的 接口实现显示操作. 后面重点介绍kernel态 drm的机制.
以下为drm显示大致框架:
DRM 架构简要说明_第1张图片

2. 设备节点

DRM 的设备节点为 “/dev/dri/cardX”, X为0-15的数值.
默认使用的是/dev/dri/card0

3.Component 框架

(1)Component Framework

drivers/base/component.c

功能:在dts中, 有一个总的设备节点, 所有的子设备信息都通过dts描述关联起来, 这样系统 开机后, 就能统一的管 理各个设备.

(2)Rockchip drm 主设备

DRM 架构简要说明_第2张图片

(3)Probe过程

基于component框架, 在probe阶段解析dts中各个设备的信息, 加到component match 列表中, 等所有设备加 载完毕后, 就会引发master设备的bind.
为什么需要Component?
drm下挂了许多的设备, 启动顺序经常会引发各种问题:
(1)一个驱动完全有可能因为等另一个资源的准备, 而probe deferral, 导致顺序不定。
(2)子设备没有加载好, 主设备就加载了, 导致设备无法工作。
(3)子设备相互之间可能有时序关系,不定的加载顺序,可能带来有些时候设备能工作,有些时候又不能工作。
(4)现在编kernel是多线程编译的,编译的前后顺序也会影响驱动的加载顺序。
这时就需要有一个统一管理的机制, 将所有设备统合起来, 按照一个统一的顺序加载, Display-subsystem正是用来解决这个问题的, 依赖于component的驱动, 通过这个驱动, 可以把所有的设备以组件的形式加在一起, 等所有的组件加载完毕后, 统一进行bind/unbind.

你可能感兴趣的:(杂文,架构)