加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶(hù)
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 1 tslib編譯
    • 2 Qt源碼編譯
    • 3 開(kāi)發(fā)板上配置Qt環(huán)境
    • 4 Qt運(yùn)行測(cè)試
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

嵌入式Linux-Qt環(huán)境搭建

2022/08/01
2094
閱讀需 16 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

本編介紹如何在嵌入式Linux開(kāi)發(fā)板上配置Qt運(yùn)行環(huán)境,并進(jìn)行Qt程序運(yùn)行測(cè)試。

 

1 tslib編譯

tslib之前在測(cè)試觸摸屏的時(shí)候使用過(guò),這里再來(lái)記錄一下編譯過(guò)程。

下載tslib庫(kù)的源碼:https://github.com/libts/tslib/tags

將下載的源碼拷貝到ubuntu虛擬機(jī)中,然后解壓:

tar xvf tslib-1.21.tar.bz2

編譯 tslib 的時(shí)候需要先在 ubuntu 中安裝一些文件:

sudo apt-get install autoconf 
sudo apt-get install automake 
sudo apt-get install libtool

在 ubunt中創(chuàng)建一個(gè)名為“tslib”的目錄存放編譯結(jié)果,然后執(zhí)行以下指令進(jìn)行編譯:

./configure --host=arm-linux-gnueabihf ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/home/xxpcb/myTest/imx6ull/otherlib/tslib-2/tslib

make
make install

編譯完成后,make install會(huì)將編譯成果復(fù)制到指定的tslib目錄中:

將tslib文件夾先整個(gè)打包為arm-tslib.tar.bz2文件,后面移植到開(kāi)發(fā)板時(shí)用:

tar -jcf arm-tslib.tar.bz2 tslib

2 Qt源碼編譯

2.1 下載Qt5的源碼

下載地址:https://download.qt.io/archive/qt/5.15/5.15.2/single/

將下載的qt-everywhere-src-5.15.2.tar.xz拷貝到Ubuntu中,然后解壓:

tar -xvf qt-everywhere-src-5.15.2.tar.xz

 

2.2 修改qmake.conf

修改qtbase/mkspecs/linux-arm-gnueabi-g++/中的qmake.conf文件

這個(gè)文件默認(rèn)的內(nèi)容是:

#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
QMAKE_CC                = arm-linux-gnueabi-gcc
QMAKE_CXX               = arm-linux-gnueabi-g++
QMAKE_LINK              = arm-linux-gnueabi-g++
QMAKE_LINK_SHLIB        = arm-linux-gnueabi-g++

# modifications to linux.conf
QMAKE_AR                = arm-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = arm-linux-gnueabi-objcopy
QMAKE_NM                = arm-linux-gnueabi-nm -P
QMAKE_STRIP             = arm-linux-gnueabi-strip
load(qt_config)

修改成如下:

 

2.3 配置編譯選項(xiàng)

查看編譯選項(xiàng),輸入./configure -help 指令,查看可配置選項(xiàng)

./configure -help

可以看到配置項(xiàng)有很多,因此可以使用一個(gè)配置腳本來(lái)進(jìn)行配置。

編寫(xiě)一個(gè)autoconfigure.sh文件,然后根據(jù)自己的情況,寫(xiě)入如下配置:

./configure -prefix /home/xxpcb/myTest/imx6ull/otherlib/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/xxpcb/myTest/imx6ull/otherlib/tslib-2/tslib/include \
-L/home/xxpcb/myTest/imx6ull/otherlib/tslib-2/tslib/lib \
-recheck-all

注意其中3處是自己的配置路:

1 /home/xxpcb/myTest/imx6ull/otherlib/qt/qt-everywhere-src-5.12.9/arm-qt 為編譯輸出路徑。

2 /home/xxpcb/myTest/imx6ull/otherlib/tslib-2/tslib/include 為tslib 頭文件路徑。

3 /home/xxpcb/myTest/imx6ull/otherlib/tslib-2/tslib/lib 為tslib相關(guān)庫(kù)文件路徑。

其它一些參數(shù)的含義:

-opensource:構(gòu)建Qt的開(kāi)源版本

-release:使用release版本的Qt

-xplatform linux-arm-gnueabi-g++:指定編譯器

-skip qt3d:跳過(guò)Qt的3d

-make libs:編譯要用到的庫(kù)

-make examples:編譯生成Qt的例程代碼

-nomake tools:不生成Qt的工具

-no-openssl:不使用openssl

 

2.4 編譯

配置前需要先安裝 g++

sudo apt-get install g++

賦予腳本可執(zhí)行權(quán)限,然后執(zhí)行 autoconfigure.sh

chmod +x autoconfigure.sh
./autoconfigure.sh

運(yùn)行完成之后:

然后就可以執(zhí)行make指令進(jìn)行編譯了。

編譯大約需要十幾到幾十分鐘。

編譯完成之后,再執(zhí)行make install進(jìn)行安裝,安裝之后就可以看到arm-qt文件中的內(nèi)容了:

將qrm-qt文件夾先整個(gè)打包為arm-qt.tar.bz2文件,后面移植到開(kāi)發(fā)板時(shí)用:

tar -jcf arm-qt.tar.bz2 arm-qt

2.5 編譯出錯(cuò)的問(wèn)題

make編譯時(shí)可能會(huì)遇到編譯出錯(cuò)

  • 情況1:我遇到過(guò)下面這種:

這種情況是因?yàn)槲业膗buntu虛擬機(jī)空間不夠用了,解決方法就是給虛擬器擴(kuò)容,具體操作過(guò)程見(jiàn):VirtualBox虛擬機(jī)Ubuntu擴(kuò)容記

  • 情況2:編譯最新版本的QT源碼報(bào)錯(cuò)

使用Qt最新版本5.15.2編譯報(bào)錯(cuò),暫未找到解決方法,所以我先用5.12.9版本的Qt。

3 開(kāi)發(fā)板上配置Qt環(huán)境

3.1 復(fù)制tslib和Qt的編譯文件

將之前打包的arm-tslib.tar.bz2和arm-qt.tar.bz2壓縮包復(fù)制到板子中,可以先復(fù)制到nfs網(wǎng)絡(luò)位置,然后解壓到/usr/lib 目錄下,解壓后開(kāi)刪除無(wú)用的壓縮包。

這是對(duì)arm-qt的操作步驟:

cp arm-qt.tar.bz2 ~/myTest/nfs/rootfs/usr/lib
cd ~/myTest/nfs/rootfs/usr/lib/
tar xf arm-qt.tar.bz2
rm arm-qt.tar.bz2

arm-tslib復(fù)制與解壓過(guò)程類(lèi)似。

3.2 設(shè)置開(kāi)發(fā)板的環(huán)境變量

編輯/etc/profile,寫(xiě)入如下內(nèi)容:

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

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

然后使該配置立即生效:

source /etc/profile

4 Qt運(yùn)行測(cè)試

Qt的編譯文件中,自帶的Qt的一些例子,可以先來(lái)在板子上運(yùn)行這些例子看看Qt程序能否在板子上正常運(yùn)行。

這是運(yùn)行其中的一個(gè)程序:

/usr/lib/arm-qt/examples/widgets/animation/animatedtiles/animatedtiles

相關(guān)推薦

電子產(chǎn)業(yè)圖譜