一、Direct Rendering Manager(DRM)是linux内核子系统,负责与显卡交互。DRM提供一组API,用户空间程序可以使用该API将命令和数据发送到GPU并执行诸如显示器的模式设置之类的操作。用户空间程序可以使用DRM API命令GPU执行硬件加速的3D渲染、视频解码、GPU计算。
二、fbdev:Linux内核已经有一个fbdev的API,用来管理图形适配器的帧缓存区,但不能用于满足基于3D加速的现代基于GPU的视频硬件需求,这些设备通常需要在自己的内存中设置和管理命令队列,以将命令分派给GPU,并且还需要管理该内存中的缓存区和可用空间。最初,用户空间程序直接管理这些资源,当多个程序试图同时控制相同的硬件,并以自己的方式设置每个资源时,就会出问题。
DRM允许多个程序同时使用视频硬件资源,DRM获得对GPU的独占访问权,负责初始化和维护命令队列、内存和其他资源。希望使用GPU的程序将请求发送到DRM。 DRM的范围已得到扩展,已涵盖以前由用户空间程序处理的功能,例如framebuffer管理和模式设置,内存共享对象和内存同步。这些功能有特定的名称如图形执行管理器(GEM)或内核模式设置(KMS)。
DRM检测到的每个GPU都称为DRM设备,并创建了一个设备文件/dev/dri/cardX与之连接,并使用ioctl调用与DRM进行通信。
三、libdrm:一个方便用户空间程序与DRM子系统的接口库。使用libdrm不仅避免将内核接口直接暴露给应用程序,而且还提供在程序之间重用和共享代码的优点。 四、DRM由两部分组成:通用DRM core:提供可以注册不同DRM驱动程序的基本框架;为用户空间提供了具有通用的、独立于硬件、功能最少的ioctl集。 受支持的特定部分DRM Driver:实现API的硬件相关部分,取决于支持的GPU类型,提供其余的ioctl实现。可以扩展API,提供特定GPU附加功能的ioctl,用户空间libdrm也将通过一个额外的库libdrm-driver扩展。 五、DRM-Master和DRM-Auth:DRM API中有几个ioctl由于并发问题仅限用户空间单个进程使用,所以将DRM设备分为Master和Auth。
六、GEM:Graphics Execution Manger(GEM)是一种内存管理方法
七、TTM:Translation Table Maps是在GEM之前开发的用于GPU的通用内存管理器
八、DMA-BUF:DMA缓冲区共享API是一种Linux内核内部API,旨在提供一种通用机制在多个设备之间共享DMA缓冲区。
九、KMS:Kernel Mode Setting 为了正常工作,显卡或者图形适配器必须设置一种模式(屏幕分辨率、颜色深度和刷新率的组合)。这个模式必须在其自身和所连接的显示屏支持的值的范围内。此操作称为mode-setting
十、Render nodes:除了主节点/dev/dri/cardX,还会创建一个设备文件/dev/dri/renderDX,称为渲染节点。
|