主机环境:CentOS5.4
目标板:s3c2410开发板(64M SDRAM,64M NAND FLASH)
Qtopia版本:qtopia-opensource-src-4.2.4.tar.gz
Tslib版本:tslib-1.4.tar.gz
交叉编译工具:arm-linux-gcc-3.4.1
目录结构:
Qtopia源码-》/home/gyh/qtopia/source
Qtopia编译目录-》/home/gyh/qtopia/target
Tslib目录-》/home/gyh/qtopia/tslib-1.4
Qtopia安装目录-》/usr/local/qtopia
Tslib安装目录-》/home/gyh/qtopia/tslibprefix
nfs目录-》/home/gyh/nfs
一、Tslib移植
cd /home/gyh/qtopia/tslib-1.4
./autogen.sh
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-linux --prefix=/home/gyh/qtopia/tslibprefix --cache-file=arm-linux.cache
make
make install
cp -rf ../tslibprefix /home/gyh/nfs/tslib
二、Qtopia移植
1、
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
2、裁剪Qtopia
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 (必须进行的操作)
vi qtopiacore/qt/src/corelib/global/qfeatures.h
注释掉如下内容:
/*
#if !defined(QT_NO_QWS_CURSOR) && (defined(QT_NO_CURSOR))
#define QT_NO_QWS_CURSOR
#endif
*/
保存退出。
vi qtopiacore/qt/src/corelib/global/qglobal.h
注释掉以下内容:
//# define QT_NO_QWS_CURSOR
3、基于编译器的修改
vi qtopiacore/qt/tools/qvfb/qvfbshmem.cpp
//#include
vim src/libraries/qtopiabase/qmemoryfile_unix.cpp +128
修改f = ::open(tmpFile.toLatin1(), O_CREAT | O_WRONLY,0777);
4、编译
cd /home/gyh/qtopia/target
../source/configure -release -image /usr/local/qtopia -prefix /usr/local/qtopia -xplatform linux-arm-g++ -arch arm -no-qvfb -displaysize 240x320 -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/gyh/qtopia/tslibprefix/include -L/home/gyh/qtopia/tslibprefix/lib " 2>../configureERR.tx
make
sudo make install
5、拷贝时区数据
cp -rf /home/gyh/qtopia/source/etc/zoneinfo /home/gyh/nfs
6、编辑启动脚本
vi /home/gyh/nfs/qtopia.sh
#!/bin/ash
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/event0
export LD_LIBRARY_PATH=/usr/local/tslib/lib:$LD_LIBRARY_PATH
export QWS_SIZE=240x320
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf
export POINTERCAL_FILE=/usr/local/tslib/etc/pointercal
export QWS_MOUSE_PROTO=Tslib:/dev/event0
export TSLIB_CALIBFILE=/usr/local/tslib/etc/pointercal
export TSLIB_TSEVENTTYYPE=H3600i
export LD_LIBRARY_PATH=/usr/local/qtopia/lib:$LD_LIBRARY_PATH
export QWS_SW_CURSOR
export set HOME=/usr/local
export set QPEDIR=/usr/local/qtopia
export set QWS_KEYBOARD="TTY:/dev/tty1""
export QWS_DISPLAY="LinuxFb:mmWidth35:mmHeight45:0"
7、创建合适的目录
cd /home/gyh/nfs
mkdir usr
mkdir usr/local usr/share
mkdir usr/share/etc
mv -f tslib usr/local
mv -f zoneinfo usr/share/etc
cp -rf /usr/local/qtopia usr/local/
mv qtopia.sh usr/local
8、启动Qtopia
挂载nfs目录
mount -t nfs -o nolock 192.168.0.103:/home/gyh/nfs/usr /usr
cd /usr/local
./qtopia.sh
/usr/local/qtopia/bin/qpe &
出现界面。
(注:本文参考华清远见曹忠明老师的一篇文章,在此对他进行感谢,原文地址:http://blog.mcuol.com/User/farsight2009/Article/14846_1.htm)