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

原文地址:https://www.cnblogs.com/schips/p/11089135.html

 

平臺                : Ubuntu 16.04

 

QT                  :5.9.8

tslib                 : 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-hisiv500-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
}

download_package () {
    cd ${BASE}/compressed
    #下載包
    wget -c https://github.com/libts/tslib/releases/download/1.4/tslib-1.4.tar.bz2
    wget  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=1
export QT_QPA_GENERIC_PLUGINS=tslib

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export 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路徑

 

點擊 Apply。

 

添加Compilers:

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

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

 

 點擊 Apply。

 

添加debugers:(可選項)

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

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

 

添加Devices:

“Tools”-“Options”-“Devices”

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

 


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

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

 

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

 
點擊"Do Not Encrypt Key File"。

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

 點擊 Apply

 

添加工具集:

“Tools”-“Options”-“Kits”

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

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

 

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

SFTP initialization failed: Server could not start SFTP subsystem.

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

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

 

 

測試

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

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章