QT移植arm_linux教程

Qt 是一個1991年由奇趣科技開發的跨平臺C++圖形用戶界面應用程序開發框架。它既可以開發GUI程序,也可用於開發非GUI程序,比如控制檯工具和服務器。Qt是面向對象的框架,使用特殊的代碼生成擴展(稱爲元對象編譯器(Meta Object Compiler, moc))以及一些宏,易於擴展,允許組件編程。

2008年,奇趣科技被諾基亞公司收購,QT也因此成爲諾基亞旗下的編程語言工具。2012年,Qt被Digia收購。2014年4月,跨平臺集成開發環境Qt Creator 3.1.0正式發佈,實現了對於iOS的完全支持,新增WinRT、Beautifier等插件,廢棄了無Python接口的GDB調試支持,集成了基於Clang的C/C++代碼模塊,並對Android支持做出了調整,至此實現了全面支持iOS、Android、WP。

可以說,Qt 同 Linux 系統 X Window 上的 Motif、Openwin、GTK 等圖形界面庫,以及Windows 平臺上的 MFC、OWL、VCL、ATL是同類型的東西。

Qt的移植包括步驟如下:

  1. 下載新版qt;
  2. 編譯tslib;
  3. 編譯qt;
  4. 配置編譯後的qt,以便在主機上用qmake編譯適用目標板的qt應用;
  5. 拷貝lib文件到目標板。

1 下載 tslib 和 Qt

Tslib是一個開源的程序,能夠爲觸摸屏驅動獲得的採樣提供諸如濾波、去抖、校準等功能,通常作爲觸摸屏驅動的適配層,爲上層的應用提供了一個統一的接口。在採用觸摸屏的移動終端中,觸摸屏性能的調試是個重要問題之一,因爲電磁噪聲的緣故,觸摸屏容易存在點擊不準確、有抖動等問題。

tslib

 

2 環境準備

安裝automake、libtool 和主機上的 Qt 工具:

$ sudo apt-get install automake autoconf libtool m4
$ sudo apt-get install libX11-dev libXext-dev libXtst-dev libXrender-dev 
$ sudo apt-get install libqt4-core libqt4-dev libqt4-webkit qt4-demos

如果還沒有交叉編譯器的路徑添加到PATH,要先把該路徑添加到PATH中,本例使用的交叉編譯器的路徑爲 /usr/local/arm-2010q1/bin(一定要指定自己目標板的交叉編譯器路徑),則執行以下命令:

$ export PATH=$PATH:/usr/local/arm-2010q1/bin

 

3 編譯tslib

(1)建立工作目錄

$ cd ~
$ sudo mkdir /usr/local/tslib
$ sudo mkdir /usr/local/qt4.8.5-arm
$ mkdir qt
$ cd qt

(2)編譯安裝tslib

將下載的tslib源碼複製到工作目錄,並解壓:

$ unzip tslib-master.zip
$ cd tslib-master

(3)編譯

配置tslib,安裝路徑可以通過 --prefix 參數設置,這裏安裝到 /usr/local/tslib:

$ ./autogen.sh
$ ./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ --host=arm-none-linux-gnueabi  --prefix=/usr/local/tslib ac_cv_func_malloc_0_nonnull=yes

編譯安裝:

$ make
$ sudo make install

完成後,tslib會按安裝到主機 /usr/local/tslib 目錄下。
進入下一步之前,先將主機中 /usr/local/tslib/etc/ts.conf 文件第二行“#module_raw input”的註釋去掉,變爲“module_raw input”,注意一定要頂格。

 

4 編譯安裝qt

(1)解壓

$ cd ~/qt-arm
$ cp qt-everywhere-opensource-src-4.8.5.tar.bz2 ./
$ tar xjvf qt-everywhere-opensource-src-4.8.5.tar.bz2
$ cd qt-everywhere-opensource-src-4.8.5

(2)指定交叉編譯器

打開解壓目錄下的mkspecs/qws/linux-arm-g++/qmake.conf:

 $ vi mkspecs/qws/linux-arm-g++/qmake.conf

用vi打開qmake.conf 後,將arm-linux-全部替換 arm-none-linux-gnueabi-(注意:根據自己板子而定,並且一定要先將交叉編譯器的路徑加入PATH變量中),並加上-lts,然後保存退出,更改後如下:

