準備工作
開發環境說明
本文使用的ARM 編譯器安裝於:/usr/local/arm/3.4.1
本文使用的ARM 檔案系統設定置於:/home/flykof/root
Qtopia在ARM Linux系統下安裝的路徑:/opt/Qtopia
編譯之前請先確認arm toolchain的執行檔目錄已經加入PATH變數中,若無請先執行以下命令將toolchain執行檔路徑加入PATH
#export PATH=/usr/local/arm/3.4.1/bin:$PATH (將ARM toolchain加入PATH) |
使用的軟體
1. zlib-1.2.3.tar.gz:檔案壓縮函示庫
2. tslib-1.3.tar.bz2:觸控裝置驅動函示庫,本文使用的指標裝置為觸控螢幕,需要使用此一函示庫
3. http://qtextended.org/:網站中下載Qtopia 4.3.3程式碼套件
4. zoneinfo.tar.gz:全球時區的資訊
5. arm-linux-gcc-3.4.1.tar.bz2:ARM Linux toolchain,已經加上編譯Qtopia的相關函示庫(包含zlib、tslib)。
編譯zlib
檔案壓縮是很常用的功能,Qtopia也會用到壓縮的函示庫,所以先將ARM toolchain加上zlib函示庫
#tar xvzf zlib-1.2.3.tar.gz
#cd zlib-1.2.3
#./configure --shared --prefix=/usr/local/arm/3.4.1/arm-linux
產生Makefile後,編輯Makefile,修改以下所列的變數設定,改成
CC=arm-linux-gcc
LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz.so.1
CPP=arm-linux-gcc -E
AR=arm-linux-ar rc
RANLIB=arm-linux-ranlib
存檔後離開
#make
#make install
完成ARM toolchain加上zlib的功能
編譯tslib
因為Qtopia會使用到tslib,所以先將tslib加入ARM Toolchain中,這樣才能編譯使用到tslib的程式碼
#tar jxf tslib-1.3.tar.bz2
#cd tslib-1.3
#./autogen.sh
#./configure --host=arm-linux --prefix=/usr/local/arm/3.4.1/arm-linux
產生Makefile後,修改檔案plugins/Makefile作以下設定值修改,找到以下這一行
LDFLAGS :=$(LDFLAGS) -rpath $(PLUGIN_DIR)
改成
LDFLAGS :=$(LDFLAGS) -rpath `cd $(PLUGIN_DIR) && pwd`
#make
#make install
安裝完成後會將tslib安裝於ARM toolchain,這樣ARM toolchain就可以編譯使用到tslib的程式。之後Qtopia會設定使用tslib作為指標的驅動函示庫, ARM toolchain才能順利編譯與連結tslib的函示庫。
安裝Qtopia
修改ARM Toolchain
首先ARM toolchain 3.4.1必須先作以下修改
#cp /usr/local/arm/3.4.1/
#vi arm-linux/include/linux/videodev2.h
在裡面加上一行
#define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') /* 8 BGBG.. GRGR.. */
儲存後退出
#vi arm-linux/sys-include/linux/videodev2.h
在裡面加上一行
#define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') /* 8 BGBG.. GRGR.. */
儲存後退出
編譯Qtopia
編譯與安裝Qtopia的步驟如下,首先必須先下載Qtopia的程式碼套件 qtopia-opensource-src-4.3.3.tar.gz
#tar xvzf qtopia-opensource-src-4.3.3.tar.gz
#mkdir build-qtopia (Qtopia要求編譯不可在Qtopia Source tree內,必須另建一個目錄作編譯)
開始建立Qtopia
#cd build-qtopia
# ../qtopia-opensource-4.3.3/configure -release -prefix=/opt/Qtopia -image=/home/flykof/_install/opt/Qtopia/ \
-xplatform linux-arm-g++ -arch arm -no-qvfb -displaysize 320x240 -no-modem \
-extra-qtopiacore-config '-release -xplatform qws/linux-arm-g++ -embedded arm -qconfig qpe -qt-sql-sqlite -depths 4,8,16,32 \
-qt-kbd-tty -qt-kbd-usb -no-mouse-linuxtp -qt-mouse-tslib -qt-gfx-transformed'
#make
#make install
Qtopia編譯參數說明
Qtopia程式碼套件主要分成3大部分,[Qt]、[Qtopia Core]、[Qtopia],本範例主要配置[Qtopia Core]、[Qtopia]兩大部分,以下說明配置用途。如果要瞭解完整的配置說明請參考Qtopia程式碼的 [doc/html] 目錄說明
[Qtopia配置]
-release |
指定編譯為release版本,不加入額外debug資訊 |
-prefix=/opt/Qtopia |
指定Qtopia執行時的絕對路徑,請設定ARM Linux啟動時Qtopia執行程式的路徑位置 |
-image=/home/flykof/_install/opt/Qtopia/ |
指定install時的路徑,指定路徑為編譯本機安裝Qtopia的路徑 |
-xplatform linux-arm-g++ |
交叉編譯,目標平台為 linux-arm-g++ |
-arch arm |
目標平台架構為 arm架構 |
-no-qvfb |
因為要在ARM平台上執行,就不用qvfb,如果您要在PC的X-window下跑Qtopia,才需要qvfb |
-displaysize 320x240 |
指定螢幕顯示解析度 |
-no-modem |
目標平台沒有接modem所以關閉modem功能 |
-extra-qtopiacore-config |
指定qtopia core的配置 |
[Qtopia Core配置]
-release |
指定編譯為release版本,不加入額外debug資訊 |
-xplatform qws/linux-arm-g++ |
交叉編譯,目標平台為 linux-arm-g++ |
-embedded arm |
目標平台架構為 arm架構 |
-qconfig qpe |
指定config配置,看程式碼說明文件 |
-qt-sql-sqlite |
sql 使用 sqlite引擎 |
-depths 4,8,16,32 |
指定bit-per-pixel |
-qt-kbd-tty |
加入keyboard支援,tty驅動 |
-qt-kbd-usb |
加入keyboard支援,usb驅動 |
-no-mouse-linuxtp |
去除mouse支援,linuxtp驅動 |
-qt-mouse-tslib |
加入mouse支援,tslib驅動 |
-qt-gfx-transformed |
加入螢幕旋轉設定功能 |
另外還有很多選項,請根據需求配置與修改,完整的配置說明請參考Qtopia程式碼目錄內的[doc/html/building-guide.html]檔案。
到此步驟完成Qtopia編譯與主要程式安裝,本文假設ARM filesystem根目錄在本機路徑為
/home/flykof/_install
Qtopia 執行時在ARM filesystem 的相對路徑為
/opt/Qtopia
到目前為止已經完成一半的安裝步驟,但Qtopia還不能正確執行,請繼續以下步驟。
複製函示庫檔
Qtopia執行時還需要用到許多Toolchain所提供的函示庫,所以我們也需將相關函示庫複製到ARM filesystem中,當Qtopia執行時才能動態連結這些函示庫。
#cd /usr/local/arm/3.4.1/arm-linux/lib (切換到toolchain的ARM函示庫目錄)
#cp -ax libdl* /home/flykof/_install/lib
#cp -ax libfreetype.so* /home/flykof/_install/lib
#cp -ax libpthread* /home/flykof/_install/lib
#cp -ax librt* /home/flykof/_install/lib
#cp -ax libstdc++.so* /home/flykof/_install/lib
#cp -ax libgcc_s.so* /home/flykof/_install/lib
#cp -ax libcrypt* /home/flykof/_install/lib
#cp -ax libz.so* /home/flykof/_install/lib
#rm -f /home/flykof/_install/lib/*a (刪除連結檔 ".a" 與 ".la",這些檔只有在連結時才會用到,執行時不用)
將下載的a href="zoneinfo.tar.gz">zoneinfo.tar.gz 解開成目錄zoneinfo (如果原目錄已經有zoneinfo請跳過這一步)
#mv zoneinfo /home/flykof/_install/usr/share (將全球時區資訊置於根目錄的 /usr/share 路徑下)
安裝tslib
之前已將tslib加到ARM toolchain,現在我們必須將tslib複製到ARM filesystem中,Qtopia執行時需要用到tslib相關的函示庫
#cd /usr/local/arm/3.4.1/arm-linux/lib (切換到toolchain的ARM函示庫目錄)
#cp -ax libts* /home/flykof/_install/lib
#cp -ax libm.so* /home/flykof/_install/lib (複製數學函示庫,libts會用到)
#cp -ax libm-* /home/flykof/_install/lib
#rm -f /home/flykof/_install/lib/*a (刪除連結檔 ".a" 與 ".la",這些檔只有在連結時才會用到,執行時不用)
#cd /usr/local/arm/3.4.1/arm-linux/bin (切換到toolchain的ARM bin目錄)
#cp -ax ts_calibrate /home/flykof/_install/bin (複製ts校正程式到ARM filesystem)
#cd /usr/local/arm/3.4.1/arm-linux/share (切換到toolchain的ARM share目錄)
#cp -ax ts /home/flykof/_install/etc (將ts的 plugins檔案複製到ARM filesystem 的/etc目錄中)
#cd tslib-1.3 (切換到tslib的source tree)
#cp etc/ts.conf /home/flykof/_install/etc
#vi /home/flykof/_install/etc/ts.conf (編輯ts.conf)
將
#module mousebuts
的#去掉
module mousebuts
儲存後退出
接下來請確認 Linux核心是否有驅動觸控螢幕,我的觸控裝置檔案在 /dev/input/tsraw0 ,將ARM Linux啟動後在shell執行,
"cat /dev/input/tsraw0",然後觸碰觸控螢幕,看看是否有產生資料,有的話代表Linux核心有驅動觸控螢幕,這樣tslib才可以正確運作,否則請修改Linux核心設定,讓Linux核心正確驅動觸控螢幕。
到此步驟,Qtopia執行的基本檔案就已經具備,可以執行Qtopia了。
編輯啟動命令稿
編輯Qtopia啟動命令稿如下
#!/bin/sh
export QTOPIA=/opt/Qtopia
export HOME=$QTOPIA
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTOPIA/lib
ln -sf /dev/fb/0 /dev/fb0
ln -sf /dev/vc/0 /dev/tty0
ln -sf /dev/vc/1 /dev/tty1
ln -sf /dev/vc/2 /dev/tty2
export TSLIB_TSEVENTTYPE=H3600
export TSLIB_TSDEVICE=/dev/touchscreen/0raw
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_CONSOLEDEVICE=none
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_PLUGINDIR=/etc/ts/plugins
export QWS_SIZE=320x240
export QWS_MOUSE_PROTO="Tslib:$TSLIB_TSDEVICE"
export QWS_KEYBOARD="TTY USB"
export POINTERCAL_FILE=/etc/pointercal
export PATH=$PATH:$QTOPIA/bin
if [ -f "$TSLIB_CALIBFILE" ]; then
qpe &
else
ts_calibrate
qpe &
fi
將檔案存檔為 "qtopia.sh",並加上 "x" 屬性,複製到ARM filesystem的 "/etc/init.d" 路徑下,然後在ARM filesystem的 /etc/init.d/rcS最後一行加上
/etc/init.d/qtopia.sh
這樣系統啟動時就會啟動qtopia GUI操作介面。
qtopia.sh為qtopia環境變數設定的程式化腳本(shell script)檔。但是由於PATH等變數的設定,會在進入系統後消失,所以建議可以在profile中再做設定。
當完成以上這些動作之後,/home/flykof/_install 資料夾中的檔案就是板子上QT4啟動的檔案了,可以將資料夾裏的內容整個複製到RootFileSystem中,在設定上敘的rcS、qtopia.sh即可在開機時啟動qtopia GUI操作介面。
build-qtopia資料夾則是在開發應用程式時,會有用到的一些lib等等的位置。
記得要設定PATH
export PATH=/ home/flykof/build-qtopia/bin:$PATH
export LD_LIBRARY_PATH=/ home/flykof/build-qtopia/lib:$ LD_LIBRARY_PATH
export QTOPIA_BUILD=/home/flykof/build-qtopia/
撰寫Qtopia程式
由於不明的原因,即使有執行過qtopia.sh但PATH部份就是不出來,所以我再profile重新設定一次。
若要測試開發應用程式,建議可以在WINDOWS上安裝QT4.5,之後SourceCode在給予Qtopia編譯也是可行的。
編譯可以在開發版上運行的應用程式
在/home/flykof/qtopia-opensource-4.3.3底下建立example1資料夾及example1.cpp。
#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPushButton hello(QObject::tr("Hello world!"));
hello.show();
return app.exec();
}
執行
qtopiamake -project建立專案
qtopiamake 建立Makefile
make 編譯
編譯好的檔案放在/ home/flykof/build-qtopia/example1 ,裡面的example1就是編譯好的執行檔。
在開發版下執行
./ example1 –qws
就會在LCD上顯示出Hello world!視窗。
參考來源:
http://www.zychip.com/html/support/qtopia_install/index.php
留言列表