在MPSoC上运行基于eglfs_kms的QT应用程序

1 xilinx backend
xilinx为mpsoc支持4种libmali的backend: x11, wayland/gbm, fbdev, headless-egl。
2 qt
qt支持4种plugin(插件)或者backend,fb,x11,wayland,eglfs。对不同的plugin(插件)或者backend,qt应用层是一样的。
其中的fb,不能利用gpu做渲染。
eglfs可以让qt应用直接运行在egl和opengl es 2.0上。也就是,可以在没有窗口管理器(windowing system like x11 or wayland)的情况下,运行qt软件。对于有gpu的嵌入式linux系统,建议使用eglfs。
当使用kms/drm时,eglfs的backend是eglfs_kms。更多信息,可以参考qt文档,https://doc.qt.io/qt-5/embedded-linux.html
3 xilinx支持情况
xilinx支持eglfs_kms。
本文的命令可以在xilinx的zcu102和zcu106单板上运行。所有测试基于zcu102和zcu106的petalinux bsp的工程。
3.1 rootfs
在linux的rootfs里,增加qt相关的软件。使用命令petalinux-config -c rootfs配置linux的rootfs,使能packagegroup-petalinux-qt。
3.2 libmali
使用eglfs_kms时,libmali.so.9.0使用对应的wayland版本,指向到/usr/lib/wayland/libmali.so.9.0。
mali_backend_default = wayland
在文件project-spec/meta-user/conf/petalinuxbsp.conf里,增加下列行,可以使libmali.so.9.0指向到/usr/lib/wayland/libmali.so.9.0。
update-alternatives --install /usr/lib/libmali.so.9.0 libmali /usr/lib/wayland/libmali.so.9.0 90
也可以在linux运行的时侯,执行下列命令,使libmali.so.9.0指向到/usr/lib/wayland/libmali.so.9.0。
3.3 qt环境设置
为了让qt使用eglfs_kms,需要设置下列两个环境变量。
export qt_qpa_platform=eglfs export qt_qpa_eglfs_integration=eglfs_kms
qt还可以通过json文件设置有更多参数可以设置。通过导出 系统变量qt_qpa_eglfs_kms_config,可以指定json文件名,比如
export qt_qpa_eglfs_kms_config=/home/root/kms.conf
kms.conf的内容如下:
{ device: /dev/dri/card0, hwcursor: false, pbuffers: true, outputs: [ { name: dp, mode: 3840x2160 } ] }
3.4 检测显示器
通过下列命令检查显示器,并设置它的分辨率。
ls /dev/dri/by-path/ modetest -d fd4a0000.zynqmp-display modetest -d fd4a0000.zynqmp-display -s 43:1920x1080-60@bg24 modetest -d fd4a0000.zynqmp-display -s 43:3840x2160-29.98@bg24
3.5 qt测试程序
3.5.1. 默认测试程序
petalinux编译出的文件系统,在目录/usr/share/examples/opengl下,有很多opengl的测试程序,比如cube和textures。
/usr/share/examples/opengl/cube/cube /usr/share/examples/opengl/textures/textures
3.5.2. qt5everywheredemo
更复杂的opengl的测试程序,qtdemo可以通过qt5everywheredemo编译。
下面的命令,直接编译qt5everywheredemo。
petalinux-build -c qt5everywheredemo -x compile
在文件petalinuxbsp.conf里添加下列行后,petalinux编译时会包含qt5everywheredemo。
mali_backend_default = wayland image_install_append = qt5everywheredemo
之后在目录/usr/share/qt5everywheredemo-1.0/里能找到
root@xilinx-zcu106-2020_2# find -name qtdemo ./usr/share/qt5everywheredemo-1.0/qml/qtdemo ./usr/share/qt5everywheredemo-1.0/qtdemo


思必驰科募资10.33亿元进行AI核心技术创新升级
什么是网格网?如何设置和使用网格网?
关于5G网络的神奇可不仅仅是速度快而已
大数据在医疗行业的5个具体应用案例
C++中常用关键字详解(1)
在MPSoC上运行基于eglfs_kms的QT应用程序
用面部表情和语音操作Gear VR!三星提供全新UX体验
CENTAURI200如何满足OEM对多协议物联网网关的需求
基于自动驾驶的无人汽车,智慧交通时代已经到来
西门子LOGO可编程序控制器实现PS板打孔机控制系统的设计
Android移动设备中光电传感器的工作原理解析
五菱宏光mini EV以2万辆的销量夺回国内新能源汽车市场销量第一名
聊聊企业级存储盘中的操作特性
微信或推出短内容 呈现形式尚未知
红外摄像机的发展趋势是怎样的
浅谈二项光伏电站用电源浪涌保护器(SPD)规范获准
低噪声放大器的设计流程论述
一加5拆解 外兼修水桶机型各项表现符合旗舰定位
DGP系统中分词技术的实现
英飞凌在新加坡兴建全球人工智能中心