T113 Linux Qt

本系列调试说明记录了Linux在全志T113-S3/S4平台上的移植过程,说明过程中可能会技术瑕疵,希望大家提供宝贵意见。
本文移植的硬件平台来自于盈鹏飞嵌入式的SBC-T113S(处理器是T113-S3)主板。

SBC-T113S产品特性:

  • 采用Allwinner公司Cortex-A7双核T113-S3/S4处理器,运行最高速度为1.2GHZ;
  • 内置64-bit XuanTie C906 RISC-V协处理器(仅T113-S4支持);
  • 支持JPEG/MJPEG视频编码,最大分辨率1080p@60fps;支持多格式1080P@60fps视频解码 (H.265,H.264, MPEG-1/2/4);
  • 支持RGB666/LVDS/MIPI-DSI,分辨率最高1920x1080;
  • 支持128-256M Bytes DDR3 SDRAM,其中T113-S3内置128MB;T113-S4内置256MB;
  • 支持SPI NAND存储和启动(默认:256MB;最大1GB)或者EMMC启动(默认:4GB,最大32GB);
  • 支持一路USB2.0 OTG(设计为TYPE-A接口);支持二路USB2.0 HOST;
  • 支持七路RS232通信或者6路RS232和1路RS485(隔离);
  • 支持一路CAN BUS通信(隔离);
  • 支持一路10/100M以太网;
  • 稳定的操作系统的支持,可预装LINUX 5.4或者OpenWRT;
  • 经典尺寸主板,尺寸为120*100MM; 

产品功能评估图:

 产品尺寸:

以下为T113 Linux Qt说明:

目录

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

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值