drm 学习笔记-1:ubuntu编译运行modetest

背景

平常工作中会涉及图形图像的问题,比如丢帧、黑屏等问题,处理底层问题较多,对DRM\KMS等相关知识一直比较模糊。平常想抽时间系统的学习下这部分知识,也是着手搭建下环境。因为前端时间有使用modetest工具,首先从本地编译运行modetest开始。

环境准备

modetest是由libdrm提供的测试程序,可以查询显示设备的支持状况,进行基本的显示测试,以及设置显示的模式。本地通过编译libdrm获取modetest工具,编译环境要求:python>3.6,本人使用的

vmware平台:ubuntu16.04

libdrm-2.4.112:入口

libdrm编译环境

python3.8下载

编译使用的是meson和ninja,需要首先准备python环境。ubuntu16.04默认是python2.7和pyhton3.5的,需要准备python3.6以上版本,本次使用的是python3.8.10,通过源码进行的编译。

python3.8源码:入口。(阿里镜像,下载很快)

//1、创建安装路径
mkdir /usr/local/python3.8

//2.如果不是root,需要赋权限
chmod 777 -R /usr/local/python3.8

//3、解压python3.8.10,运行环境配置
./configure --prefix=/usr/local/python3.8/

//4、编译安装
make && make install

//5、 设置默认python3.8为默认版本,删除原有的软连接,创建python3.8的新软连接
rm -rf /usr/bin/python3
ln -s /usr/local/python3.8/bin/python3.8 /usr/bin/python3

//6. 添加环境变量,在/etc/profile最后添加上
export PATH=/usr/local/python3.8/bin:$PATH

可以通过查看python确认是否安装成功:

更新pip3

更改python版本后会出现pip3兼容问题,当安装meson时报错:

subprocess.CalledProcessError: Command '('lsb_release', '-a')' returned non-zero exit status 1。

尝试了网上的很多版本未能成功,由于很多博主写文章的时候细节没有描述详细。

本人的解决方法:通过get-pip.py脚本重新安装。这里的get-pip.py和python版本一定要对应。

 然后命令安装:

//python3 xxx, xxx为get-pip.py路径
python3 '/root/Desktop/Python-3.8.10/get-pip.py'

//查看版本是否成功
pip3 --version

meson安装

如果meson已经安装,可能版本比较老,可以先删除,然后通过pip3安装。这里需要先配置一下pip的国内源,不然meson可能会下载失败:

// 1、创建文件夹

mkdir ~/.pip

// 2、添加配置文件

gedit ~/.pip/pip.conf

//3、添加内容

  [global]
  index-url = http://mirrors.aliyun.com/pypi/simple
  [install]
  trusted-host=mirrors.aliyun.com

//4、删除老的版本
rm -rf /usr/bin/meson

//5、安装
pip3 install --user meson

//6、查看版本
meson --version

ninja安装

下载: git clone https://github.com/ninja-build/ninja.git

 //ninja依赖re2c
apt-get install re2c
//不是ninja需要的,不过不安装后面会报错:ERROR: Dependency "pciaccess" not found
apt-get install libpciaccess-dev pkg-config

//编译
./configure.py --bootstrap

//把ninja路径添加到环境变量:export PATH=xxx:$PATH
vim /etc/profile

libdrm编译

生成路径;build/tests/modetest/modetest

mkdir build && cd build && meson --buildtype=release -Dudev=true -Dvalgrind=false && ninja

验证

参数确认

modetest测试需要确认下gpu 驱动名和各个参数:

lshw -c video|grep config

参数确认:cat /sys/kernel/debug/dri/0/state,

connector中crtc-0的id:34;

crtc-0对应的id:36;

crtc-0对应的plane id:32

root@ubuntu:~/Desktop/# cat /sys/kernel/debug/dri/0/state 
plane[32]: plane-0
	crtc=crtc-0
	fb=208
		format=XR24 little-endian (0x34325258)
			modifier=0x0
		size=1655x966
		layers:
			pitch[0]=6620
			offset[0]=0
	crtc-pos=1655x966+0+0
	src-pos=1655.000000x966.000000+0.000000+0.000000
	rotation=1