# modifications to g++.conf
QMAKE_CC = arm-none-linux-gnueabi-gcc -lts
QMAKE_CXX = arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK = arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++ -lts
# modifications to linux.conf
QMAKE_AR = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy
QMAKE_STRIP = arm-none-linux-gnueabi-strip

(3)配置Qt
如下,先通過 --prefix 指定qt安裝的路徑,-I後面指定上一步tslib的include路徑,-L後面指定上一步tslib的lib路徑,

$ sudo mkdir /usr/local/qt4.8.5-arm
$ sudo ./configure --prefix=/usr/local/qt4.8.5-arm -opensource -release -shared -Declarative -importdir /opt/imports -fast -no-largefile -qt-sql-sqlite -qt3support -exceptions -xmlpatterns -no-glib -no-phonon -no-mmx -no-3dnow -no-sse -no-sse2 -svg -no-webkit -qt-zlib -qt-libtiff -qt-libpng -qt-libjpeg -make libs -make tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -iconv -no-dbus -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths 16,24,32 -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-kbd-qvfb -armfpa -no-mouse-qvfb -qt-mouse-linuxtp -qt-mouse-tslib -DQT_QLOCALE_USES_FCVT -DQT_NO_QWS_CURSOR -no-pch -I/usr/local/tslib/include -L/usr/local/tslib/lib -confirm-license

可以執行./configure --help查看參數的詳細說明,根據需要來配置合適的參數
如果配置的時候提示:

The tslib functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR and QMAKE_LIBDIR in
/home/veryarm/qt/qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-arm-g++.

說明找不到合適的交叉編譯工具,請重新設置PATH環境變量。如果還是不能解決,再修改mkspecs/qws/linux-arm-g++/qmake.conf,將交叉編譯工具改爲絕對路徑,如下:

# modifications to g++.conf
QMAKE_CC = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-gcc -lts
QMAKE_CXX = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-g++ -lts
QMAKE_LINK = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-g++ -lts
QMAKE_LINK_SHLIB = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-g++ -lts

# modifications to linux.conf
QMAKE_AR = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-objcopy
QMAKE_STRIP = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-strip

(4)編譯安裝

$ sudo make
$ sudo make install

完成後,qt4.8.5即會安裝到主機/usr/local/qt4.8.5-arm目錄下。

 

5 配置主機Qt

以便在主機上用 qmake 編譯嵌入式qt應用

(1)設置環境變量
在主機(如Ubuntu)當前終端下執行以下命令:

$ export PATH=$PATH:/usr/local/qt4.8.5-arm/bin
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/qt4.8.5-arm/lib

或將以上命令添加到/etc/profile 文件中,這樣系統登錄時就自動設置好這些環境變量。

 

6 移植Qt到開發板

開發板上要使用的東西就2個,一個是編譯後的tslib,一個是編譯後qt目錄下的lib目錄。如下步驟將這兩個目錄拷貝到開發板上。
(1)打包lib
我們Qt 安裝完成之後,爲解決符號鏈接的問題,可以利用先打包,然後直接解壓到開發板的做法:

$ cd /usr/local/qt4.8.5-arm
$ tar -zcf lib.tar.gz lib
$ cd /usr/local
$ tar -zcf tslib.tar.gz tslib

將打包好的壓縮文件 lib.tar.gz 和 tslib.tar.gz 複製到開發板,然後解壓:

$ mkdir -p /usr/local/qt4.8.5-arm
$ tar xzvf lib.tar.gz -C /usr/local/qt4.8.5-arm
$ tar xzvf tslib.tar.gz -C /usr/loacal

(2)設置開發板上的環境變量

在目標板上新建一個名爲 setqtenv 的文件,

$ vi setqtenv

並加入以下內容:

export LD_LIBRARY_PATH=/lib:$LD_LIBRARY_PATH
export QTDIR=/usr/local/qt4.8.5-arm
export T_ROOT=/usr/local/tslib
export PATH=$T_ROOT/bin:$PATH
export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib:$LD_LIBRARY_PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
export QWS_KEYBOARD=USB:/dev/input/event1
export QWS_MOUSE_PROTO=Tslib:/dev/ input/event0
export QT_QWS_FONTDIR=$QTDIR/lib/fonts

執行以下命令設置好qt環境變量的設置:

$ source setqtenv
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章