arm linux 移植 QT5.9 帶 tslib,QT-creator配置


背景

QT 在 開發中很常見。

平台 : Ubuntu 16.04

QT 5.9.8

[tslib](https://www.cnblogs.com/schips/p/ https://github.com/libts/tslib/releases/tag/1.4) : 1.4
arm-gcc : 4.8.1 ( > 4.8 )

主機准備

一個腳本做完所有的事情

##
#    Copyright By Schips, All Rights Reserved
#    https://gitee.com/schips/

#    File Name:  make_QT5.9.sh
#    Created  :  Fri 22 Nov 2019 11:49:30 AM CST

##
#!/bin/sh
BASE=`pwd`
BUILD_HOST=arm-linux
XPLATFORM=linux-diy-arm-g++

OUTPUT=${BASE}/install/

make_dirs() {
    cd ${BASE}
    mkdir  compressed  install  source -p
}

setup_env () {
    sudo apt-get install autoconf automake autogen libtool libsysfs-dev -y
}

tget () { #try wget
    filename=`basename $1`
    echo "Downloading [${filename}]..."
    if [ ! -f ${filename} ];then
        wget $1
    fi

    echo "[OK] Downloaded [${filename}] "
}


download_package () {
    cd ${BASE}/compressed
    #下載包
    tget https://github.com/libts/tslib/releases/download/1.4/tslib-1.4.tar.bz2
    tget http://mirrors.ustc.edu.cn/qtproject/archive/qt/5.9/5.9.8/single/qt-everywhere-opensource-src-5.9.8.tar.xz
}

tar_package () {
    cd ${BASE}/compressed
    ls * > /tmp/list.txt
    for TAR in `cat /tmp/list.txt`
    do
        tar -xf $TAR -C  ../source
    done
    rm -rf /tmp/list.txt
}

do_fix () {
    cd ${BASE}/source/tslib*
    echo "#define ABS_MT_SLOT            0x2f   /* MT slot being modified */"                >> config.h
    echo "#define ABS_MT_TOUCH_MAJOR     0x30   /* Major axis of touching ellipse */"        >> config.h
    echo "#define ABS_MT_TOUCH_MINOR     0x31   /* Minor axis (omit if circular) */"         >> config.h
    echo "#define ABS_MT_WIDTH_MAJOR     0x32   /* Major axis of approaching ellipse */"     >> config.h
    echo "#define ABS_MT_WIDTH_MINOR     0x33   /* Minor axis (omit if circular) */"         >> config.h
    echo "#define ABS_MT_ORIENTATION     0x34   /* Ellipse orientation */"                   >> config.h
    echo "#define ABS_MT_POSITION_X      0x35   /* Center X touch position */"               >> config.h
    echo "#define ABS_MT_POSITION_Y      0x36   /* Center Y touch position */"               >> config.h
    echo "#define ABS_MT_TOOL_TYPE       0x37   /* Type of touching device */"               >> config.h
    echo "#define ABS_MT_BLOB_ID         0x38   /* Group a set of packets as a blob */"      >> config.h
    echo "#define ABS_MT_TRACKING_ID     0x39   /* Unique ID of initiated contact */"        >> config.h
    echo "#define ABS_MT_PRESSURE        0x3a   /* Pressure on contact area */"              >> config.h
    echo "#define ABS_MT_DISTANCE        0x3b   /* Contact hover distance */"                >> config.h
    echo "#define ABS_MT_TOOL_X          0x3c   /* Center X tool position */"                >> config.h
    echo "#define ABS_MT_TOOL_Y          0x3d   /* Center Y tool position */"                >> config.h
    sed -i 'N;20a\#include \"config.h\"' tools/ts_uinput.c
    make
}

make_tslib () {
    cd ${BASE}/source/tslib*
    make clean
    make distclean
    echo "ac_cv_func_malloc_0_nonnull=yes" > arm-linux.cache

    CC=${BUILD_HOST}-gcc \
    ./configure --host=arm-linux \
    --prefix=${OUTPUT}/tslib \
    --cache-file=arm-linux.cache  \
    ac_cv_func_malloc_0_nonnull=yes  --enable-inputapi=no
    make  || do_fix
    make install
}

pre_configure_xplatform () {
    cd ${BASE}/source/qt*
    [ -d  qtbase/mkspecs/${XPLATFORM} ] && rm qtbase/mkspecs/${XPLATFORM} -r
    cp qtbase/mkspecs/linux-arm-gnueabi-g++ -r qtbase/mkspecs/${XPLATFORM}
    cd qtbase/mkspecs/${XPLATFORM}

    # qmake.conf
    sed -r -i "/QMAKE_CC/ s/.*/QMAKE_CC \t\t= ${BUILD_HOST}-gcc/"               qmake.conf
    sed -r -i "/QMAKE_CXX/ s/.*/QMAKE_CXX \t\t= ${BUILD_HOST}-g++/"             qmake.conf
    sed -r -i "/QMAKE_LINK / s/.*/QMAKE_LINK \t\t= ${BUILD_HOST}-g++/"          qmake.conf
    sed -r -i "/QMAKE_LINK_SHLIB/ s/.*/QMAKE_LINK_SHLIB \t= ${BUILD_HOST}-g++/" qmake.conf

    sed -r -i "/QMAKE_AR/ s/.*/QMAKE_AR \t\t= ${BUILD_HOST}-ar cqs/"            qmake.conf
    sed -r -i "/QMAKE_OBJCOPY/ s/.*/QMAKE_OBJCOPY \t\t= ${BUILD_HOST}-objcopy/" qmake.conf
    sed -r -i "/QMAKE_NM/ s/.*/QMAKE_NM \t\t= ${BUILD_HOST}-nm -P/"             qmake.conf
    sed -r -i "/QMAKE_STRIP/ s/.*/QMAKE_STRIP \t\t= ${BUILD_HOST}-strip/"       qmake.conf

    #sed -i 'N;20a\QMAKE_INCDIR += ${OUTPUT}/tslib/include' qmake.conf
    #sed -i 'N;20a\QMAKE_LIBDIR += ${OUTPUT}/tslib/lib'     qmake.conf
    
}

configure_qt () {
    cd ${BASE}/source/qt*
    ./configure \
    -v \
    -prefix ${OUTPUT}/qt \
    -release \
    -opensource \
    -confirm-license \
    -xplatform ${XPLATFORM} \
    -nomake examples -nomake tools \
    -optimized-qmake \
    -no-cups \
    -pch \
    -qt-zlib \
    -qt-sqlite \
    -tslib \
    -no-opengl \
    -no-sse2 \
    -no-openssl \
    -no-glib \
    -no-cups \
    -recheck-all \
    -no-separate-debug-info \
    -no-pkg-config \
    -skip qt3d \
    -skip qtcanvas3d \
    -skip qtdeclarative \
    -no-iconv \
    -I${OUTPUT}/tslib/include  -L${OUTPUT}/tslib/lib | tee ${BASE}/install/qt_configure_information
}

make_qt () {
    cd ${BASE}/source/qt*
    make -j4 && make install
}

make_dirs
setup_env
download_package
tar_package
make_tslib
pre_configure_xplatform
configure_qt
make_qt

部署開發板的環境

將install下的2個目錄 拷貝到開發板的文件系統中,建議是放在 /usr 。(下面以/usr目錄為例)

/etc/profile 中加入以下片段:

#ts lib

export TS_ROOT=/usr/tslib1.4

export TSLIB_CONFFILE=$TS_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TS_ROOT/lib/ts
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0

export LD_LIBRARY_PATH=$TS_ROOT/lib:$LD_LIBRARY_PATH
#qt
export QTDIR=/usr/qt-5.9.8
export QT_QPA_FONTDIR=$QTDIR/lib/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
export QT_QPA_PLATFORM_PATH=$QTDIR/plugins
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=800x480:mmSize=800x480:offset=0x0:tty=/dev/tty1
export QMLSCENE_DEVICE=softwarecontext
export QML2_IMPORT_PATH=$QTDIR/qml
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0
export QT_QPA_FB_TSLIB=1export QT_QPA_GENERIC_PLUGINS=tslib
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATHexport PATH=$QTDIR/bin:$PATH

驗證tslib是否移植成功:
  執行tslib1.4/bin 下的任意可執行文件,即可知道執行情況。

QT-creator添加新的arm-gcc

安裝QT(Ubuntu 安裝 QtCreator (version : Qt 5.9.8)

注意:下文圖示中,有可能在實際操作過程會遇到紅色感嘆號,其實是正常的。

QT配置:

添加QMAKE:

“Tools”-“Options”-“Build & Run”-“Qt Versions”,點擊Add添加qmake路徑

img

點擊 Apply。

添加Compilers:

“Tools”-“Options”-“kits” - "Compilers"

選擇 Add - > GCC 。依次選擇 C/C++ ,並添加板子對應的arm-gcc/g++

img

點擊 Apply。

添加debugers:(可選項)

“Tools”-“Options”-“kits” - "\debugers"

添加Debugers 與 Compilers 同理,不再贅述,配置以后點擊 Apply

添加Devices:

“Tools”-“Options”-“Devices”

注意:先將開發板與電腦連接到同一局域網,並查看開發板 IP 地址。
在點取菜單欄的"Tools->Options",選取 Devices 選項。點擊 Add 添加。選取第一個"Generic Linux Devive"選項,點擊"Start Wizard"選取。

img

給開發板取個名字,再填上開發板的 IP 地址和用戶名,密碼,點擊 Next。

img

點擊 Finish 開始連接開發板,當出現"Device test finished successfully"字樣說明連接成功。點擊 Closed。

img

img

點擊"Create new…", Key algotithm 選取 RSA, Key size 選取 1024,點擊"Generate And Save Key Pair"。

img

點擊"Do Not Encrypt Key File"。

img

點擊"Deploy public Key",打開 qtc_ip.pub,顯示"Deployment finished successfully"則表示設備配置成功。

img

點擊 Apply

添加工具集:

“Tools”-“Options”-“Kits”

注意: 不同的QT版本這個選項的位置不同,有些在 “Tools”-“Options”-“Build & Run”這里 。

點擊Add,選擇上文配置的,具體如下:

img

QT編譯以后,提示以下錯誤:(此項只影響能否在板子上顯示正在開發中的程序)

SFTP initialization failed: Server could not start SFTP subsystem.

只需要找到 板子 sshd 對應的配置文件sshd_config,設置好正確的sftp-server路徑即可

Subsystem sftp /usr/local/libexec/sftp-server 

測試

新建QT工程,勾選新添加的 Kits,之后編譯運行即可。

img

正確配置好以后,點擊運行即可在開發板連接的屏幕上看到結果了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM