最近剛入手一款開發板(比較低端,剛畢業工做還沒一個月,窮屌絲一個)。在學校之前都是用的是Friendly Arm的6410,使用的qt版本是使用的最多的4.7.0版本,入手的板子是4.7.4。qt5出來也有好長的時間了,其中提供了不少的特性,因此此次移植的是qt5的最新版本5.3.1。linux
第一步準備好源碼包,這裏須要qt的源碼包,和tslib包,tslib我使用的是開發板提供的包。sql
設置交叉編譯環境,我使用的是friendly arm的交叉工具。將其加到PATH中。架構
而後看看是否是已經安裝成功。工具
編譯tslib,相關的資料能夠找資料,這邊就再也不贅述了。
ui
我把qt源碼包解壓到~/software文件夾下,重命名爲qte-5.3.1。咱們是在arm板上移植,須要知道芯片的架構。個人是arm9,其架構是armv5te。咱們進入/home/zhou/software/qte-5.3.1/qtbase/mkspecs/linux-arm-gnueabi-g++目錄下,須要修改qmake.conf文件。以下spa
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
//添加的內容
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE +=-O2 -march=armv5te
QMAKE_CXXFLAGS_RELEASE +=-O2 -march=armv5te
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
//添加的內容
QMAKE_INCDIR += /home/zhou/software/tslib1.4-icool2416-v1.0/_install/usr/include
QMAKE_LIBDIR += /home/zhou/software/tslib1.4-icool2416-v1.0/_install/usr/lib
# modifications to g++.conf
QMAKE_CC = arm-linux-gcc//這邊須要根據你安裝來設計,個人是arm-linux-xx
QMAKE_CXX = arm-linux-g++
QMAKE_LINK = arm-linux-g++
QMAKE_LINK_SHLIB = arm-linux-g++
# modifications to linux.conf
QMAKE_AR = arm-linux-ar cqs
QMAKE_OBJCOPY = arm-linux-objcopy
QMAKE_NM = arm-linux-nm -P
QMAKE_STRIP = arm-linux-strip
load(qt_config)
插件
板子比較低端,只能使用framebuffer,若是支持opengl es,可使用eglfs。qt5將顯示都作成了插件形式,這提供了更多的靈活性,詳細的內容能夠去看qt5的文檔。debug
我編譯使用的腳本設計
#!/bin/sh
echo 'build Qt5 for embedded linux Author Zhou Xiang'
mkdir _install
$PWD/configure -v \
-prefix $PWD/_install \
-release \
-make libs \
-xplatform linux-arm-gnueabi-g++ \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-libjpeg \
-qt-zlib \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-nis \
-no-cups \
-no-glib \
-no-xcursor -no-xfixes -no-xrandr -no-xrender \
-no-separate-debug-info \
-nomake examples -nomake tools
make && make installunix
你能夠詳細的根據本身的須要配置,其實大部分的配置我都沒看過。在qte-5.3.1文件夾下運行這個腳本就行。
而後將_install文件夾下的lib,plugin和include拷貝到你想放置的地方,我放置在opt/qte-5.3.1下。tslib生成usr文件夾,我直接拷貝到arm板的根目錄下。對/etc/profile進行配置,以下
export TSLIB_ROOT=/usr
export QT_ROOT=/opt/qte-5.3.1
export TSLIB_TSDEVICE=/dev/touchscreen
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/usr/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib
export QWS_MOUSE_PROTO=tslib:/dev/touchscreen
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$LD_LIBARAY_PATH
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export LD_PRELOAD=/usr/lib/preloadable_libiconv.so:$TSLIB_ROOT/lib/libts.so
export QT_QPA_GENERIC_PLUGINS=tslib
配置ts.conf,若是像我這樣,其在/usr/ect目錄下
module_raw input
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear
這樣咱們就配置好了。
下面就是交叉編譯咱們的項目,其實很簡單,就是用qte-5.3.1/_install/bin/qmake一下,而後直接make就ok了。
一開試我運行程序./talkroom -platform linuxfb -plugin tslib老是報
Couldnt load module pthres
Error configuring
: No such file or directory
想了各類辦法,而後發現,是libts.so沒有加載,而後在LD_PRELOAD添加了
export LD_PRELOAD=/usr/lib/preloadable_libiconv.so:$TSLIB_ROOT/lib/libts.so,正常了。
qt5.3.1比較爲客戶着想,其將窗體邊框去了,並且屏幕上沒有鼠標的光標了,更加想提供給觸摸屏是使用。
第二張圖是點擊的,其得到了焦點。