一、背景
在嵌入式系统中,显示模块是一个非常重要的设备。但是在不同的嵌入式开发板上,显示器件的接口和参数都不尽相同,这就给开发带来了一些麻烦。RK3399是一款强大的嵌入式SoC,它支持多种显示接口和分辨率。本文主要介绍如何使用RK DRM框架以及单片机进行EDID扩展块的修改,从而达到调整显示器分辨率的目的。
二、RK DRM简介
DRM是Direct Rendering Manager的缩写,直接渲染管理器。它是Linux内核中的一个子系统,负责处理图形设备相关的所有事务。RK DRM则是Rockchip公司针对RK SoC的一个DRM驱动程序。
RK DRM提供了分屏(CRTC)、输出口(Encoder)和连接器(Connector)三个对象,用户可以通过这些对象控制显示输出的相关属性。具体使用方法可以参考RK官方提供的Linux SDK。
三、EDID简介
EDID是Extended Display Identification Data的缩写,即扩展显示识别数据。它是一种标准化的文件格式,用来描述显示器的参数信息。当计算机连接到显示器时,计算机会读取显示器的EDID信息,并据此自动配置显示器参数。
EDID由若干个128字节块组成,其中第一个块(0号块)包含了显示器的基本信息,后面的块(1-3号块)包含了显示器的扩展信息。通过修改EDID的扩展块,我们就可以改变显示器的参数,比如屏幕分辨率。
四、RK DRM下修改EDID
RK DRM中的Connector对象内部维护了一个EDID结构体,它包含了所有的EDID块。我们可以使用DRM_IOCTL_MODE_GETCONNECTOR命令读取当前连接器的EDID信息,然后对其进