T113 Linux Qt

Qt

Posted by LXG on October 21, 2023

目录


t113_linux/platform/framework/qt/qt-everywhere-src-5.12.5$ ls -al 
总用量 1756
drwxrwxr-x 49 lxg lxg   4096 10月 20 18:04 .
drwxrwxr-x  3 lxg lxg   4096 10月  8 14:54 ..
drwxrwxr-x  2 lxg lxg   4096 10月  8 14:54 bin
-rwxrwxr-x  1 lxg lxg   4606 10月  8 14:54 buildsetup_sf.sh
-rwxrwxr-x  1 lxg lxg   4194 10月  8 14:54 buildsetup.sh
-rwxrwxr-x  1 lxg lxg   4610 10月 19 17:47 buildsetup_t113.sh   // 编译配置脚本
-rw-rw-r--  1 lxg lxg   2845 10月  8 14:54 _clang-format
drwxrwxr-x  5 lxg lxg   4096 10月  8 14:54 coin
-rw-rw-r--  1 lxg lxg 312881 10月  8 17:18 config.cache
-rw-rw-r--  1 lxg lxg 295921 10月 20 18:04 config.log
-rw-rw-r--  1 lxg lxg     29 10月 20 18:04 .config.notes
-rw-rw-r--  1 lxg lxg   1108 10月 19 17:53 config.opt
-rwxrwxr-x  1 lxg lxg     38 10月  8 17:18 config.status
-rw-rw-r--  1 lxg lxg  12219 10月 19 17:53 config.summary
drwxrwxr-x 70 lxg lxg   4096 10月  8 17:18 config.tests
-rwxrwxr-x  1 lxg lxg   1935 10月  8 14:54 configure
-rw-rw-r--  1 lxg lxg   1980 10月  8 14:54 configure.bat
-rw-rw-r--  1 lxg lxg     94 10月  8 14:54 configure.json
drwxrwxr-x  2 lxg lxg   4096 10月  8 14:54 fonts
-rw-rw-r--  1 lxg lxg   6875 10月  8 14:54 .gitmodules
drwxrwxr-x  9 lxg lxg   4096 10月  8 14:54 gnuwin32
-rw-rw-r--  1 lxg lxg  22961 10月  8 14:54 LICENSE.FDL
-rw-rw-r--  1 lxg lxg  15351 10月  8 14:54 LICENSE.GPLv2
-rw-rw-r--  1 lxg lxg  35641 10月  8 14:54 LICENSE.GPLv3
-rw-rw-r--  1 lxg lxg  26828 10月  8 14:54 LICENSE.LGPLv21
-rw-rw-r--  1 lxg lxg   8174 10月  8 14:54 LICENSE.LGPLv3
-rw-rw-r--  1 lxg lxg  46903 10月  8 14:54 LICENSE.QT-LICENSE-AGREEMENT-4.0
-rw-rw-r--  1 lxg lxg 373789 10月 20 18:04 Makefile
-rw-rw-r--  1 lxg lxg     22 10月  8 17:17 .qmake.cache
-rw-rw-r--  1 lxg lxg   2960 10月  8 17:17 .qmake.stash
-rw-rw-r--  1 lxg lxg   8709 10月 19 10:47 .qmake.super
drwxrwxr-x 10 lxg lxg   4096 10月  8 17:25 qt3d
drwxrwxr-x 10 lxg lxg   4096 10月  8 17:29 Qt_5.12.5                // 编译后生成目录
drwxrwxr-x  8 lxg lxg   4096 10月  8 17:21 qtactiveqt
drwxrwxr-x  7 lxg lxg   4096 10月  8 17:21 qtandroidextras
drwxrwxr-x 15 lxg lxg   4096 10月  8 17:20 qtbase
drwxrwxr-x  7 lxg lxg   4096 10月  8 17:24 qtcanvas3d
drwxrwxr-x 12 lxg lxg   4096 10月  8 17:27 qtcharts
drwxrwxr-x 12 lxg lxg   4096 10月  8 17:25 qtconnectivity
drwxrwxr-x  7 lxg lxg   4096 10月  8 17:27 qtdatavis3d
drwxrwxr-x 14 lxg lxg   4096 10月  8 17:24 qtdeclarative
drwxrwxr-x  6 lxg lxg   4096 10月  8 17:27 qtdoc
-rw-rw-r--  1 lxg lxg  65846 10月  8 14:54 .QT-ENTERPRISE-LICENSE-AGREEMENT
-rwxrwxr-x  1 lxg lxg   1219 10月 20 17:59 qtenv_sf.sh
-rwxrwxr-x  1 lxg lxg   1250 10月 20 18:04 qtenv.sh                   // 编译环境变量配置
-rw-rw-r--  1 lxg lxg  65846 10月  8 14:54 .QT-FOR-APPLICATION-DEVELOPMENT-LICENSE-AGREEMENT
-rw-rw-r--  1 lxg lxg  65846 10月  8 14:54 .QT-FOR-AUTOMATION-LICENSE-AGREEMENT
-rw-rw-r--  1 lxg lxg  46475 10月  8 14:54 .QT-FOR-AUTOMOTIVE-LICENSE-AGREEMENT
-rw-rw-r--  1 lxg lxg  65846 10月  8 14:54 .QT-FOR-DEVICE-CREATION-LICENSE-AGREEMENT
drwxrwxr-x 13 lxg lxg   4096 10月  8 17:25 qtgamepad
drwxrwxr-x  6 lxg lxg   4096 10月  8 17:24 qtgraphicaleffects
drwxrwxr-x  8 lxg lxg   4096 10月  8 17:21 qtimageformats
drwxrwxr-x 13 lxg lxg   4096 10月  8 17:28 qtlocation
drwxrwxr-x  7 lxg lxg   4096 10月  8 17:21 qtmacextras
drwxrwxr-x 12 lxg lxg   4096 10月  8 17:26 qtmultimedia
drwxrwxr-x 10 lxg lxg   4096 10月  8 17:21 qtnetworkauth
-rw-rw-r--  1 lxg lxg   2962 10月  8 14:54 qt.pro
drwxrwxr-x 11 lxg lxg   4096 10月  8 17:24 qtpurchasing
drwxrwxr-x  7 lxg lxg   4096 10月  8 17:24 qtquickcontrols
drwxrwxr-x 11 lxg lxg   4096 10月  8 17:26 qtquickcontrols2
drwxrwxr-x 12 lxg lxg   4096 10月  8 17:25 qtremoteobjects
drwxrwxr-x 11 lxg lxg   4096 10月  8 17:26 qtscript
drwxrwxr-x 12 lxg lxg   4096 10月  8 17:25 qtscxml
drwxrwxr-x 13 lxg lxg   4096 10月  8 17:25 qtsensors
drwxrwxr-x 12 lxg lxg   4096 10月  8 17:21 qtserialbus
drwxrwxr-x 11 lxg lxg   4096 10月  8 17:21 qtserialport
drwxrwxr-x 11 lxg lxg   4096 10月  8 17:27 qtspeech
drwxrwxr-x 12 lxg lxg   4096 10月  8 17:21 qtsvg
drwxrwxr-x 10 lxg lxg   4096 10月  8 17:24 qttools
drwxrwxr-x  3 lxg lxg   4096 10月  8 17:26 qttranslations
drwxrwxr-x 12 lxg lxg   4096 10月  8 17:27 qtvirtualkeyboard
drwxrwxr-x 13 lxg lxg   4096 10月  8 17:26 qtwayland
drwxrwxr-x 11 lxg lxg   4096 10月  8 17:26 qtwebchannel
drwxrwxr-x 10 lxg lxg   4096 10月  8 17:28 qtwebengine
drwxrwxr-x  5 lxg lxg   4096 10月  8 17:25 qtwebglplugin
drwxrwxr-x 11 lxg lxg   4096 10月  8 17:24 qtwebsockets
drwxrwxr-x 11 lxg lxg   4096 10月  8 17:28 qtwebview
drwxrwxr-x  7 lxg lxg   4096 10月  8 17:27 qtwinextras
drwxrwxr-x  6 lxg lxg   4096 10月  8 17:21 qtx11extras
drwxrwxr-x 12 lxg lxg   4096 10月  8 17:26 qtxmlpatterns
-rw-rw-r--  1 lxg lxg   3842 10月  8 14:54 README
drwxrwxr-x  4 lxg lxg   4096 10月 19 10:47 src
-rw-rw-r--  1 lxg lxg     40 10月  8 14:54 .tag

