成功移植qtopia-free-2.2.0到arm9

ARM 118浏览
 这段时间,晚上一直在弄把qtopia-free-2.2.0移植到arm9上,昨天晚上成功了!非常高兴e113.gif
把在这个移植过程中出现的一些问题和大家分享一下,希望对大家有所帮助e160.gif

时间:2008-9   作者:Darby
host环境:系统:Fedora 1 完全安装,交叉工具arm 2.95.3和3.3.2(libjpeg.a)
target环境:arm s3c2410,320x240屏外加触摸屏,yaffs文件系统
软件:cross-2.95.3.tar.bz2和cross-3.3.2.tar.bz2
   qtopia-free-src-2.2.0.tar.gz =>qtopia-free-2.2.0)
   e2fsprogs-1.39.tar.gz=>(e2fs)
   jpegsrc.v6b.tar.gz=>(jpeg)
   libpng-1.2.14.tar.bz2=>(libpng)
   tslib-1.3.tar.bz2=>(tslib)
   zlib-1.2.3.tar.bz2=>(zlib)
准备路径
我的arm-linux-gcc已安装到/usr/local/arm/2.95.3/bin/,并已设置$PATH变量
设置环境变量:
export MYHOME=/usr/local/s3c2410linux/qt-embedded/yizhi/qtopia-free-2.2.0
export PATH=$PATH:/usr/local/arm/2.95.3/bin
mkdir $MYHOME/arm/lib
mkdir $MYHOME/arm/include(这两个目录是存放编译后的库与头文件,为后面交叉编译用)
mkdir $MYHOME/qtopia
然后分别编译:
1.e2fs
cd $MYHOME/arm/e2fs
./configure --host=arm-linux --enable-elf-shlibs--with- cc=arm-linux-gcc --with-linker=arm-linux-ld --prefix=/usr/local/arm/2.95.3/arm-linux
make
cp lib/libuuid.so* ../lib
make install

2.jpeg:
cd $MYHOME/arm/jpeg

./configure –enable-shared
vi Makefile
修改:
CC= arm-linux-gcc
AR= arm-linux-ar rc
AR2=arm-linux-ranlib

make
cp *.h ../include/
cp libjpeg.a ../lib/
如果当前没有libjpeg.a文件,在
cp /usr/local/arm/3.3.2/lib/libjpeg.a ../lib/
3.zlib:
cd $MYHOME/arm/zlib
./configure -shared
vi Makefile
修改
:
    [begin]
    ...
   CC=arm-linux-gcc
    ...
    LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz.so.1
    CPP=arm-linux-g++ -E
   ...
   AR=arm-linux-ar rc
    RANLIB=arm-linux-ranlib
    ...
    prefix =/usr/local/arm/2.95.3/arm-linux
    ...
    [end]
make
cp libz.so* ../lib/
cp *.h ../include/

make install

4.libpng:
cd $MYHOME/arm/libpng    
cp scripts/makefile.linux   ./Makefile    
vi Makefile
修改:
    [begin]
    ...
    
AR_RC=arm-linux-ar rc
    CC=arm-linux-gcc
    ...
    RANLIB=arm-linux-ranlib
    ...
    prefix=/usr/local/arm/2.95.3/arm-linux
    ...
    [end]
make

cp libpng12.so*   ../lib/
cp libpng12.so ../lib/libpng.so
cp *.h ../include/
  
