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
這個時候就能看到一個漂亮的界面了。