环境变量

qtenv.sh

编译生成目录地址 platform/framework$ ls auto/rootfs/etc/qtenv.sh


export  QTDIR=/usr/local/Qt_5.12.5
if [ -d $QTDIR ];then

	export  QT_ROOT=$QTDIR
	export  PATH=$QTDIR/bin:$PATH
	export  LD_LIBRARY_PATH=$QTDIR/lib:/usr/lib/cedarx/:$LD_LIBRARY_PATH

	export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
	export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
	export QT_QPA_FONTDIR=$QT_ROOT/fonts

	TouchDevice=gt9xxnew_ts                                    // 汇顶触摸
	for InputDevices in /sys/class/input/input*
	do
		DeviceName=`cat $InputDevices/name`
		if [ $DeviceName == $TouchDevice ];then
		   TouchDeviceNum=${InputDevices##*input}
		   export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event$TouchDeviceNum
		   echo "add "/dev/input/event$TouchDeviceNum "to Qt Application."
		   break
		fi
	done
	if [ ! -n "$TouchDeviceNum" ]; then
	 echo "Error:Input device $TouchDevice can not be found,plz check it!"
	fi

	export QT_QPA_PLATFORM=eglfs
	export QT_QPA_GENERIC_PLUGINS=evdevtouch
	export QT_QPA_EGLFS_INTEGRATION=eglfs_mali
	#export QT_QPA_FB_HIDECURSOR=1
	#export QT_QPA_EGLFS_HIDECURSOR=1
	#export QT_QPA_EGLFS_ROTATION=90

	export QWS_MOUSE_PROTO=
	export DBUS_SESSION_BUS_ADDRESS=`cat /tmp/dbusaddr`
	mkdir -p /dev/shm	
	ulimit -c unlimited
	#debug Launcher &
	debug MediaUI &
	echo "find qt5 installed done"                                     
fi

QT 显示框架

显示架构支持

主要有以下几种显示架构可供选择:

  • Qt + Wayland
  • Qt + EGLFS
  • EGL program + X11
  • Wayland

QT_QPA_PLATFORM=eglfs

Qt + EGLFS 是 Qt 自己实现的一个 GUI 系统,不支持多窗口,但也因此少了 window composite。

Qt + EGLFS 和 dri2 的方式类似,区别就在于 Qt + EGLFS 的 font buffer 在自己用 gpu composite 后,是直接送给 DRM 显示,而 X 里是送至 Window manager 做 composite,所以 EGLFS 在效率上是有优势的。

QT_QPA_PLATFORM=linuxfb

该插件通过Linux的fbdev子系统直接写入帧缓冲区。仅支持软件渲染的内容。请注意,在某些设置下,显示性能可能会受到限制

编译配置

buildsetup_t113.sh


cat buildsetup_t113.sh 
#!/bin/sh
#  LICHEE_TOP_DIR   =/home/yuanguochao/other/t5_bak/longan
#  LICHEE_BR_OUT    =/home/yuanguochao/other/t5_bak/longan/out/t507/demo2.0/longan/buildroot
#  GPU include      =$LICHEE_TOP_DIR/platform/core/graphics/gpu_um_pub/mali-bifrost/include
#  GPU lib			=$LICHEE_TOP_DIR/platform/core/graphics/gpu_um_pub/mali-bifrost/fbdev/mali-g31/aarch64-linux-gnu/lib/
#  SYSROOT  		=$LICHEE_BR_OUT/out/t507/demo2.0/longan/buildroot/host/usr/aarch64-buildroot-linux-gnu/sysroot/



PWD=`pwd`
export QT_SRC_DIR=$PWD
source $PWD/bin/export_gcc484.sh

#export QT_GPU_LIB=$LICHEE_TOP_DIR/platform/core/graphics/gpu_um_pub/mali-bifrost/fbdev/mali-g31/aarch64-linux-gnu/lib
#export QT_GPU_INC=$LICHEE_TOP_DIR/platform/core/graphics/gpu_um_pub/mali-bifrost/include

#export SYSROOT=$LICHEE_TOP_DIR/out/t507/demo2.0/longan/buildroot/host/usr/aarch64-buildroot-linux-gnu/sysroot
export SYSROOT=$LICHEE_TOP_DIR/out/${LICHEE_IC}/evb1_auto/longan/buildroot/host/arm-buildroot-linux-gnueabi/sysroot
export PATH=$LICHEE_BR_OUT/host/bin/:$PATH
#export CROSS_COMPILE=$LICHEE_TOP_DIR/out/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu
#./${LICHEE_IC}/${LICHEE_BOARD}/ICHEE_LINUX_DEV/buildroot/host/opt/ext-toolchain/bin/arm-linux-gnueabi-gcc
export CROSS_COMPILE_DIR=$LICHEE_TOP_DIR/out/${LICHEE_IC}/${LICHEE_BOARD}/${ICHEE_LINUX_DEV}/buildroot/host/opt/ext-toolchain/bin/
export CROSS_COMPILE=$CROSS_COMPILE_DIR/arm-linux-gnueabi-

export CPLUS_INCLUDE_PATH=$PWD/qtbase/src/3rdparty/angle/include:$CPLUS_INCLUDE_PATH

# 环境变量
QT_ENV_CFG=qtenv.sh
QT_ENV_TARGET_DIR=$LICHEE_PLATFORM_DIR/framework/auto/rootfs/etc

sed -i '/^export  QTDIR*/d' $QT_ENV_CFG
sed -i '1 a \export  QTDIR='$QT_RUN_DIR'' $QT_ENV_CFG

HOST=arm-linux-gnueabi

OUT_GCC=`find ${LICHEE_BR_OUT} -perm /a+x -a -regex '.*-gcc'`
OUT_CPP=`find ${LICHEE_BR_OUT} -perm /a+x -a -regex '.*-g\+\+'`

export CC=$OUT_GCC
export CXX=$OUT_GCC

cpu_cores=`cat /proc/cpuinfo | grep "processor" | wc -l`
if [ ${cpu_cores} -le 8 ] ; then
	LICHEE_JLEVEL=${cpu_cores}
else
	LICHEE_JLEVEL=${cpu_cores}
fi

#env

function cdqtroot
{
cd $QT_SRC_DIR
}
#-no-c++11
function qtmakeconfig
{
	#cp $QT_GPU_LIB/* $SYSROOT/lib/ -rf
	mkdir -p $QT_INSTALL_DIR

	$QT_SRC_DIR/configure \
		-opensource \
		-confirm-license \
		-extprefix $QT_INSTALL_DIR \
		-sysroot $SYSROOT \
		-xplatform arm-linux-gnueabi-g++ \
		-device-option CROSS_COMPILE=$CROSS_COMPILE \
		-R /usr/lib \
		-no-strip \
		-c++std c++11 \
		-shared \
		-nomake examples \
		-accessibility \
		-no-sql-db2 -no-sql-ibase -no-sql-mysql -no-sql-oci \
		-no-sql-odbc -no-sql-psql -no-sql-sqlite2  -no-sql-tds \
 		-no-sql-sqlite -plugin-sql-sqlite \
		-no-qml-debug \
		-no-sse2 \
		-no-sse3 \
		-no-ssse3 \
		-no-sse4.1 \
		-no-sse4.2 \
		-no-avx \
		-no-avx2 \
		-no-mips_dsp \
		-no-mips_dspr2 \
		-qt-zlib \
		-no-journald \
		-qt-libpng \
		-qt-libjpeg \
		-qt-freetype \
		-qt-harfbuzz \
		-no-openssl \
		-no-xcb-xlib \
		-no-glib \
		-no-pulseaudio \
		-alsa \
		-gui \
		-widgets \
		-v \
		-optimized-qmake \
		-no-cups \
		-no-iconv \
		-evdev \
		-no-icu \
		-no-fontconfig \
		-no-strip \
		-pch \
		-dbus \
		-no-use-gold-linker \
		-no-directfb \
		-eglfs \
		-qpa eglfs \
		-linuxfb \
		-no-kms \
		-opengl es2 \
		-no-system-proxies \
		-no-slog2 \
		-no-pps \
		-no-imf \
		-no-lgmon \
		-no-tslib 
}

function qtmakeall
{
	make  -j${LICHEE_JLEVEL} -C $QT_SRC_DIR
}

function qtmakeinstall
{
	make  -j${LICHEE_JLEVEL} -C $QT_SRC_DIR install
	mkdir -p $QT_TARGET_DIR

	#cp libs to target
	cp -rf \
	$QT_INSTALL_DIR/lib $QT_INSTALL_DIR/plugins $QT_INSTALL_DIR/qml \
	 $QT_TARGET_DIR
	#cp fonts to target
	cp -rf fonts $QT_TARGET_DIR 
	#Remove redundant files
	rm -rf $QT_TARGET_DIR/lib/cmake
	rm -rf $QT_TARGET_DIR/lib/pkgconfig
	rm -rf $QT_TARGET_DIR/lib/*.a
	rm -rf $QT_TARGET_DIR/lib/*.prl
	rm -rf $QT_TARGET_DIR/lib/*.la
	
	#cp $QT_GPU_LIB/* $LICHEE_BR_OUT/target/usr/lib/ -rf
	
	cp $QT_ENV_CFG $QT_ENV_TARGET_DIR
}

function qtmakecleanall
{
	cd $QT_SRC_DIR
	make distclean -j${LICHEE_JLEVEL}
	make -C $QT_SRC_DIR clean -j${LICHEE_JLEVEL}
	rm -rf $QT_INSTALL_DIR
	rm -rf $QT_TARGET_DIR
	
}

echo "  "
echo "********************** useage ***************************"
echo "        please use:"
echo "        qtmakeconfig:         config qt env."
echo "        qtmakeall:            build qt"
echo "        qtmakeinstall:        install qt-lib and cp to target dir."
echo "        qtmakecleanall:       clean qt and rm all target."
echo "        QT_INSTALL_DIR:       " $QT_INSTALL_DIR
echo "        QT_TARGET_DIR:       " $QT_TARGET_DIR
echo "        qtmakecleanall:       clean qt and rm all target."
echo "  "

屏幕显示方向

【FAQ1320】 横屏竖显/竖屏横显,旋转fb配置

FAQ1320


sh-4.4# cat sys/class/disp/disp/attr/sys  
screen 0:
de_rate 300000000 hz, ref_fps:60
mgr0: 800x1280 fmt[rgb] cs[0x204] range[full] eotf[0x4] bits[8bits] err[0] force_sync[0] unblank direct_show[false] iommu[1]
dmabuf: cache[0] cache max[0] umap skip[0] overflow[0]
	lcd output	backlight( 50)	fps:60.9	 800x1280
	err:1	skip:212	irq:2791	vsync:0	vsync_skip:0	
   BUF    enable ch[1] lyr[0] z[16] prem[N] a[pixel 255] fmt[  0] fb[1280, 800;1280, 800;1280, 800] crop[   0,   0,1280, 800] frame[   0,   0, 800,1280] addr[       0,       0,       0] flags[0x       0] trd[0,0]
depth[ 0]

单独编译

source .buildconfig

./platform/framework/auto/qt_demo/build.sh

ubuntu qt 安装目录

./opt/Qt5.12.5/Tools/QtCreator/bin/qtcreator