加入星計劃,您可以享受以下權益:

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

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

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

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

 

1 tslib編譯

tslib之前在測試觸摸屏的時候使用過,這里再來記錄一下編譯過程。

下載tslib庫的源碼:https://github.com/libts/tslib/tags

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

tar xvf tslib-1.21.tar.bz2

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

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

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

./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會將編譯成果復制到指定的tslib目錄中:

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

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文件

這個文件默認的內容是:

#
# 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 配置編譯選項

查看編譯選項,輸入./configure -help 指令,查看可配置選項

./configure -help

可以看到配置項有很多,因此可以使用一個配置腳本來進行配置。

編寫一個autoconfigure.sh文件,然后根據自己的情況,寫入如下配置:

./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相關庫文件路徑。

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

-opensource:構建Qt的開源版本

-release:使用release版本的Qt

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

-skip qt3d:跳過Qt的3d

-make libs:編譯要用到的庫

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

-nomake tools:不生成Qt的工具

-no-openssl:不使用openssl

 

2.4 編譯

配置前需要先安裝 g++

sudo apt-get install g++

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

chmod +x autoconfigure.sh
./autoconfigure.sh

運行完成之后:

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

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

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

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

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

2.5 編譯出錯的問題

make編譯時可能會遇到編譯出錯

  • 情況1:我遇到過下面這種:

這種情況是因為我的ubuntu虛擬機空間不夠用了,解決方法就是給虛擬器擴容,具體操作過程見:VirtualBox虛擬機Ubuntu擴容記

  • 情況2:編譯最新版本的QT源碼報錯

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

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

3.1 復制tslib和Qt的編譯文件

將之前打包的arm-tslib.tar.bz2和arm-qt.tar.bz2壓縮包復制到板子中,可以先復制到nfs網絡位置,然后解壓到/usr/lib 目錄下,解壓后開刪除無用的壓縮包。

這是對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復制與解壓過程類似。

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

編輯/etc/profile,寫入如下內容:

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運行測試

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

這是運行其中的一個程序:

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

相關推薦

電子產業(yè)圖譜

控制科學與工程碩士,日常分享單片機、嵌入式、C/C++、Linux等學習經驗干貨~