一、开发Qtopia的所需的工具
整个GUI系统的构建需要对Qt/Embedded、Qtopia依次分别编链,然后有机地整合在一起。Qt/Embedded为Qtopia提供
了底层支持,GUI系统的图形库窗口组建都由Qt/Embedded实现。
在构建GUI时用于Qt开发的典型工具如下:
tmake:跨平台的Makefile生成器。
moc:用于Qt C++扩展的metra-object编译器。
uic:uic是for x86的文件,从XML文件生成代码的用户界面编译器。即uic用来把.ui文件转换成.h和.cpp文件。
designer:用于设计窗口组建的应用程序。
Qtopia的开发工具包SDK(Software Development Kit)是Qtopia开发环境的核心部分,编译后得到创建应用程序所
需的软件包如下:
qvfb(virtual frame buffer):X窗口用来运行和测试Qtopia应用程序的系统程序 。
qpe(Qtopia executable):是Trolltech公司所推出的针对PDA软件的整体解决方案,包含了从底层的GUI系统、
Window Manager、Soft Keyboard到上层的PIM、浏览器、多媒体等方面,用来处理所有的用户程序界面。
二、交叉编译qtopia的过程
1、编译qtopia的准备工作
1.1、所需的软件压缩包:
cross-2.95.3.tar.bz2,
e2fsprogs-1.39.tar.gz.tar.gz,
jpegsrc.v6b.tar.gz,
libpng-1.2.18.tar.bz2,
zlib-1.2.3.tar.bz2,
qtopia-free-src-2.2.0.tar.gz
1.2、建立所需目录
/---usr ---/local/arm
/---root---/yizhi
. . . /armlib
. . . /arminclude
. . . /qtopia-free-2.2.0
. . . /libpng-1.2.18
. . . /zlib-1.2.3
. . . /e2fsprogs-1.39
. . . /jpeg-6b
. . . /qt-2.3.10
. . . /host/qtopia-free-2.2.0
1.3、各个目录的功能作用:
arm:存放PC机上交叉编译的工具
yizhi:下载的软件包全部存放到这里
armlib:编译软件得到qtopia所需要的库文件全部放在这里
arminclude:编译软件得到qtopia所需要的头文件全部放在这里
qtopia-free-2.2.0:qtopia的源代码
jpeg-6b:一个jpeg图形编码解码程序库
libpng-1.2.18:一个png图形编码解码程序库
zlib-1.2.3:一个压缩解压程序库
e2fsprogs-1.39:可以提供uuid支持
qt-2.3.10:qt-embeddedd的文件夹路径
host/qtopia-free-2.2.0:qtopia的源代码
2、编译QTOPIA所依赖的库文件
2.1、安装交叉编译工具
将cross-2.95.3.tar.bz2放到/usr/local/arm文件夹下解压,
# tar –zxvf cross-2.95.3.tar.bz2
这个命令会在你的/usr/local/arm/2.95.3目录下安装 arm-linux-gcc 交叉编译程序,然后在PATH变量中添加一项
:
export PATH=/usr/local/arm/2.95.3/bin:$PATH
测试
# arm-linux-gcc -v
2.2、得到本机运行的uic工具
qtopia-2.2.0版本里面集成了qt\tmake\qtopia。
编译Qt/X11的唯一目的就是为编译QTE提供uic(用户接口编译器)以及基于X Windows系统的FrameBuffer设备模拟
器qvfb。
解压qtopia-free-src-2.2.0.tar.gz,将qtopia-free-2.2.0复制到 /root/yizhi/host
# cd /root/host/qtopia-free-2.2.0
要生成Makefile
# ./configure
# make
解压qtopia-free-src-2.2.0.tar.gz 将其复制至 /root/yizhi/
# cp /root/yizhi/host/qtopia-free-2.2.0/qt2/bin/uic /root/yizhi/qtopia-free-2.2.0/qt2/bin/
2.3、编译e2fsprogs-1.39
要得到qtopia 所需的二個文件,uuid.h 及 libuuid.so。
# cd /root/yizhi/e2fsprogs-1.39
设置环境变量
# export PATH=/usr/local/arm/2.95.3/bin:$PATH
# export CC= /usr/local/arm/2.95.3/bin/arm-linux-gcc
# ./configure --enable-elf-shlibs --host=arm-linux
--with-cc=/usr/local/arm/2.95.3/bin/arm-linux-gcc
--with-linker=/usr/local/arm/2.95.3/bin/arm-linux-ld
--prefix=/usr/local/arm/2.95.3/arm-linux
# make
将e2fsprogs-1.39/lib/目录下uuid的文件夹复制到yizhi/arminclude下
# cp -r /lib/uuid /root/yizhi/arminclude
# cp lib/libuuid.so* /root/yizhi/armlib /
2.4、交叉编译jpeg库
解压jpegsrc.v6b.tar.gz到/root/yizhi
# cd jpeg-6b
设置环境变量
# export QTDIR=/root/yizhi/qtopia-free-2.2.0/
# export QTEDIR=/root/yizhi/qtopia-free-2.2.0/qtopia/
# export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
# export PATH=/usr/local/arm/2.95.3/bin:$PATH
# export CC= /usr/local/arm/2.95.3/bin/arm-linux-gcc
# ./configure --enable-shared
修改生成的Makefile文件
prefix = /root/yizhi/qt-2.3.10
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
在你的qt-embedded中建立man/man1文件夹,否则安装jpeg库时会出错
# mkdir -p qt-2.3.10/man/man1
最后
# make
# make install –lib
报错,但是在/root/2410s/qt-2.3.10-arm/lib目录下生成了文件夹fonts和libjpeg.so*
# cp jpeglib.h /root/yizhi/arminclude
# cp lib/libjpeg.so* /yizhi/yizhi/armlib
就可以给qt-embedded添加好for arm的libjpeg库放到交叉编译的Lib一份
# cp lib/libuuid.so* /usr/local/arm/2.95.3/arm-linux/lib
2.5、编译libpng库
将libpng-1.2.18.tar.bz2解压到/root/yizhi目录下
# cd /root/yizhi/libpng-1.2.18
# cp scripts/makefile.linux ./Makefile
注意,这里的makefile不是用./configure生成,而是直接从scripts/里拷一个
# vi Makefile
修改:
[begin]
...
AR_RC=/usr/local/arm/2.95.3/bin/arm-linux-ar rc
CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc
RANLIB=/usr/local/arm/2.95.3/bin/arm-linux-ranlib
prefix=/usr/local/arm/2.95.3/arm-linux
...
[end]
保存
# make
# cp libpng12.so* /root/yizhi/armlib
# cp *.h /root/yizhi/arminclude
2.6、编译zlib
# cd /root/yizhi/zlib-1.2.3
设置环境变量
# export PATH=/usr/local/arm/2.95.3/bin:$PATH
# export LD_LIBRARY_PATH= /usr/local/arm/2.95.3/arm-linux/lib:$LD_LIBRARY_PATH
# export CC= /usr/local/arm/2.95.3/bin/arm-linux-gcc
# ./configure –shared
# vi Makefile
修改:
[begin]
CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc
...
LDSHARED=/usr/local/arm/2.95.3/bin/arm-linux-gcc -shared-Wl,-soname,libz.so.1
CPP=/usr/local/arm/2.95.3/bin/arm-linux-gcc -E
...
AR=/usr/local/arm/2.95.3/bin/arm-linux-ar rc
RANLIB=/usr/local/arm/2.95.3/bin/arm-linux-ranlib
...
prefix =/usr/local/arm/2.95.3/arm-linux
...
[end]
保存
# make
将编译生成的动态库及相关的头文件分别复制到armlib和arminclude目录下
# cp libz.so* /root/yizhi/armlib
# cp *.h /root/yizhi/arminclude
3、交叉编译qtopia
3.1、编译修改工作
①、vi /root/yizhi/qtopia-free-2.2.0/qtopia/mkspecs/qws
/linux-arm-g++/qmake.conf
将此行
QMAKE_LIBS_QT = -lqte
修改为
QMAKE_LIBS_QT = -lqte -lpng -lz -luuid -ljpeg
②、 如果想让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
*/
③、# cp /root/yuzhi/qtopia-free-2.2.0/qtopia/src/qt/Qconfig-qpe.h
/root/yizhi/qtopia-free-2.2.0/qt2/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
④、将/usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../
../../arm-linux/sys-include/linux/videodev.h文件中的#include一行屏蔽
3.2、设置环境变量,编译及安装
①设置编译qtopia的环境变量
# export QTDIR=/root/yizhi/qtopia-free-2.2.0/qt2
# export QPEDIR=/root/yizhi/qtopia-free-2.2.0/qtopia
# export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib:$LD_LIBRARY_PATH
# export TMAKEDIR=/root/yizhi/qtopia-free-2.2.0/tmake
# export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
# export PATH=/usr/local/arm/2.95.3/bin:$PATH
②创建交叉编译后的qtopia文件夹
# mkdir /root/yizhi/qtopia
③生成Makefile文件(注释2)
# ./configure -qte "-embedded -xplatform linux-arm-g++ -qconfig qpe -no-qvfb -depths 8,16,24,32
-no-xft -system-jpeg -system-libpng -system-zlib -gif -thread –release -
I/root/yizhi/arminclude -L/root/yizhi/armlib -lpng -lz –luuid -ljpeg" -qpe '-xplatform linux-
arm-g++ -edition pda –displaysize 640x480 -I/root/yizhi/arminclude -L/root/yizhi/armlib -
prefix=/root/yizhi/qtopia'
④编译qtopia
# make
⑤安装qtopia的交叉编译环境
# make install
编译完成以后/root/yizhi后出现一个qtopia的目录,在/root/yizhi/qtopia/lib/目录下面看到libqte.so、
libqte.so.2 libqte.so.2.3、libqte.so.2.3.12 这四个文件. 这是编译qte的库文件.
将所有需要支持的库文件都放到新生成的qtopia/lib中
# cp /root/yizhi/armlib/*.so* /root/yizhi/qtopia/lib
4、将qtopia挂在到目标板上
4.1、建立宿主机和开发板的通讯
以/root/share 为共享文件夹,目标板可通过nfs来访问这个共享文件夹。
将qtopia复制到共享文件夹/root/share/
# cp -r /root/yizhi/qtopia /root/share/
设置共享文件夹:
①、修改/etc/export指定/root/share文件夹为共享可访问的
最后一行加上 /root/share 192.168.0.* (rw)
②、没有关闭防火墙
4.2、启动nfs服务
# service nfs restart (或nfs /etc/rc.d/init.d/nfs start)
设置本机的ip 地址为192.168.0.105
# ifconfig eth0 192.168.0.105 up
4.3、测试qtopia是否正常运行
配置串口的波特率为115200,启动目标板。
# minicom
# ifconfig -t nfs eth0 192.168.0.16 up
检测目标板和PC机是否建立了连接
#ping 192.168.0.105
如果建立了连接,将文件复制到目标板上
# mount 192.168.0.105:/root/share /mnt/ext2
# cd /mnt/ext2/qtopia
设置环境变量
# export QTDIR=$PWD
# export QPEDIR=$PWD
# export LD_LIBRARY_PATH=$PWD/lib
我的根文件系统为只读文件系统cramfs,下句是指定一个可读写的文件,作为环境变量HOME
# export HOME=/etc/tmp
帧缓冲设备板子上为/dev/fb/0,但程序默认为/dev/fb0,所以做了一个链,接/dev/fb0到/dev/fb/0
# ln -s /dev/fb/0 /dev/fb0
指定键盘和鼠标为输入设备
# export QWS_KEYBOARD_PROTO="USB:/dev/input/event1"
# export QWS_MOUSE_PROTO="USB:/dev/input/mouse0"
在qtopia下可能没有pointercal文件可以自创一个其内容是1 0 1 0 1 1 65536
# cp pointercal /etc
# cp pointercal /etc/tmp
运行PDA
# cd bin
# ./qpe
出现 Tap anywhere on the screen to continue
用鼠标点击一下桌面,就进入配置显示使用的语言和所在地区的时区,点击finish键,这样就可以在显示终端上看
到qtopia桌面环境了。