2021-05-31

news/2024/11/29 12:56:39/

Linux DRM那些事-libdrm调试准备

本文主要介绍libdrm的代码下载、编译和调试前的准备工作。

一、代码下载

libdrm下载网址:https://dri.freedesktop.org/libdrm/libdrm-2.4.89.tar.bz2

解压命令:tar -jxvf libdrm-2.4.89.tar.bz2

在代码解压后,可以使用git命令创建本地git仓,方便代码管理,创建方法后续介绍。

二、代码编译

代码完成解压后,按如下命令编译:

 

./configure --prefix=/opt/ --host=aarch64-linux-gnu
make && make install
## 编译删除
make distclean

1、configure参数

1)--prefix:配置软件安装目录,可以配置。

2)--build:指定编译代码的主机,可以不配置。

3)--host:指定编译后的运行主机,需要配置和单板使用相同的编译工具链前缀

4)--enable-udev:使用Udev代替mknod一定不要配置

5)./configure --help查看参数用法。

2、编译映像

编译后映像:libdrm-2.4.89/.libs/libdrm.so.2.4.0libdrm-2.4.89/tests/modetest/.libs/modetest

其它测试命令(如:proptest)路径类似。

三、调试问题

1、调试准备

如使用modetest测试,需要拷贝modetestlibdrm.so.2.4.0,方法:

 

## 文件存在U盘中
mount /dev/sda4 /tmp/
cp /tmp/modetest ~/
chmod 777 modetest
cd /usr/lib/aarch64-linux-gnu
rm libdrm.so
cp /tmp/libdrm.so.2.4.0 .
ln -s libdrm.so.2.4.0 libdrm.so
cd ~
./modetest

2、--host设置错误

libdrm编译时,如果--host设置错误,在单板上使用modetest命令时,会提示如下错误:

 

cannot execute binary file: Exec format error

3、编译时添加--enable-udev

libdrm编译时,如果添加--enable-udev,在单板上使用modetest命令时,会提示如下错误:

 

root@linaro-alip:~# ./modetest
trying to open device 'rockchip'...drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: node name is /dev/dri/card1
drmOpenDevice: node name is /dev/dri/card2
drmOpenDevice: node name is /dev/dri/card3
drmOpenDevice: node name is /dev/dri/card4
drmOpenDevice: node name is /dev/dri/card5
drmOpenDevice: node name is /dev/dri/card6
drmOpenDevice: node name is /dev/dri/card7
drmOpenDevice: node name is /dev/dri/card8
drmOpenDevice: node name is /dev/dri/card9
drmOpenDevice: node name is /dev/dri/card10
drmOpenDevice: node name is /dev/dri/card11
drmOpenDevice: node name is /dev/dri/card12
drmOpenDevice: node name is /dev/dri/card13
drmOpenDevice: node name is /dev/dri/card14
drmOpenDevice: node name is /dev/dri/card15
failed
no device found

4、no device found

modetest测试失败信息如下:

 

root@linaro-alip:~# ./modetest
trying to open device 'rockchip'...failed
...
no device found

有的平台会显示Permission denied错误。

原因:/dev/dri/card0被占用。

需要关闭系统原有的显示进程,方法:

 

root@linaro-alip:~# ps -APID TTY          TIME CMD1 ?        00:00:03 systemd...958 tty7     00:00:00 Xorg      ## 显示进程...## 如果一次没有kill Xorg成功,多试几次
root@linaro-alip:~# killall Xorg && ./modetest
trying to open device 'rockchip'...failed
...
no device found## 此时可成功使用modetest测试。
root@linaro-alip:~#killall Xorg && ./modetest
trying to open device 'rockchip'...done
Encoders:
id      crtc    type    possible crtcs  possible clones
87      0       TMDS    0x00000001      0x00000000Connectors:
id      encoder status          name            size (mm)       modes   encoders
88      0       disconnected    HDMI-A-1        0x0             0       87props:1 EDID:flags: immutable blobblobs:value:2 DPMS:flags: enumenums: On=0 Standby=1 Suspend=2 Off=3value: 089 hdmi_output_depth:flags: enumenums: Automatic=0 24bit=8 30bit=10value: 890 hdmi_output_format:

5、modetest测试

在单板上使用modetest命令运行成功时,会出现下列日志:

 

