close

 

 

準備工作

 

開發環境說明

本文使用的ARM 編譯器安裝於:/usr/local/arm/3.4.1

本文使用的ARM 檔案系統設定置於:/home/flykof/root

QtopiaARM 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的相關函示庫(包含zlibtslib)


編譯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,如果您要在PCX-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 (切換到toolchainARM函示庫目錄)

#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 (切換到toolchainARM函示庫目錄)

#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 (切換到toolchainARM bin目錄)

#cp -ax ts_calibrate /home/flykof/_install/bin (複製ts校正程式到ARM filesystem)

#cd /usr/local/arm/3.4.1/arm-linux/share (切換到toolchainARM share目錄)

#cp -ax ts /home/flykof/_install/etc (ts plugins檔案複製到ARM filesystem /etc目錄中)

#cd tslib-1.3  (切換到tslibsource 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.shqtopia環境變數設定的程式化腳本(shell script)檔。但是由於PATH等變數的設定,會在進入系統後消失,所以建議可以在profile中再做設定。


當完成以上這些動作之後,/home/flykof/_install 資料夾中的檔案就是板子上QT4啟動的檔案了,可以將資料夾裏的內容整個複製到RootFileSystem中,在設定上敘的rcSqtopia.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.shPATH部份就是不出來,所以我再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

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 flykof 的頭像
    flykof

    十年磨一劍

    flykof 發表在 痞客邦 留言(1) 人氣()