| 
 
| I.准备工作 
 
 
 
 
 交叉编译工具2.95.3:
 
 arm-linux-toolchains.tgz
 
 
 
 所需源码包:
 
 qtopia-free-2.2.0.tar.gz
 
 jpeg-6b-src.tar.gz
 
 e2fsprogs-1.34.tar.gz
 
 
 
 
 
 
 
 II.交叉编译
 
 
 
 1.安装交叉编译工具
 
 
 
 $su
 
 #cd /
 
 #tar zxvf arm-linux-toolchains.tgz
 
 #exit
 
 交叉编译工具安装在/usr/local/arm/2.95目录下。
 
 
 
 
 
 2.修改PATH环境变量以加载交叉编译工具的路径
 
 
 
 export PATH=/usr/local/arm/2.95.3/bin:$PATH
 
 修改后确保/usr/local/arm/2.95.3/bin目录下的命令能够执行。
 
 
 
 
 
 3.解压缩qtopia-free-2.2.0.tar.gz并配置编译选项
 
 
 
 a)解压缩 qtopia-free-2.2.0.tar.gz
 
 b)cd qtopia-free-2.2.0并执行以下命令:
 
 echo "yes" | ./configure -qte '-embedded -no-xft -xplatform linux-arm-g++ -qconfig qpe -depths 16,32 -no-qvfb -system-jpeg -gif' -qpe '-xplatform linux-arm-g++ -edition pda -displaysize 240x320' -libpath $PWD/libs -prefix $PWD/target
 
 
 
 
 
 4. 编译libjpeg.so
 
 
 
 a) 解压缩 jpeg-6b-src.tar.gz
 
 b) ./configure -enable-shared(置疑)
 
 c) make to create libtools(置疑)
 
 d) ./configure -enable-shared
 
 e) 修改Makefile以便进行交叉编译:
 
 prefix= TARGETDIR (放置目标库文件libjpeg*的路径,自由设置即可)
 
 CC= arm-linux-gcc
 
 AR= arm-linux-ar
 
 AR2=arm-linux-ranlib
 
 f ) cp jconfig.doc jconfig.h
 
 g) 在TARGETDIR中创建以下目录:
 
 man/man1, lib, bin, include
 
 h) make
 
 i ) make install (注意:只有执行该操作后才能生成libjpeg.so)
 
 (注意:执行以下命令检查生成的libjpeg.so是否为ARM版:
 
 #file libjpeg.so
 
 以下为正确输出,否则检查交叉编译器路径以及Makefile并重新编译。
 
 libjpeg.so: ELF 32-bit LSB shared object, ARM, version 1 (ARM), not tripped)
 
 j)将(jconfig.h, jerror.h, jmorecfg.h, jpeglib.h) 这四个文件从/usr/include复制到/qt2/include中 (感觉复制        到CROSS_COMPILER_DIR/include下会更合适。 也就是/usr/local/arm/2.95.3/arm-linux/include中)
 
 k) 复制(libjpeg.a, libjpeg.la, libjpeg.so, libjpeg.so.62, libjpeg.so.62.0.0)这五个库文件复制到CROSS_COMPILER_DIR/lib 下     (即/usr/local/arm/2.95.3/arm-linux/lib中)
 
 
 
 注意:执行完以上操作后执行以下命令检查库文件是否已正确安装:
 
 arm-linux-gcc -print-file-name=libjpeg.so
 
 如果输出为"libjpeg.so"则说明没有正确安装,重复j,k两步。
 
 如果输出为"DIR/libjpeg.so"则说明安装正确。
 
 
 
 
 
 5.编译e2fs-prog生成libuuid
 
 
 
 a) ./configure --host=arm-linux --enable-elf-shlibs --with-CC=arm-linux-gcc --with-linker=arm-linux-ld /                           -prefix=TARGETDIR
 
 b) make
 
 c) make install
 
 d) 此处会报告一个错误,尽可忽略,因为libuuid.so已经生成,位于./lib目录下。应该将库文件libuuid*复       制到"CROSS_COMPILER_DIR/lib"中。
 
 
 
 
 
 6.为编译qtopia准备两个文件
 
 
 
 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
 
 cd /usr/local/arm/2.95.3/arm-linux/include/linux
 
 touch version.h
 
 
 
 
 
 7. make
 
 
 
 注意:这里可以通过执行脚本set*Env来单独编译某个部分。
 
 
 
 
 
 8. make install
 
 
 
 目标镜像将会放置在$PWD/target中。
 
 
 
 
 
 
 
 III.定制qtopia
 
 
 
 1.加入鼠标支持
 
 
 
 qtopia默认不支持鼠标,若使用鼠标可修改qtopia-free-2.2.0/qtopia/src/qt/qconfig-qpe.h文件,将其中的:
 
 #define QT_NO_QWS_CURSOR
 
 #define QT_NO_QWS_MOUSE_AUTO
 
 #define QT_NO_QWS_MOUSE_PC
 
 注释掉即可。
 
 
 
 
 
 2.加入触摸屏支持
 
 
 
 a)编辑qtopia-free-2.2.0/qtopia/src/qt/qconfig-qpe.h文件,添加以下定义:
 
 #define QT_QWS_IPAQ
 
 b)编辑qtopia-free-2.2.0/qt2/src/kernel/qwsmouse_qws.cpp文件,找到QTPanelHandlerPrivate::QTPanelHandlerPrivate函数实现,将其中的:
 
 "/dev/h3600_ts"和"/dev/h3600_tsraw"都改为你触摸屏的设备文件名称即可。
 
 c)执行部分II中的3-b,7,8步骤重新编译qtopia。
 
 
 
 注意:若注释了1中的三个宏,触摸屏则不会正常通过校准。
 
 
 
 
 
 
 
 IV.通过nfs运行qtopia
 
 
 
 1.配置nfs
 
 
 
 主机:
 
 a)在/etc/exports文件中添加语句:/ *(rw,sync,no_root_squash),这将你的根目录完全共享。
 
 b)删除/etc/hosts.deny文件中的所有内容,这将允许任何机器与你进行RPC连接。
 
 c)删除网卡的网关。
 
 d)重启以下服务:
 
 service network restart
 
 service portmap restart
 
 service nfs restart
 
 
 
 目标机:
 
 a)确保能ping通主机。
 
 b)执行:mount -t nfs 主机IP:/ 挂载点
 
 
 
 
 
 2.运行qtopia
 
 
 
 a)将主机/usr/local/arm/2.95.3/arm-linux/lib下的ld-linux.so.2,libcrypt.so.1,libjpeg.so.62,libuuid.so.1,libc.so.6,libdl.so.2及libm.so.6复制到目标机的/lib目录下。
 
 b)将主机/usr/share/zoneinfo文件夹复制到目标机的相同位置。
 
 c)在目标机的根目录下创建qtopia运行所需的配置目录,并将HOME变量指向该目录。
 
 d)确保/dev/fb0文件存在并可写,若不存在可复制/dev/fb/0代替。
 
 e)如果使用鼠标而不是触摸屏则可设置QWS_MOUSE_PROTO变量,export QWS_MOUSE_PROTO="USB:鼠标的设备文件"。
 
 注意:若使用触摸屏设置该变量将会导致屏不工作。
 
 f)在目标机中进入主机的...../image/opt/Qtopia/,将QTEDIR指向本目录。
 
 g)设置LD_LIBRARY_PATH,export LD_LIBRARY_PATH=/lib:/$PWD/lib:$LD_LIBRARY_PATH。
 
 h)运行该目录下的qpe即可启动qtopia。
 | 
 |