root@linaro-alip:~# ./modetest
trying to open device 'i915'...failed
trying to open device 'amdgpu'...failed
trying to open device 'radeon'...failed
trying to open device 'nouveau'...failed
trying to open device 'vmwgfx'...failed
trying to open device 'omapdrm'...failed
trying to open device 'exynos'...failed
trying to open device 'tilcdc'...failed
trying to open device 'msm'...failed
trying to open device 'sti'...failed
trying to open device 'tegra'...failed
trying to open device 'imx-drm'...failed
trying to open device 'rockchip'...done
Encoders:
id      crtc    type    possible crtcs  possible clones
87      0       TMDS    0x00000001      0x00000000Connectors:
id      encoder status          name            size (mm)       modes   encoders
88      0       disconnected    HDMI-A-1        0x0             0       87props:1 EDID:flags: immutable blobblobs:value:2 DPMS:flags: enumenums: On=0 Standby=1 Suspend=2 Off=3value: 089 hdmi_output_depth:flags: enumenums: Automatic=0 24bit=8 30bit=10value: 890 hdmi_output_format:flags: enumenums: output_rgb=0 output_ycbcr444=1 output_ycbcr422=2 output_ycbcr420=3 output_ycbcr_high_subsampling=4 output_ycbcr_low_subsampling=5 invalid_output=6value: 0...

在上面的log中,打开其它平台DRM名称(如:i915)时失败,可通过修改代码消除,方法如下:

 

## 把rockchip放到modules的第一位即可或modules中只保留rockchip
static const char * const modules[] = {"rockchip","i915","amdgpu","radeon","nouveau","vmwgfx","omapdrm","exynos","tilcdc","msm","sti","tegra","imx-drm","atmel-hlcdc","fsl-dcu-drm","vc4","virtio_gpu","mediatek","meson","pl111",
};

注:本文基于RockPI 4A单板Debian映像调试。

注 2:本文只是验证lib库的编译,移植未做验证。

 


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

相关文章

03

术语表 术语 定义 敏感数据 敏感数据的具体范围取决于产品具体的应用场景,产品应根据风险进行分析和判断。典型的敏感数据包括口令、银行帐号、大批量个人数据、用户通信内容和密钥等。一类如果丢失或者泄漏,会对数据的所有者造成负面影响的数据。 本…

20070523

休息了几天(其实也不算休息,基本上按时下班走人) 今天把活作了 估计会晚走 昨晚玩到快2点 。。。。 疯了。。。 拟或是冲动了?

EC 三

8>.debug message ECdebug的方式很多,类似于RW的方式,通过外接的工具,debugger和debuggee,把当前 Registers,memory里的值都读出来,拿来和FW或者DS里面对比,看是不是正确,也可以抛一些断点,然后回看registers里有没有改变.呵,这是一个细致又烦锁的活. 就我所知ITE85X…

23种设计模式之创建型模式(单例、工厂方法、抽象工厂、生成器和原型模式)

概述 设计模式是针对某一类问题的最优解决方案,是从许多优秀的软件系统中总结出的。 Java中设计模式(java design patterns)通常有23种。 模式可以分成3类:创建型、行为型和结构型。 创建型模式 创建型模式涉及对象的实例化&#…

PL/SQL之索引和分区

一、索引 --index 数据库中的索引和目录的概念类似,如果某个列出现在查询的条件中,而该列的数据是无序的,那么查询时只能一行一行去扫描。 创建索引就是对某些特定列中的数据进行排序,生成独立的索引表, 当在某个…

ASCII Unicode UTF-8等等编码介绍

目录 背景 Unicode UTF-8 ISO-8859-1 GB2312和GBK ANSI UTF-16LE 和UTF-16BE UTF-16 LE 和BE是什么 如何处理字节序问题 "带有BOM的UTF-8"又是什么? 背景 由于计算机是美国人发明的,因此最早只有127个字母被编码到计算机中&#x…

【后缀数组/SAM+边分树合并】LGP5115 Check,Check,Check one two!

【题目】 原题地址 给定一个字符串 S S S&#xff0c;求 ∑ 1 ≤ i < j ≤ n l c p ( i , j ) l c s ( i , j ) [ l c p ( i , j ) ≤ k 1 ] [ l c s ( i , j ) ≤ k 2 ] \sum_{1\leq i<j\leq n}lcp(i,j)lcs(i,j)[lcp(i,j)\leq k_1][lcs(i,j)\leq k_2] 1≤i<j≤n∑​l…