modetest 是由 libdrm 提供的测试程序,可以查询显示设备的特性,进行基本的显示测试,以及设置显示的模式。
我们可以借助该工具来学习 Linux DRM 应用编程,另外为了深入分析 Rockchip DRM driver,有必要先了解一下这个工具的使用方法和内部实现。
一、准本工作
1、开发板:ATK-DLRK3568 开发板
2、环境:ubuntu20.0 正点原子网盘提供的版本
二、modetest编译
本人没自己编译过,编译过程只供参考,正点的板子自带了
编写一个libdrm的测试程序较为复杂,这里我们使用libdrm官方的测试工具来进行测试,我们可以在这里下载源码并进行交叉编译出测试工具,以供在开发板上使用: libdrm .
新版的libdrm使用meson+ninja的构建方式,而不是老版的autotools,没有基础的同学构建新版libdrm会比较痛苦。 建议直接使用我们给大家编译好的测试程序,测试程序位于配套例程 linux_driver/framework_drm/modetest。
如果要自己编译libdrm,可以参考下面命令:
git clone https://gitlab.freedesktop.org/mesa/drm
sudo apt -y install python3-pip cmake git ninja-build
python3 -m pip install meson /*安装之后,重启板卡*/
meson . build && ninja -C build
编译之后在build/tests/modetest/下会有modetest程序, 对libdrm测试程序感兴趣的同学,可以下载libdrm源码解压,在其目录/drm/tests/modetest/下,查看modetest.c文件,此为测试程序源码。
三、modetest 使用示例
modetest在bin目录下,板子上电后打开终端进入bin目录
cd /bin
1、 查看帮助信息
modetest -h
2、查看组件的信息
modetest -M rockchip
参数说明:
-M
:用于指定访问 rockchip DRM driver
关键内容:
- Encoders / Connectors / CRTCs / Planes 的 id,modetest 通过 id 来用于引用这些组件。
- Connectors 的 modes/props:
- prop: 任何你想设置的参数,都可以做成 property,是 DRM 驱动中最灵活、最方便的 Mode setting 机制;
- modes: 显示模式,mode 里包含分辨率/刷新率等显示相关的信息;
- CRTCs 的 props;
- Planes 的 formats/props;
3、查看各组件的 id
modetest -M rockchip | cut -f1 | grep -E ^[0-9A-Z]\|id
正点原子的RK3568提供了一路的MIPI DSI 接口,所以测试MIPI
modetest -M rockchip -s 163@115:720x1280