谈到 drm 就涉及到 libdrm 库,它是一个跨驱动的中间件,它允许用户空间应用(例如作为Mesa和2D驱动程序)通过DRI与内核通信协议。
如下DRM结构图:

libdrm 是DRM下沟通驱动和用户层的库。过去APP可能是使用open(framebuff)这样的方式来和图形驱动沟通,但是在现在的硬件演化下,已经不适应新的场景。
原因如下:
- 有多个图层怎么办?
- 有多个屏幕怎么办?
- 怎么处理vsync的问题,怎么同步不撕裂?
- 怎么利用上dmabuf,做到memory zero-copy?
libdrm 的存在就是用来方便用户层和驱动这些问题,提供API给X11, Wayland这样的display backend使用。
DRM里有crtc,plane,connector这三个概念,可以这么理解:
- connector就是屏幕,比如一个HDMI一个connector num, 一个DSI一个connector num。
- crtc表示vop, 一个屏幕一般对应一个crtc。
- plane就是图层,比如视频层在plane2,UI在plane1, 视频在UI上面。
DRM里API分两套,legacy和atomic。
legacy看名字就是早期
本文深入探讨了RK356x平台U-Boot中DRM(Direct Rendering Manager)的代码结构,分析了libdrm库在驱动和用户层之间的沟通作用,以及DRM中的crtc、plane和connector概念。文章提到,DRM的legacy API和atomic API在多图层显示、同步和效率方面的不同,并指出原子提交(atomic commit)如何解决帧率限制问题。此外,还介绍了U-Boot对RGB、LVDS、MIPI、EDP和HDMI等显示接口的支持,以及logo图片的加载和配置信息。
订阅专栏 解锁全文
985

被折叠的 条评论
为什么被折叠?



