赞
踩
Linux 下的许多驱动框架其实都挺复杂,大多都是许多国内外的牛人经过多年的完善而积累下来的代码。
学习驱动开发需要找准自己的定位,先全局把握再适当地去填充细节,不要总想着深入到驱动框架里,站在一个使用者的角度去思考如何应用这些驱动框架或许会有更好的效果。
这里我是以一个菜鸟的身份记录下自己的一些想法和学习心得,欢迎纠正我。
一、基础概念
1. Linux 的 2 种显示方案
包括:
FBDEV: Framebuffer Device
DRM/KMS: Direct Rendering Manager / Kernel Mode Setting
它们有什么区别?
FBDEV:
传统的显示框架;
简单,但是只能提供最基础的显示功能;
无法满足当前上层应用和底层硬件的显示需求;
DRM/KMS:
目前主流的显示方案;
为了适应当前日益更新的显示硬件;
软件上能支持更多高级的控制和特性;
2. DRM/KMS 基础概念
DRM subsystem 图:
点击查看大图
虽然经常用 DRM/KMS 来指代整个 DRM subsystem,但是 KMS 和 DRM driver 只是 整个 DRM subsystem 的其中 2 个部分。
KMS (Kernel Mode Setting) 是内核提供给应用层的 DRM API 的其中一部分,应用层一般通过 libdrm 来访问这些 API。
对于驱动工程师而言,重点关注 DRM driver,这里负责使能 Display engine,可以理解为加强版的 FBDEV。
KMS 里的几个重要组件:
Planes:图层,例如在 rockchip 平台里对应 SOC 内部 VOP 模块的 win 图层;
CRTC:显示控制器,例如在 rockchip 平台里对应 SOC 内部的 VOP 模块;
Encoder:输出转换器,指 RGB、LVDS、DSI、eDP、HDMI、CVBS、VGA 等显示接口;
Connector:连接器,指 encoder 和 panel 之间交互的接口部分;
Bridge:桥接设备,一般用于注册 encoder 后面另外再接的转换芯片,如 DSI2HDMI 转换芯片;
Panel:泛指屏,各种 LCD、HDMI 等显示设备的抽象;
这些组件组合成 display pipeline:
点击查看大图
3. 驱动视角看 DRM/KMS
下面以 Allwinner 芯片的 DRM driver 为例进行展示。
DRM subsystem:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。