本文基于I.MX6ULL芯片的Linux開發板,介紹如何在嵌入式Linux開發板上配置Qt運行環境,并運行Qt程序進行測試
1.?tslib編譯
要想Qt支持觸摸就需要編譯tslib,以生成觸摸相關插件。tslib多用于嵌入式系統中,是基本的觸摸插件
Ubuntu工具安裝:防止編譯tslib過程中出錯
?
sudo?apt-get?install?autoconf sudo?apt-get?install?automake sudo?apt-get?install?libtool
?
獲取tslib源碼:源碼下載完成后,將壓縮包拷貝到Ubuntu中解壓
下載地址:https://github.com/libts/tslib/tags
?
tar?-vxjf?tslib-1.21.tar.bz2
?
編譯tslib:將交叉編譯工具與tslib編譯結果存放到當前目錄下的arm-tslib文件夾中
?
//如報錯,可切換到root用戶下執行以下命令 cd?tslib-1.21/???????//進入?tslib?源碼目錄 ./autogen.sh?????????//執行autogen.sh生成Makefile ./configure?--host=arm-linux-gnueabihf? ac_cv_func_malloc_0_nonnull=yes?--cache-file=arm-linux.cache? -prefix=/home/andyxi/linux/tool/tslib-1.21/arm-tslib make?????????????????//編譯 make?install?????????//安裝
?
--host 參數用于指定編譯器;
-prefix 參數用于指定編譯完后的tslib文件安裝到哪里
完成后make install會將編譯成果復制到arm-tslib文件夾中,將arm-tslib文件夾整個打包為arm-tslib.tar.bz2文件,以備后面移植時開發板使用
?
tar?-jcf?arm-tslib.tar.bz2?arm-tslib
?
2.?Qt源碼編譯
2.1?下載Qt5.12.9源碼
? 下載地址:https://download.qt.io/archive/qt/5.12/5.12.9/single/
將下載好的qt-everywhere-src-5.12.9.tar.xz拷貝到Ubuntu中,然后解壓:
tar?-xvf?qt-everywhere-src-5.15.2.tar.xz
?
2.2?修改qmake.conf
進入解壓后的文件夾qt-everywhere-src-5.15.2,修改qtbase/mkspecs/linux-arm-gnueabi-g++/文件夾下的qmake.conf文件,修改后的內容如下:
?
# #?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?+=?-O2?-march=armv7-a?-mtune=cortex-a7?-mfpu=neon?-mfloat-abi=hard QMAKE_CXXFLAGS?+=?-O2?-march=armv7-a?-mtune=cortex-a7?-mfpu=neon?-mfloat-abi=hard ######################?添加的部分:結束?###################### include(../common/linux.conf) include(../common/gcc-base-unix.conf) include(../common/g++-unix.conf) #########?將下面所有的?arm-linux-gnueabi?修改為?arm-linux-gnueabihf?######### #?modifications?to?g++.conf QMAKE_CC????????????????=?arm-linux-gnueabihf-gcc QMAKE_CXX???????????????=?arm-linux-gnueabihf-g++ QMAKE_LINK??????????????=?arm-linux-gnueabihf-g++ QMAKE_LINK_SHLIB????????=?arm-linux-gnueabihf-g++ #?modifications?to?linux.conf QMAKE_AR????????????????=?arm-linux-gnueabihf-ar?cqs QMAKE_OBJCOPY???????????=?arm-linux-gnueabihf-objcopy QMAKE_NM????????????????=?arm-linux-gnueabihf-nm?-P QMAKE_STRIP?????????????=?arm-linux-gnueabihf-strip load(qt_config)
?
2.3?配置編譯選項
查看編譯選項,輸入./configure -help指令,查看可配置選項。由于配置項有很多,因此可以使用一個配置腳本來進行配置。編寫一個autoconfigure.sh文件,然后根據自己的情況,寫入如下配置:
?
./configure?-prefix?/home/andyxi/linux/qt/qt-everywhere-src-5.12.9/arm-qt? -opensource? -confirm-license? -release? -strip? -shared? -xplatform?linux-arm-gnueabi-g++? -optimized-qmake? -c++std?c++11? --rpath=no? -pch? -skip?qt3d? -skip?qtactiveqt? -skip?qtandroidextras? -skip?qtcanvas3d? -skip?qtconnectivity? -skip?qtdatavis3d? -skip?qtdoc? -skip?qtgamepad? -skip?qtlocation? -skip?qtmacextras? -skip?qtnetworkauth? -skip?qtpurchasing? -skip?qtremoteobjects? -skip?qtscript? -skip?qtscxml? -skip?qtsensors? -skip?qtspeech? -skip?qtsvg? -skip?qttools? -skip?qttranslations? -skip?qtwayland? -skip?qtwebengine? -skip?qtwebview? -skip?qtwinextras? -skip?qtx11extras? -skip?qtxmlpatterns? -make?libs? -make?examples? -nomake?tools?-nomake?tests? -gui? -widgets? -dbus-runtime? --glib=no? --iconv=no? --pcre=qt? --zlib=qt? -no-openssl? --freetype=qt? --harfbuzz=qt? -no-opengl? -linuxfb? --xcb=no? -tslib? --libpng=qt? --libjpeg=qt? --sqlite=qt? -plugin-sql-sqlite? -I/home/andyxi/linux/tool/tslib-1.21/arm-tslib/include? -L/home/andyxi/linux/tool/tslib-1.21/arm-tslib/lib? -recheck-all
?
其中三處配置路徑需要修改:
-prefix?參數用于指定編譯輸出路徑
-I?參數用于指定tslib頭文件路徑
-L?參數用于指定tslib相關庫文件路徑
2.4?源碼編譯
賦予配置腳本autoconfigure.sh可執行權限,然后執行
?
sudo?apt-get?install?g++?? #配置前請先安裝g++,如已安裝可忽略 chmod?+x?autoconfigure.sh ./autoconfigure.sh?
?
配置腳本運行完成之后,就可以進行編譯和安裝了,大約需要十幾到幾十分鐘
?
make make?install?#安裝
?
編譯安裝完成后就可以看到arm-qt文件中的內容了,將arm-qt文件夾打包為arm-qt.tar.bz2文件,以備移植開發板時使用
?
tar?-jcf?arm-qt.tar.bz2?arm-qt
?
3.?開發板上配置Qt環境
3.1?移植tslib到文件系統
將之前打包的arm-tslib.tar.bz2壓縮包復制到開發板的/usr/lib目錄下,解壓后刪除無用的壓縮包
?
cp?arm-tslib.tar.bz2?/home/andyxi/linux/nfs/rootfs/usr/lib cd?/home/andyxi/linux/nfs/rootfs/usr/lib tar?xf?arm-tslib.tar.bz2 rm?arm-tslib.tar.bz2?
?
設置開發板的環境變量,在/etc/profile文件中配置tslib的環境變量,添加如下內容
?
export?TSLIB_ROOT=/usr/lib/arm-tslib export?TSLIB_CONSOLEDEVICE=none export?TSLIB_FBDEVICE=/dev/fb0 export?TSLIB_TSDEVICE=/dev/input/event1 export?TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf export?TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts export?TSLIB_CALIBFILE=/etc/pointercal export?LD_PRELOAD=$TSLIB_ROOT/lib/libts.so
?
測試tslib功能
?
source?/etc/profile??#使能環境變量,若重啟過開發板可忽略此步驟 #運行?ts_test?測試觸摸是否正常 /usr/lib/arm-tslib/bin/ts_test?
?
3.2?移植Qt到文件系統
將之前打包的arm-qt.tar.bz2壓縮包復制到開發板的/usr/lib目錄下,解壓后刪除無用的壓縮包
?
cp?arm-qt.tar.bz2?/home/andyxi/linux/nfs/rootfs/usr/lib cd?/home/andyxi/linux/nfs/rootfs/usr/lib tar?xf?arm-qt.tar.bz2 rm?arm-qt.tar.bz2?
?
設置開發板的環境變量,在/etc/profile文件中配置Qt5的環境變量,添加如下內容
?
export?QT_ROOT=/usr/lib/arm-qt? export?QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1? export?QT_QPA_FONTDIR=/usr/share/fonts? export?QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins? export?QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0? export?QT_PLUGIN_PATH=$QT_ROOT/plugins? export?LD_LIBRARY_PATH=$QT_ROOT/lib:$QT_ROOT/plugins/platforms? export?QML2_IMPORT_PATH=$QT_ROOT/qml? export?QT_QPA_FB_TSLIB=1
?
4. Qt運行測試
Qt的編譯文件中,自帶了Qt的一些例子,可先在板子上運行這些例子看看Qt程序能否能在板子上正常運行,運行其中的一個程序:
?
source?/etc/profile??#使能環境變量,若重啟過開發板可忽略此步驟 #運行編譯的示例 ./usr/lib/arm-qt/examples/widgets/animation/animatedtiles/animatedtiles
?
?
如果示例程序可以正常運行,說明開發板上的Qt運行環境配置成功。
評論
查看更多