前言:
说实话,以前只作过51,而且用的是汇编,C都没有怎么用过。最近才有机会接触到linux,说起来也算是落后分子了。多亏北理论坛里各位大侠的帮忙,还算顺利的把qtopia移植到了ARM开发板上。现整理了下文,抛砖引玉,希望能对大家有所帮助,当然也希望大家多提宝贵意见,mail to ahha1998@126.com即可。当然更希望大家的经验也能告诉我
一、所用的资源:
硬件:华恒HHARM9328MXL-R1
软件:cross-2.95.3.tar.bz2
qt-embedded-2.3.10.tar.gz
qt-x11-2.3.2.tar.gz
qt-x11-3.3.4.tar.gz
qtopia-free-2.1.1.tar.gz
tmake-1.11.tar.gz
jpegsrc.v6b.tar.gz
e2fsprogs-1.35.tar.gz
zlib-1.2.3.tar.gz (这个是不是需要交叉编译,不太肯定,反正我是交叉编译了一下)
软件从网上下载,如果不知道从什么地方下载,google就是了。板子2006-02-13才从同事手中拿到(当时并没有注意这块开发板上没有时钟系统,移植到板子上后才注意到这个问题。),不过好在以前在论坛里看了不少如何在x86下编译qte、qtopia的文档,并且也在linux下也折腾了一两个月。建议没有作过x86下编译qtopia的也先从x86入手熟悉熟悉操作过程,我后面的过程里有些用到了x86环境下编译的文件,我就不再详细说明了。好了,废话少说,我们开始吧!
二、约定:
假设上述的软件你都已经安装到了/arm-target目录下,目录名分别为qte qtopia tmake jpeg e2fs zlib,还有一些用到的目录需要自己建立,我就不一一说明了,大家从下文中应该能够看出来。
三、交叉编译过程
1、交叉编译工具的安装
直接解压到/usr/local/arm目录下,
并且export PATH=/usr/local/arm/2.95.3/bin:$PATH
2、编译qte和qtopia需要的准备工作
export QTDIR=/arm-target/qte
export QPEDIR=/arm-target/qtopia
export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib:$LD_LIBRARY_PATH
export TMAKEDIR=/arm-target/tmake
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
cp /arm-target/qtopia/src/qt/qconfig-qpe.h /arm-target/qte/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
3、交叉编译e2fs-prog,得到libuuid库
./configure --host=arm-linux --enable-elf-shlibs --with-cc=arm-linux-cc --with-linker=arm-linux-ld –prefix=/usr/local/arm/2.95.3/arm-linux
make
make install
(提示好像有一些问题,没有ext2fs目录。。,不过能够执行完毕,且生成了libuuid.so*)
4、交叉编译jpegsrc,得到libjpeg
./configure --enable-shared
make 得到libtools程序,然后再
./configure --enable-shared
修改生成的Makefile文件:
prefix = /arm-target/qte
CC= /usr/local/arm/2.95.3/bin/arm-linux-gcc
AR= /usr/local/arm/2.95.3/bin/arm-linux-ar rc
AR2= /usr/local/arm/2.95.3/bin/arm-linux-ranlib
cp jconfig.doc jconfig.h
mkdir -p /arm-targetqte/man/man1
make
并没有完成提示出错,不过libjpeg.so确实生成了,到现在还没有弄明白为什么。。。
向下面的目录中也拷贝一份libjpeg.so
/usr/local/arm/2.95.3/arm-linux/lib
5、交叉编译qte (需要触摸屏支持的话参照第8条)
./configure -qconfig qpe -system-jpeg -no-xft -gif -qvfb -depths 4,8,12,16 –xplatform linux-arm-g++
make
6、交叉编译qtopia
首先在/usr/local/arm/2.95.3/arm-linux/sys-include/linux/videodev.h 文件中把#include<linux/version.h>一行屏蔽,否则会报错
另外还需要用到uic程序,用qt-x11-2.3.2在x86环境下编译生成的即可。
./configure -edition pda -prefix=/arm-target/board-target -no-qtopiadesktop -xplatform linux-arm-g++
make
make install 即可在/arm-target/board-target目录下生成
7、运行qtopia
方法一:通过nfs方式
启动后mount -o nolock 192.168.123.116:/ /mnt
cd /mnt/arm-target/board-target
export QTDIR=$PWD
export QPEDIR=$PWD
export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH
cd bin
./qpe 即可在HHARM9328-MXL的LCD显示器上看到qtopia的启动界面
方法二:把qtopia烧写到flash中运行。(具体的方法开发板的手册中有,要做的只是把/arm-target/board-target目录里的内容按自己的需求裁减一番。)
由于华恒的开发板的文件系统cramfs,但qtopia运行时需要操作/Settings目录,所以在/etc/init.d/rcS最后添加一行 mount –t tmpfs tmpfs /Settings
不明白的事:想启动后自动执行qtopia,但是在/usr/etc/rc.local中添加
export QPEDIR=/qtopia
cd /qtopia/bin
./qpe
但是 linux启动后查看环境变量,发现export 一句并没有起作用。那位大侠如果知道该如何做,欢迎email告诉我ahha1998@126.com ,谢了先!
8、关于触摸屏
简单说几句,由于华恒开发板已经提供了触摸屏的驱动digi.o,所以我们要做的只是交叉编译qte的时候加入触摸屏的支持就可以了!
在qconfig-qpe.h文件添加定义QT_QWS_IPAQ
在qwsmouse_qws.cpp 查找h3600替换为digi
然后重新编译qte就可以了