Qtopia移植

Qtopia 是Trolltech 公司爲採用嵌入式Linux操做系統的消費電子設備而開發的綜合應用平臺, Qtopia包含完整的應用層、靈活的用戶界面、窗口操做系統、應用程序啓動程序以及開發框架。下面即是他的移植過程。linux

硬件s3c2410
    主機環境:red hot企業版 5.0
    交叉編譯工具:gcc-3.4.5-glibc-2.3.6
    主機編譯工具:gcc-4.1
    Qtopia源碼:qtopia-opensource-src-4.2.0.tar.gz
    tslib源碼:tslib-1.4.tar.gzsql

1、tslib移植數據庫

第一步:解壓tslib-1.4.tar.gzvim

        tar -zxvf tslib-1.4.tar.gz框架

第二步:進入解壓過的目錄工具

        cd tslib-1.4ui

第三步:執行tslib-1.4目錄下的autogen.sh操作系統

        ./autogen.shnuxt

這一步須要安裝一些工具:sudo apt-get install automakeunix

第四步:執行autogen.sh腳本所生成的Makefile文件

請打入如下命令:
    echo "ac_cv_func_malloc_0_nonnull=yes" >$ARCH-linux.cache
    ./configure --host=arm-softfloat-linux-gnu   --prefix=/home/linux/tslib --cache-file=$ARCH-linux.cache

--host是指你的交叉編譯器的前最;例如:你的交叉編譯器是arm-linux-gcc,則--host=arm-linux.若是是arm-softfloat-linux-gnu-gcc
則--host=arm-softfloat-linux-gnu

--prefix 是你執行make install 的時候編譯後生成的可執行文件和庫文件以及配置文所安裝的目錄;

configure文件下還有好多選項;你能夠執行./configure --help 來進行選擇其餘項,不過在這裏這些選項就夠了。

第五步:執行make

第六步:執行make install

第七步:把指定安裝目錄下的tslib的文件都copy到你所掛載的根文件下

         sudo cp -rf /home/linux/tslib/*       /rootfs/tslib

第八步:修改/rootfs/tslib下的etc目錄中ts.cong文件

        vi ts.conf   將第二行的#module_raw input修改爲module_raw input 注意必定要頂格寫不然程序執行時會發生讀取ts.conf錯誤

2、Qtopia移植

第一步:解壓qtopia-opensource-src-4.2.0.tar.gz

         tar zxvf qtopia-opensource-src-4.2.0.tar.gz
             mv qtopia-opensource-4.2.0 source

第二步:建立在source同級目錄下建立目錄target

        mkdir target

第三步:修改源碼包

        一、 
            # cd source 
            # cd src/libraries/qtopiabase/ 
            # cp custom-linux-cassiopeia-g++.h custom-linux-arm-g++.h 
            # cp custom-linux-cassiopeia-g++.cpp custom-linux-arm-g++.cpp

        二、修改時區信息

        # vi src/libraries/qtopia/qtimezone.cpp

        將114行的 /usr/share/zoneinfo/ 改成/Qtipia/zoneinfo/ ,保存退出。 
            # vi src/settings/systemtime/settime.cpp 
            將318行的 /usr/share/zoneinfo/ 改成/Qtipia/zoneinfo/ ,保存退出。

        三、裁減Qtopia core的庫(下列操做後在屏幕上會出現一個光標,不然沒有光標根據需求配置)

       (1)# vi qtopiacore/qconfig-qpe.h

       首先註釋掉關於鼠標光標的宏定義,讓程序運行時,觸摸屏中央有光標出現: 
            // Qtopia Core 
            /* 
            #ifndef QT_NO_QWS_CURSOR 
            # define QT_NO_QWS_CURSOR 
            #endif 
            */ 
            /* 
            #ifndef QT_NO_QWS_MOUSE 
           # define QT_NO_QWS_MOUSE 
            #endif 
            #ifndef QT_NO_QWS_MOUSE_AUTO 
            # define QT_NO_QWS_MOUSE_AUTO 
            #endif 
            */ 
            其它宏定義根據須要進行註釋。 
            保存後將qconfig-qpe.h拷貝到global目錄。 
            # cp qtopiacore/qconfig-qpe.h qtopiacore/qt/src/corelib/global/qconfig-qpe.h (必須進行的操做)

       (2)註釋掉其餘文件裏的QT_NO_QWS_CURSOR的定義

        # vi qtopiacore/qt/src/corelib/global/qfeatures.h

        註釋掉以下內容: 
            /* 
            #if !defined(QT_NO_QWS_CURSOR) && (defined(QT_NO_CURSOR)) 
            #define QT_NO_QWS_CURSOR 
            #endif 
            */ 
            保存退出。

        (3)# vi qtopiacore/qt/src/corelib/global/qglobal.h

        註釋掉如下內容: 
            //# define QT_NO_QWS_CURSOR

        四、下面是對編譯過程當中出現的錯誤進行的一些修改:

        (1)vim qtopiacore/qt/tools/qvfb/qvfbshmem.cpp

        註釋掉asm/page.h 
            //#include <asm/page.h>

        (2)vim qtopiacore/qt/tools/qvfb/qvfbmmap.cpp

        註釋掉asm/page.h 
            //#include <asm/page.h>

        並修改以下內容

        unsigned char *data; 
            uint data_offset_value = sizeof(QVFbHeader); 
            if (data_offset_value % PAGE_SIZE) 
            data_offset_value += PAGE_SIZE - (data_offset_value % PAGE_SIZE);

        爲:

        unsigned char *data; 
            uint data_offset_value = sizeof(QVFbHeader); 
            const int page_size = getpagesize(); 
            if (data_offset_value % page_size) 
            data_offset_value += page_size - (data_offset_value % page_size);

        (3)vim src/libraries/qtopiabase/qmemoryfile_unix.cpp +128

        修改

        f = ::open(tmpFile.toLatin1(), O_CREAT | O_WRONLY);

        爲:

        f = ::open(tmpFile.toLatin1(), O_CREAT | O_WRONLY ,0777);

        四、修改交叉工具

        vim qtopiacore/qt/mkspecs/qws/linux-arm-g++/qmake.conf

        將文件中的arm-linux-***所有修改成arm-softfloat-linux-gnu-**

        這樣作的前提是個人交叉工具鏈是arm-softfloat-linux-gnu,若是你的是arm-linux就不用改了。

