wangRD 于 2006 年 3 月
前言:说实话,以前只作过 51,而且用的是汇编,C 都没有怎么用过。最近才有机
会接触到 linux,说起来也算是落后分子了。多亏北理论坛里各位大侠的帮忙,
还算顺利的把 qtopia 移植到了 ARM 开发板上。现整理了下文,抛砖引玉,希望
能对大家有所帮助,当然也希望大家多提宝贵意见,mail to
即可。当然更希望大家的经验也能告诉我
一、所用的资源:
硬件:华恒 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一行屏蔽,否则会报错
另外还需要用到 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 告诉我 ,谢了先!
8、关于触摸屏
简单说几句,由于华恒开发板已经提供了触摸屏的驱动 digi.o,所以我们
要做的只是交叉编译 qte 的时候加入触摸屏的支持就可以了!
在 qconfig-qpe.h 文件添加定义 QT_QWS_IPAQ
在 qwsmouse_qws.cpp 查找 h3600 替换为 digi
然后重新编译 qte 就可以了
阅读(2341) | 评论(0) | 转发(0) |