前言: 说实话,以前只作过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就可以了
|