libdrm移植

  1. 简介
    DRM(Direct Rendering Manager)是Linux目前主流的图形显示框架,相比FB架构,DRM更能适应当前日益更新的显示硬件。比如FB原生不支持多层合成,不支持VSYNC,不支持DMA-BUF,不支持异步更新,不支持fence机制等等,而这些功能DRM原生都支持。同时DRM可以统一管理GPU和Display驱动,使得软件架构更为统一,方便管理和维护 引用于此
    libdrm则是提供给应用层的库,抽象接口,方便用户操作使用;
  2. 移植
    下载地址
#解压并进入解压后的文件夹
xz -d libdrm-2.4.102.tar.xz
tar -xvf libdrm-2.4.102.tar
cd libdrm-2.4.102

#建立安装目录
mkdir install
#创建编译目录
mkdir build
#创建并编写cross_file.txt文件,用于配置交叉编译环境
touch cross_file.txt
#进入build
cd build
#meson配置
#-D 选定需要编译的模块,因为我的是在exynos芯片上的显卡所以-D exynos=true 其他都不编译,选项的值可以是true、auto或者false
#meson --prefix=$(pwd)/../install --cross-file=../cross_file.txt -D amdgpu=false -D cairo-tests=false -D etnaviv=false -D exynos=true -D freedreno=false -D freedreno-kgsl=false -D install-test-programs=true -D intel=false -D libkms=false -D man-pages=false -D nouveau=false -D omap=false -D radeon=false -D tegra=false -D udev=false -D valgrind=false -D vc4=false -D vmwgfx=false
meson --prefix=$(pwd)/../install \
	  --cross-file=../cross_file.txt \
	  -D amdgpu=false \
	  -D cairo-tests=false \
	  -D etnaviv=false \
	  -D exynos=true \
	  -D freedreno=false \
	  -D freedreno-kgsl=false \
	  -D install-test-programs=true \
	  -D intel=false \
	  -D libkms=false \
	  -D man-pages=false \
	  -D nouveau=false \
	  -D omap=false \
	  -D radeon=false \
	  -D tegra=false \
	  -D udev=false \
	  -D valgrind=false \ 
	  -D vc4=false \
	  -D vmwgfx=false

#编译并安装
ninja && ninja install
#完成后在../install目录可以能得到对应的文件
  1. meson交叉编译环境配置文件cross_file.txt
    cross_file.txt需要根据自己的实际情况进行编写;
[binaries]
c = 'arm-linux-gcc'
cpp = 'arm-linux-g++'
ar = 'arm-linux-ar'
strip = 'arm-linux-strip'

[host_machine]
system = 'linux'
cpu_family = 'arm'
cpu = 'armv7'
endian = 'little'

[build_machine]
system = 'linux'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'
  1. 测试程序的使用
    modetest:
#modetest 参数
modetest -h  #帮助
 Query options:#用于查询的参数选项

        -c      list connectors #列举出所有的connectors
        -e      list encoders   #列举出所有的encoders   
        -f      list framebuffers #列举出所有的framebuffers 
        -p      list CRTCs and planes (pipes) #列举出所有的CRTCs和planes 

 Test options:#用于测试的参数选项
		#-P给CRTC指定plane
        -P <plane_id>@<crtc_id>:<w>x<h>[+<x>+<y>][*<scale>][@<format>]  set a plane 
        #-s 设置输出模式,选择connector和crtc
        -s <connector_id>[,<connector_id>][@<crtc_id>]:[#<mode index>]<mode>[-<vrefresh>][@<format>] set a mode 
        -C      test hw cursor
        -v      test vsynced page flipping
        -r      set the preferred mode for all connectors
        -w <obj_id>:<prop_name>:<value> set property
        -a      use atomic API
        -F pattern1,pattern2    specify fill patterns

 Generic options:#指定打开设备、驱动

        -d      drop master after mode set
        -M module       use the given driver
        -D device       use the given device

        Default is to dump all info.

#例子
#-s <connector_id>[,<connector_id>][@<crtc_id>]:[#<mode index>]<mode>[-<vrefresh>][@<format>]
#-P <plane_id>@<crtc_id>:<w>x<h>[+<x>+<y>][*<scale>][@<format>]  set a plane 
modetest  -s 37@35:1024x768  -P 33@35:1024x768

参考文章

在Ubuntu中,libdrm是一个用户空间库,用于与Direct Rendering Manager (DRM) 子系统进行交互,以便在Linux系统上访问和管理图形设备。它提供了与图形驱动程序交互所需的功能和接口。 要在Ubuntu中编译libdrm,您需要准备Python环境,并安装meson和ninja。在编译之前,您需要安装python3.6以上版本。您可以通过源代码进行编译,例如使用python3.8.10。 为了编译libdrm,您可以按照以下步骤进行操作: 1. 创建安装路径:`mkdir /usr/local/python3.8` 2. 如果您不是root用户,需要赋予相应的权限:`chmod 777 -R /usr/local/python3.8` 3. 下载Python 3.8的源代码,并解压缩。 4. 进入解压后的源代码目录,运行环境配置命令:`./configure --prefix=/usr/local/python3.8/` 5. 编译并安装Python 3.8:`make && make install` 6. 设置Python 3.8为默认版本,删除原有的软连接并创建新的软连接:`rm -rf /usr/bin/python3 && ln -s /usr/local/python3.8/bin/python3.8 /usr/bin/python3` 7. 在`/etc/profile`文件的最后添加以下环境变量:`export PATH=/usr/local/python3.8/bin:$PATH` 完成上述步骤后,您就可以在Ubuntu中使用libdrm了。请注意,这些步骤假设您已经安装了meson和ninja,并按照引用中提供的方法进行了配置和编译。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span> #### 引用[.reference_title] - *1* *3* *4* [drm 学习笔记-1:ubuntu编译运行modetest](https://blog.csdn.net/qq_30599505/article/details/126193219)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [libdrm-2.4.60.tar.bz2](https://download.csdn.net/download/M120674/21889803)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值