1. 程式人生 > >QT5.7交叉編譯安裝到arm

QT5.7交叉編譯安裝到arm

以下采用的系統為ubuntu16.04,開發板為迅為iTOP4412,4.3寸屏。
下載qt5.7原始碼qt-everywhere-opensource-src-5.7.0.tar.xz
http://www.download3k.com/Install-Qt.html

下載ARM交叉編譯工具arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
http://www.veryarm.com/arm-none-linux-gnueabi-gcc

arm交叉編譯器arm-2014的安裝

將“arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2”解壓到Ubuntu 系統的資料夾“/usr/local/arm”中。
然後修改環境變數,切換到home目錄,然後輸入命令“vim .bashrc”,開啟設定環境變數的檔案“.bashrc”,將環境變數修改為“export PATH=$PATH:/usr/local/arm/arm-2014.05/bin”
儲存退出,然後更新一下環境變數,輸入命令“source .bashrc”。

source .bashrc

接著測試一下,編譯器路徑設定的對不對。如下圖,在Ubuntu 命令列中輸入命令”arm”,
然後按鍵盤”Tab”,出現編譯器“arm-none-linux-gnueabi-gcc-4.8.2”,這就說明編譯
器路徑設定正確。

交叉編譯tslib1.4

對觸控式螢幕訊號的獲取、校正、濾波處理,均採用開源的tslib,本文采用的tslib版本為最新的tslib1.4(可以從本文提供的連結中下載tslib1.4)。
1.將下載好的tslib1.4拷貝到/home/lz/transplant目錄下(可以根據自己的系統選擇某一目錄),然後執行解壓縮命令

tar -vxf tslib-1.4
.tar.gz

切換到tslib目錄:

cd tslib

安裝交叉編譯tslib必須的一些工具(可以先檢視是否已安裝,ubuntu16.04自帶這些工具,可跳過)

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

2.利用指令碼寫編譯過程
在tslib資料夾下新建檔案configTslib14.sh

vi configTslib14.sh

內容如下:

#!/bin/sh
make clean && make distclean
echo
"ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache CC=/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/opt/tslib1.4 --cache-file=arm-linux.cache make && make install

然後執行configTslib14.sh

./configTslib14.sh

執行結束後,我們檢視一下是否安裝成功,執行命令:

ls /opt/tslib1.4

如果出現bin,etc,include,lib這4個目錄,如下圖所示,說明交叉編譯並安裝tslib成功。
這裡寫圖片描述

交叉編譯QT5.7.0

將下載的qt-everywhere-opensource-src-5.7.0.tar.gz執行如下命令解壓:

tar -vxf qt-everywhere-opensource-src-5.7.0.tar.gz
cd qt-everywhere-opensource-src-5.7.0

修改交叉編譯架構用到的資訊:

gedit 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 = linux #eglfs
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a

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

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

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

建立一個指令碼檔案,用於生成Makefile,執行命令

gedit autoConfigure.sh

輸入下面內容並儲存:

#!/bin/sh
./configure \
-v \
-prefix /opt/qt-5.7.0 \
-release \
-opensource \
-no-accessibility
-make libs \
-xplatform linux-arm-gnueabi-g++ \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-zlib \
-tslib \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-nis \
-no-cups \
-no-glib \
-no-pkg-config \
-no-separate-debug-info \
-I/opt/tslib1.4/include -L/opt/tslib1.4/lib

其中-prefix /opt/qt-5.7.0代表我們編譯完QT5.4.1後要安裝地址;-tslib代表QT對觸控板的支援,-I 和 -L後面分別為為第一步編譯tslib的include和lib的安裝目錄。
執行命令:

chmod 777 qt.configure.sh
./autoConfigure.sh

上述命令自動生成Makefile檔案。
執行命令啟動編譯:

make

編譯大概2個小時。
編譯結束後,執行安裝命令:

sudo make install

我們切換到目標目錄下看看是否安裝成功:

cd /opt/qt-5.7.0
ls

如圖所示:

將/opt/qt-5.7.0和/opt/tslib1.4 拷貝到開發板的檔案系統中對應的目錄中。

設定QT的交叉編譯環境

安裝qtcreator
進入qtcreator開發環境
在選單中選擇Tools——Options,在彈出的對話方塊中,選擇Build & Run,選擇標籤Compilers,按下圖設定,選擇C++交叉編譯器,如下圖所示:
這裡寫圖片描述

切換到Qt Versions標籤,點選“Add”按鈕,選擇qmake,如圖所示:
這裡寫圖片描述

選擇完成,按“OK”按鈕,設定如圖所示:
切換到Kits標籤,點選“Add”按鈕,然後設定如下圖所示:
這裡寫圖片描述

在4412開發板上配置tslib並交叉編譯一個能夠在4412開發板上執行的QT應用程式

把字型檔Ubuntu_L.ttf 等字型檔拷貝到 /opt/qt-5.7.0/lib/fonts

在開發板串列埠命令視窗中輸入:

vi /etc/profile

如下圖所示:
這裡寫圖片描述
將其修改為以下內容

export TSLIB_ROOT=/opt/tslib1.4
export QT_ROOT=/opt/qt-5.7.0   
export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_TSEVENTTYPE=input         
export TSLIB_CONFFILE=/opt/tslib1.4/etc/ts.conf
export TSLIB_PLUGINDIR=/opt/tslib1.4/lib/ts    
export TSLIB_CONSOLEDEVICE=none                
export TSLIB_FBDEVICE=/dev/fb0             
export QWS_MOUSE_PROTO=tslib:/dev/input/event2
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib:$TSLIB_ROOT/lib/
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 QT_QPA_GENERIC_PLUGINS=tslib

儲存退出,執行命令(一定要執行,否則可能報錯):

source /etc/profile

然後在串列埠命令窗中輸入 vi /opt/tslib1.4/etc/ts.conf 來配置觸控式螢幕
這裡寫圖片描述
把第二行的註釋去掉,把ts設定成輸入模式(注意把前面的空格也去掉)
這裡寫圖片描述

下面編寫測試程式來測試開發板上
開啟qtcreator,新建專案,拖幾個按鈕上去,如下圖所示
這裡寫圖片描述
編譯得到可執行程式untitled,檢視一下,可以看到其資訊顯示為arm平臺,如下圖所示
這裡寫圖片描述

將untitled拷貝到開發板中檔案系統的/bin目錄,執行該程式。

[root@iTOP-4412]# /bin/untitled 

看一下板子:
這裡寫圖片描述