STM32MP157A驱动开发 | 04 - Linux DRM显示驱动框架

news/2025/1/12 8:47:27/

Linux中主流的显示框架有两种:DRM框架和FB框架。

  • DRM框架:Direct Rendering Module,可以统一管理GPU显示
  • FB框架:Frame Buffer,不能处理基于3D加速的GPU显卡

一、DRM框架简介

1. 整体架构

DRM框架包含两部分:DRM core和DRM driver。

DRM core提供了一个基本的框架,DRM driver可以注册进DRM框架,同时为用户空间提供一组ioctl。

libdrm对底层接口(DRM driver提供的ioctl)进行封装,向上层提供统一的API接口。

DRM driver包含了GEM模块和KMS模块。

2. DRM driver

  • GEM:Graphics Execution Manager,图形执行管理器,是一个内存管理器,主要负责内存的分配与释放,可以调用GPU
  • DUMB:是一个dumb缓冲区,负责一些简单的buffer显示,可以通过CPU直接渲染
  • KMS:Kernel Mode Setting,内核显示模式设置,主要负责显示的控制,包括屏幕分辨率、屏幕刷新率、颜色深度等
  • CRTC:显示控制器,在DRM里有多个显存,可以通过操作CRTC来控制要显示的那个显存
  • Encoder:负责从CRTC里输出的timing时序转换成外部设备所需要的信号的模块,也负责控制LCD的显示
  • Connector:连接物理显示设备的连接器,比如DSI、HDMI等
  • Plane:负责获取显存,再输出到CRTC里
  • FB:帧缓冲,能够显示图层的buffer

3. GEM和KMS如何连接显示器

二、ST官方的DRM驱动框架

DRM驱动的核心是drm_driver结构体

1. ltdc设备树描述

在stm32mp1芯片级通用描述文件中:

2. ltdc驱动

通过兼容性找到ltdc驱动为:drivers/gpu/drm/stm/drv.c,绑定文档为:Documentation/devicetree/bindings/display/st,stm32-ltdc.yaml

可以看到,这是一个标准的platform驱动,当设备和驱动匹配以后,probe函数就会执行。

重点看一下drv_load函数:

其中最核心的是ltdc_load函数,其中通过drm_pannel结构体来获取屏幕参数。

3. drm_panel结构体

drm_panel结构体定义在include/drm/drm_bridge.h

/*** struct drm_panel - DRM panel object*/
struct drm_panel {/*** @dev:** Parent device of the panel.*/struct device *dev;/*** @backlight:** Backlight device, used to turn on backlight after the call* to enable(), and to turn off backlight before the call to* disable().* backlight is set by drm_panel_of_backlight() and drivers* shall not assign it.*/struct backlight_device *backlight;/*** @funcs:** Operations that can be performed on the panel.*/const struct drm_panel_funcs *funcs;/*** @connector_type:** Type of the panel as a DRM_MODE_CONNECTOR_* value. This is used to* initialise the drm_connector corresponding to the panel with the* correct connector type.*/int connector_type;/*** @list:** Panel entry in registry.*/struct list_head list;
};

三、RGB LCD屏幕驱动

在文件drivers/gpu/drm/panel/panel-simple.c中,可以是标准的platorm驱动:

匹配表如下:

匹配表中给出了兼容性和对应的屏幕参数数据,比如"ampire,am-1280800n3tzqw-t00h"这块屏幕,对应的屏幕参数如下:

四、内核配置——使能DRM

-> Device Drivers-> Graphics support[*] Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)[*] DRM Support for STMicroelectronics SoC Series-> Display Panels[*] support for simple panels-> Backlight & LCD device support[*] Generic GPIO based Backlight Driver




http://www.ppmy.cn/news/768155.html

相关文章

STM32MP157驱动开发——字符设备驱动

一、简介 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节 流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、 IIC、 SPI, LCD 等等都是字符设备,这些设备…

使用正点原子的U-boot驱动TN92

目录 TN92不能正常显示的原因:改进措施: TN92不能正常显示的原因: 使用正点原子的U-boot源码配合TN92 LCD显示屏进行实验,发现显示屏花屏,不能正常使用。在对比TN92显示屏的原理图和正点原子7寸LCD显示屏的原理图后发…

linux 字符设备驱动实战

文章目录 字符设备1、加载卸载模块2、字符设备相关结构体2.1、file_operations 结构体2.2、cdev 结构体2.3、cdev 系列函数常使用模板如下 3、注册设备号常使用模板如下 4、自动创建节点4.1、首先要创建一个 class 类4.2、创建一个设备device_create常使用模板如下 5、私有数据…

驱动开发了解下

目录 前提环境说明网络环境网络环境1网络环境2 启动开发板,tftp下载内核和驱动,nfs挂载文件系统开发流程1编写驱动程序修改Makefile编译创建拷贝加载驱动modprobe加载驱动depmod查看当前系统中存在的模块查看系统所有的设备创建设备节点文件APP测试chrde…

【正点原子STM32连载】第三章 开发环境搭建 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id677017430560 3)全套实验源码手册视频下载地址:http://www.openedv.com/thread-336836-1-1.html 4&#xff…

atk-paj7620手势传感器驱动

ATK-PAJ7620是一款高性能手势识别传感器模块。该模块采用原相科技(Pixart)公司的 PAJ7620U2 芯片,芯片内部集成了光学数组式传感器,以使复杂的手势和光标模式输出,自带九种手势 识别,支持上、下、左、右、前…

c语言开发蓝牙驱动 win7,ATK-hc05蓝牙串口模块驱动

ATK-hc05蓝牙串口模块是一款高性能的主从一体蓝牙串口模块,可以同各种带蓝牙功能的电脑、蓝牙主机、手机、PDA、PSP等智能终端配对。这里给大家提供了ATK-hc05蓝牙串口模块驱动下载,推荐有需要的用户下载使用。 模块与蓝牙主机连接方法&…

【论文基本功】【LaTeX】附录【IEEE论文】

注意:本博客使用的所有命令都需要以使用 IEEEtran 文档类为前提,即 tex 文件的第一行中的必须是 \documentclass[可选参数]{IEEEtran}(可选参数部分可以自由选择,如 \documentclass[10pt,journal,compsoc]{IEEEtran}。&#xff09…