第四步:生成Makefile

cd ../target

../source/configure -release -image /Qtopia -prefix /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 -depths 4,8,16,32 -qt-sql-sqlite -no-mouse-linuxtp -qt-mouse-tslib -I/home/linux/tslib/include -L/home/linux/tslib/lib " 2>../configureERR.tx

注意:這裏/Qtopia是最後Qtopia的安裝路徑,安裝到主機的某個路徑下,最終這個路徑和目標板上的路徑必須一致。

主要配置選項解說以下:

-xplatform linux-arm-g++ -arch arm

目標平臺爲arm-linux,體系結構爲arm。

-no-qvfb

目標平臺已支持framebuffer,於是不使用虛擬幀緩衝。

-extra-qtopiacore-config

爲Qtopia core 配置選項。

-xplatform qws/linux-arm-g++ -embedded arm

目標平臺編譯配置文件使用qtopiacore/qt/mkspecs/qws/linux-arm-g++目錄下的配置文件,嵌入式平臺爲arm。

-qconfig qpe

使用配置文件qconfig-qpe.h,若使用qconfig-large.h配置文件,則使用-qconfig large選項。

-qt-sql-sqlite

數據庫支持Sqlite。

-qt-kbd-usb

鍵盤支持usb協議。

-no-mouse-linuxtp -qt-mouse-tslib

-I/home/linux/tslib/include -L/home/linux/tslib/lib

觸摸屏協議不支持linuxtp,支持tslib,並在後面添加上剛纔編譯的tslib的頭文件和庫。

2>../qtopiaconfigureERR.txt

最後將配置過程當中的錯誤輸出到qtopiaconfigureERR.txt文件中。

第五步:make

第六步:make install

第七步:cp source/etc/zoneinfo /Qtopia/ -a

第八步:將安裝和的目錄考到nfsroot目錄下

cp /Qtopia /rootfs -a

第九步:配置目標板環境變量腳本

vim qtopia.sh

添加以下內容:

#!/bin/sj
    export TSLIB_ROOT=/tslib
    export TSLIB_TSDEVICE=/dev/event0
    export LD_LIBRARY_PATH=/tslib/lib:$LD_LIBRARY_PATH
    export QWS_SIZE=320x240
    export TSLIB_FBDEVICE=/dev/fb0
    export TSLIB_PLUGINDIR=/tslib/lib/ts
    export TSLIB_CONSOLEDEVICE=none
    export TSLIB_CONFFILE=/tslib/etc/ts.conf
    export POINTERCAL_FILE=/etc/pointercal
    export QWS_MOUSE_PROTO=Tslib:/dev/event0
    export TSLIB_CALIBFILE=/etc/pointercal
    export TSLIB_TSEVENTTYYPE=H3600i
    export LD_LIBRARY_PATH=/Qtopia/lib:$LD_LIBRARY_PATH
    export QWS_SW_CURSOR
    export set HOME=/root
    export set QPEDIR=/Qtopia
    export set QWS_KEYBOARD="TTY:/dev/tty1""
    export QWS_DISPLAY="LinuxFb:mmWidth35:mmHeight45:0"

3、啓動Qtopia

第一步:目標板開機

第二步:運行腳本qtopia.sh

./qtopia.sh

第三步:運行qpe

/Qtopia/bin/qpe

這個時候就能看到一個漂亮的界面了。

相關文章
相關標籤/搜索