5.tslib
(如果准备用Qt自带的触摸屏校正工具可以不编译:
cd $MYHOME/arm/tslib
./autogen.sh
echo"ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache --enable-inputapi=no --srcdir=/usr/local/s3c2410linux/qt-embedded/tslib-1.3
为了防止出现“libtool:link: only absolute run-paths are allowed“的错误,在/tslib/plugins/Makefile里面找rpath,找到将其注释并加上绝对路径。
#LDFLAGS :=$(LDFLAGS) -rpath $(PLUGIN_DIR)
LDFLAGS :=$(LDFLAGS) -rpath $(PWD)/plugins
make
cp src/.libs/libts-0.0.so.0* ../lib/
cp src/.libs/libts.so ../lib/
cp src/*.h ../include/

make install
编译Qtopia
(1)准备

建立安装目录
mkdir $MYHOME/nfs/qtopia
修改文件
   vi$MYHOME/nfs/qtopia-free-2.2.0/qtopia/mkspecs/qws/linux-arm-g++/qmake.conf(由于些文件为只读文件,可用chmod命令给些文件加上W的权限,否则修改不了!)
将此行
   QMAKE_LIBS_QT = -lqte
修改为
   QMAKE_LIBS_QT= -lqte -lpng -lts -lz -luuid -ljpeg
如果想让Qtopia自己支持触摸屏,需要修改$QPEDIR/qtopia/src/qt/qconfig-qpe.h文件,定义相应的宏,在最后加上
#define QT_QWS_IPAQ
#define QT_QWS_IPAQ_RAW
在最后运行的时候,加上如下环境变量
export QWS_MOUSE_PROTO=TPanel:/dev/input/ts0触摸屏具体名称和位置可能需要根据实际情况修改
如果想让Qtopia支持鼠标,需要修改$QPEDIR/src/qt/qconfig-qpe.h文件
注释如下部分
/*
#ifndef QT_NO_QWS_CURSOR
#define QT_NO_QWS_CURSOR
#endif
#ifndef QT_NO_QWS_MOUSE_AUTO
#define QT_NO_QWS_MOUSE_AUTO
#endif
#ifndef QT_NO_QWS_MOUSE_PC
#define QT_NO_QWS_MOUSE_PC
#endif
*/
在最后运行的时候,加上如下环境变量
export QWS_MOUSE_PROTO=TPanel:/dev/input/ts0触摸屏具体名称和位置可能需要根据实际情况修改
export QWS_MOUSE_PROTO=USB:/dev/input/mice(不需要暂时可不写)
如果想让Qtopia支持USB标准键盘,在最后运行的时候,加上如下环境变量

export QWS_KEYBOARD=USB:/dev/input/event0
(2)设置环境变量
   export QPEDIR=$MYHOME/nfs/qtopia-free-2.2.0/qtopia
   export QTDIR=$MYHOME/nfs/qtopia-free-2.2.0/qt2
   export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib
   export TMAKEDIR=$MYHOME/nfs/qtopia-free-2.2.0/tmake
   export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
(3)准备配置文件
   cp $QPEDIR/src/qt/qconfig-qpe.h $QTDIR/src/tools
   cd $QPEDIR/src/libraries/qtopia
   cp custom-linux-ipaq-g++.cpp custom-linux-arm-g++.cpp
   cp custom-linux-ipaq-g++.h custom-linux-arm-g++.h
(4)开始configure
   cd$MYHOME/nfs/qtopia-free-2.2.0
   如果想让Qtopia自己支持触摸屏,用下面的命令

   echo'yes'|./configure -qte "-embedded -xplatform linux-arm-g++ -qconfig qpe -no-qvfb-depths 16,24 -system-jpeg -system-libpng -system-zlib -gif -thread -no-xft-release -I$MYHOME/arm/include -L$MYHOME/arm/lib -lpng -lz -luuid -ljpeg"-qpe '-xplatform linux-arm-g++ -edition pda -displaysize 320x240-I$MYHOME/arm/include -L$MYHOME/arm/lib -prefix=$MYHOME/nfs/qtopia'
  
如果想用tslib可以加上-tslib和-lts选项
   echo 'yes'|./configure -qte "-embedded -xplatform linux-arm-g++ -qconfig qpe -no-qvfb -depths 4,8,16 -system-jpeg -system-libpng -system-zlib -tslib -gif -thread -no-xft -release -I/usr/local/s3c1410linux/qt-embedded/yizhi/arminclude -L/usr/local/s3c2410linux/qt-embedded/yizhi/armlib -lpng -lts -lz -luuid -ljpeg" -qpe '-xplatform linux-arm-g++ -edition pda -displaysize 320x240 -I$/usr/local/s3c2410linux/qt-embedded/yizhi/arminclude -L/usr/local/s3c2410linux/qt-embedded/yizhi/armlib -prefix=/usr/local/s3c2410linux/qt-embedded/yizhi/qtopia'
make
make install

会出现一个摄像头的文件的问题,找到对应文件,修改一下便可。以上的路径可能有些出路,由于匆忙,记的不是特别清楚,要是用可以根据实际情况进行修改,敬请见谅!
拷贝库与触摸屏校准/测试程序
     mkdir /root/2410s/qtopia/bin/tests
     mkdir /root/2410s/qtopia/lib/ts
     cp /root/2410s/tslib-1.3/tests/.libs/ts_* /root/2410s/qtopia/bin/tests
     cp /root/2410s/tslib-1.3/src/.libs/libts-0.0.so.0* /root/2410s/qtopia/lib
     cp /root/2410s/tslib-1.3/src/.libs/libts.so /root/2410s/qtopia/lib
     cp /root/2410s/tslib-1.3/plugins/.libs/*.so /root/2410s/qtopia/lib/ts
     cp /root/2410s/armlib/*.so* /root/2410s/qtopia/lib   //所有需要的支持的库文件
将qtopia复制到共享文件夹/nfs/rootfs/
     cp -r /root/2410s/qtopia  /nfs/rootfs/
注意 ::::   把文件/root/2410s/tslib-1.3/etc/ts.conf文件拷贝到你的板子的/etc/目录下
cp /root/2410s/tslib-1.3/etc/ts.conf  /nfs/rootfs/
把文件/root/share/tslib/etc/ts.conf文件拷贝到你的板子的/mnt/yaffs目录下
    cp /mnt/nfs/ts.conf /mnt/yaffs
(默认是/etc目录下面的,我这里需要修改也是因为根文件系统不可写的缘故)
运行[以下操作在目标板上进行]:
     在你的板子上设置运行[url=javascript:;]环境[/url]变量
export QTDIR=/mnt/nfs/qtopia
export QPEDIR=/mnt/nfs/qtopia
export QWS_MOUSE_PROTO=TPanel:/dev/input/ts0(根据自己的实际来写)
export LD_LIBRARY_PATH=/mnt/nfs/qtopia/lib
export TSLIB_TSEVENTTYPE=H3600  对tslib中的设备结构体定义
export TSLIB_CONSOLEDEVICE=none tslib运行需要的控制台,这里就是LCD屏幕 ,设定控制台设备为none,否则默认为/dev/tty
export TSLIB_FBDEVICE=/dev/fb0  指定帧缓冲设备
(我的开发板上只有/dev/fb/0,所以做了一个链接  ln -s /dev/fb/0 /dev/fb0)
export TSLIB_TSDEVICE=/dev/touchscreen/0raw指定开发板对应触摸屏设备节点文件
export TSLIB_CALIBFILE=/mnt/yaffs/pointercal指定触摸屏校准文件pintercal的存放位置
(默认是在/etc下面,可写文件系统为/etc/pointercal)
export TSLIB_CONFFILE=/mnt/yaffs/ts.conf 指定TSLIB配置文件的位置
export TSLIB_PLUGINDIR=$QTDIR/lib/ts 指定触摸屏插件所在路径
***************************
如果为可写根文件系统,可以修改开发板/etc/profile文件,将这些环境变量写入,就不用每次设置了
*****************************
校准屏幕(5点校准)
     cd /mnt/nfs/qtopia/bin/tests
     ./ts_calibrate
    会陆续在LCD的4个角和中点出现光标,点击光标进行校准,生成校准文件
     再运行测试
     /ts_test
     这时LCD上出现光标,你的手指点哪里光标就会跟到哪里才成功

     运行PDA      cd ..
     ./qpe
如果条件允许建议大家把上面的全部过程写成一个shell角本,运行会比较好(Jacky.J指导)
以上出现PDA手机界面的就是说明成功了,当然在中途可能会遇到各种各样的问题,不过,
”事上无难事,只怕有心人“认真做了,认真想了,肯定会成功没有问题。e130.gif
些项止要特别感谢:Jacky.J老师(中国人)--此人比较低调,大家就不用找他了!有问题可以给我留言,e113.gif哈哈
在其大力的帮助下,得以顺利完成!至此90%工作已经完成,剩下的可以根据自己的实际需要对一些设备(如声卡)
驱动进行适当的调整,以达到自己的所需!感觉各位朋友耐心的看完此篇文章,希望上述内容对大家有所帮助,谢谢