1 LCD硬件电路
- 在 Linux 系统中,主流的显示框架有两种:
DRM(Direct Rendering Module)框架和FB(FrameBuffer)框架。FB 框架不能处理基于 3D 加速 GPU 显卡,DRM 是可以统一管理 GPU显示,所以 DRM 相对于 FB 更能适应新的显示硬件。比如 DRM 支持多层合成、支持 VSYNC、支持 DMA-BUF、支持 fence 机制等等。 - 图形执行管理器(GEM):全称 Graphics Execution Manager,这是一个内存管理器,主要负责内存的分配和释放,可以调用 GPU。
- DUMB:这是一个 dumb 缓冲区,主要负责一些简单的 buffer 显示,可以通过 CPU 直接渲染 dumb,GPU 不会使用dumb。
- 内核显示模式设置(KMS):全称 Kernel Mode Setting,主要负责显示的控制,包括屏幕分辨率、屏幕刷新率和颜色深度等等。
- CRTC:就是指显示控制器,在 DRM 里有多个显存,就可以通过操作 CRTC 来控制要显示那个显存。
- Encoder:负责从 CRTC 里输出的 timing 时序转换成外部设备所需要的信号的模块,同时也负责控制 LCD 的显示。
- Connector:连接物理显示设备的连接器,比如 DSI、HDMI 等等。
- Plane:负责获取显存,在输出到 CRTC 里,说明 CRTC 必须要有一个 Plane。
- 帧缓冲(FB):能够显示图层的 buffer
2 DRM驱动框架设备树
2.1 LCD屏幕使用的IO配置
- 打开 arch/arm/boot/dts/stm32mp15-pinctrl.dtsi 文件,在pinctrl节点中找到如下内容:
2.2 LDTC接口节点修改
- LTDC 节点在 stm32mp151.dtsi 里已经写好一部分了,我们只需要告诉 LTDC 节点输出到RGB LCD 屏里就行。
2.3 panel-simple.c 文件里面添加屏幕参数(linux-5.4.31-ged58c42cd-v1.4\drivers\gpu\drm\panel)
3 LCD屏幕背光节点信息
- 比如:#pwm-cells =<2>,表示 pwms 属性有 2 个参数,如下所示:pwms= <&pwm4 1 5000000>, pwm4 表示使用 PWM4,后面两个是参数,其中 1 表示使用 PWM4 的通道 2(通道从 1开始);5000000 表示为 200Hz。
4 DRM运行测试
5 FB基本测试