....
crtc[36]: crtc-0
	enable=1
	active=1
	planes_changed=1
	mode_changed=0
	active_changed=0
	connectors_changed=0
	color_mgmt_changed=0
	plane_mask=1
	connector_mask=1
	encoder_mask=1
	mode: 0:"1655x966" 59 120858 1655 1705 1755 1805 966 1016 1066 1116 0x0 0x6
...
connector[34]: Virtual-1
	crtc=crtc-0
...

查看支持的mode参数:./modetest -M vmwgfx

Connectors:
id	encoder	status		name		size (mm)	modes	encoders
34	35	connected	Virtual-1      	0x0		19	35
  modes:
	index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot
  #0 preferred 60.00 1655 1705 1755 1805 966 1016 1066 1116 120858 flags: nhsync, pvsync; type: preferred, driver
  #1 2560x1600 59.99 2560 2752 3032 3504 1600 1603 1609 1658 348500 flags: nhsync, pvsync; type: driver
  #2 1920x1440 60.00 1920 2048 2256 2600 1440 1441 1444 1500 234000 flags: nhsync, pvsync; type: driver
  #3 1856x1392 60.00 1856 1952 2176 2528 1392 1393 1396 1439 218250 flags: nhsync, pvsync; type: driver
  #4 1792x1344 60.00 1792 1920 2120 2448 1344 1345 1348 1394 204750 flags: nhsync, pvsync; type: driver
  #5 1920x1200 59.88 1920 2056 2256 2592 1200 1203 1209 1245 193250 flags: nhsync, pvsync; type: driver
  #6 1600x1200 60.00 1600 1664 1856 2160 1200 1201 1204 1250 162000 flags: phsync, pvsync; type: driver
  #7 1680x1050 59.95 1680 1784 1960 2240 1050 1053 1059 1089 146250 flags: nhsync, pvsync; type: driver
  #8 1400x1050 59.98 1400 1488 1632 1864 1050 1053 1057 1089 121750 flags: nhsync, pvsync; type: driver
  #9 1280x1024 60.02 1280 1328 1440 1688 1024 1025 1028 1066 108000 flags: phsync, pvsync; type: driver
  #10 1440x900 59.89 1440 1520 1672 1904 900 903 909 934 106500 flags: nhsync, pvsync; type: driver
  #11 1280x960 60.00 1280 1376 1488 1800 960 961 964 1000 108000 flags: phsync, pvsync; type: driver
  #12 1360x768 60.02 1360 1424 1536 1792 768 771 777 795 85500 flags: phsync, pvsync; type: driver
  #13 1280x800 59.81 1280 1352 1480 1680 800 803 809 831 83500 flags: phsync, nvsync; type: driver
  #14 1152x864 75.00 1152 1216 1344 1600 864 865 868 900 108000 flags: phsync, pvsync; type: driver
  #15 1280x768 59.87 1280 1344 1472 1664 768 771 778 798 79500 flags: nhsync, pvsync; type: driver
  #16 1024x768 60.00 1024 1048 1184 1344 768 771 777 806 65000 flags: nhsync, nvsync; type: driver
  #17 800x600 60.32 800 840 968 1056 600 601 605 628 40000 flags: phsync, pvsync; type: driver
  #18 640x480 59.94 640 656 752 800 480 489 492 525 25175 flags: nhsync, nvsync; type: 

测试

 接下来真正的验证,ubuntu虚拟机需要切换到命令行模式,否则界面模式下会占用dri设备导致运行modetest时提示:

failed to set mode : Permission denied

进入命令行模式方法:

ctrl+alt+f1

退出命令行模式方法:

ctrl+alt+f7

由第一步获取的参数组成命令:

modetest -M vmwgfx -s 34@36:1280x960

效果:

modetest -M vmwgfx -s 34@36:1280x960 -p 32@36:1280x960 -Ftiles

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜卓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值