一、实验目的
1. 了解在Linux 下安装Qtopia 的基本步骤;
2. 学会在Qtopia 平台发布应用程序;
二、实验内容
1. 在Linux 下编译和使用Qtopia 平台;
2. 在Qtopia 平台上发布一个简单程序;
三、预备知识
1. 熟悉使用C++语言程序设计;
2. 掌握Linux 下常用编辑器的使用;
3. 掌握Linux 下程序编译;
4. 熟悉Qt 程序设计;
四、实验室设备和工具
1. 硬件:PC 端主机,UP-NETARM2410-S 目标板;
2. 软件:Redhat Linux9.0 for PC + minicom + Embeded Linux for 2410
tmake-1.13.tar.gz qtopia-free-source-2.1.1.tar.gz
qt-embedded-2.3.10.tar.gz qt-x11-2.3.2 .tar.gz
五、实验步骤
Qtopia 是TrollTech 公司为采用嵌入式
Linux系统的消费电子设备而开发的综合应
用平台, 它是基于Qt/Embedded 的。使用
Qt/Embedded不仅可以开发Qtopia也可以用
来开发面向Qtopia的第三方软件。它包括三
个版本:Qtopia手机版Qtopia PDA版和Qtopia
消费电子产品平台。
将本次实验所需的四个文件拷贝到
/root/2410sQt 目录下,我们以下的实验都是在这个目录下进行的。
宿主机上建立虚拟的Qtopia 环境需要以下几个步骤:
1. 解压缩安装文件:前面已经解压出来的文件不可在这里直接使用,须重新解压
① 解压缩qtopia:
tar xzf qtopia-free-source-2.1.1.tar.gz
export QPEDIR=$PWD/qtopia-free-2.1.1
② 解压缩tmake:
tar xzf tmake-1.13.tar.gz
export TMAKEDIR=$PWD/tmake-1.13
③ 解压缩Qt/X11:
tar xzf qt-x11-2.3.2.tar.gz
export QT2DIR=$PWD/qt-2.3.2
④ 解压缩Qt/Embedded:
tar xzf qt-embedded-2.3.10-free.tar.gz
export QTEDIR=$PWD/qt-2.3.10
2. Build Qt/X11:
cd $QT2DIR
export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -no-xft //出现选项选yes
make
cp bin/uic $QTEDIR/bin/
3. Build Qvfb:
export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH:$TMAKEDIR/bin
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
cd $QTEDIR/tools/qvfb
tmake -o Makefile qvfb.pro
make
mv qvfb $QTEDIR/bin/
4.Build libqte:
cd $QTEDIR
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
cp -f $QPEDIR/src/qt/qconfig-qpe.h src/tools/
./configure -system-jpeg -no-xft -qconfig qpe -qvfb -depths 4,8,16,32
make sub-src
5.Build Qtopia:
cd $QPEDIR
export QTDIR=$QTEDIR
export PATH=$QPEDIR/bin:$PATH
./configure
make
和前面编译Qt/Embedded 的基本步骤一样,还可以参考“./configure --help”,来进
行选择。若 编译时出错提示缺少uuid 库,可将src/e2fsprogs-libs-1.37.tar.gz 解压,
在其中找到缺少的库文件并拷贝到/usr/lib 中。
为了保证qvfb 能够正确显示qtopia 的结果,我们必须保证环境变量设置正确,我们
可以通过“env”命令来检查下面的环境变量,也可以用下面的方法来检查。
echo $QPEDIR
/root/2410sQt/qtopia-free-2.1.1/
echo $QTDIR
/root/2410sQt/qt-2.3.10
echo $LD_LIBRARY_PATH
/root/2410sQt/qtopia-free-2.1.1/lib:/root/2410sQt/qt-2.3.10/lib:/root/2410
sQt/qt-2.3.2/lib:
echo $PATH
/root/2410sQt/qt-2.3.10/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/loca
l/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
出现上面的结果就可以正常的显示Virtual framebuffer,我们可以通过下面的命令在
Virtual framebuffer 中实现Qtopia。
cd $QPEDIR/bin
qvfb &
sleep 10
./qpe.sh
图3.3-2 Virtual framebuffer 下的Qtopia
Qtopia 还为我们在Qtopia 平台上发布自己的应用程序提供了一个比较简便的方法,要
想把我们的应用程序发布到Qtopia 平台上,我们需要三个文件:一个执行文件、一个启动
器文件、一个图标文件。执行文件也就是我们前面讲到的编译链接后生成的可执行文件,
我们可以根据我们的需要编译链接生成到底是宿主机上运行的程序还是开发板上运行的程
序。图标文件就是一个.png 文件,我们制作自己的22×22 大小的图标文件。启动器文件是
一个.desktop 文件,我们可以用vim 手工编写自己的启动器文件,以上一节progressbar
为例,我们创建一个名为progressbar.desktop 的启动器文件,具体内容如下:
[Desktop Entry]
comment=A progressbar Program
Exec=progressbar
Icon=progressbar
Type=Application
Name=UP-TECH
以上内容都做好后,我们需要把我们的三个文件分别复制到相应的目录中.
将图标文件progressbar.png 复制到/root/qtopia/qtopia-free-2.1.1/pics
将执行文件progressbar 复制到/root/qtopia/qtopia-free-2.1.1/bin
将progressbar.desktop 复制到/root/qtopia/qtopia-free-2.1.1/apps/Applications
将上诉文件分别复制好以后就可以再次启动Qtopia,我们就可以看到我们自己发布的
程序了。
图3.3-3 发布程序到Qtopia
一. 实验目的
将qtopia 移植到2410-S 板所使用的linux-2.4.3 上;了解如何在pc 机(x86)上
如何为xscale(arm)编译、移植应用程序。
二. 实验内容
了解Qtopia 在2410-s 上的移植过程。交叉编译Qtopia 所需要的资源文件和环境,
交叉编译Qtopia 源代码。下载生成的Qtopia 系统到开发板。
三. 预备知识
1. 有C 语言基础。
2. 会使用LINUX 下常用的编辑器。
3. 掌握Makefile 的编写和使用。
4. 了解Linux 下的编译程序与交叉编译的过程。
四. 实验设备及工具
硬件:UP-NETARM2410-S 嵌入式开发板、PC 机Pentumn500 以上, 硬盘10G 以上
软件:PC 机操作系统REDHAT LINUX 9.0 +MINICOM + ARM-LINUX 开发环境
五. 实验原理
Qtopia 概述
Qtopia 是Trolltech 面向嵌入式Linux 的综合应用平台。Qtopia 包含完整的应用层、
灵活的用户界面、窗口操作系统、应用程序启动程序以及开发框架。
Qtopia 的组件:
表3.4-1
窗口操作系统 |
游戏和多媒体 |
工作辅助应用程序 |
同步框架 |
PIM应用程序 |
Internet应用程序 |
开发环境 |
输入法 |
Java 集成 |
本地化支持 |
个性化选项 |
无线支持 |
目前在sitsnag 平台上使用的qtopia 版本为1.5.0 free,是面向PDA 的一个版本,
当然它也有面向手机的版本。
Qtopia PDA 版是一个强大的平台,专用于基于Linux操作系统的PDA(个人数字助理设备)。许多PDA 都已采用了Qtopia, Qtopia PDA 版已经成了事实上的Linux 标准,它代表了可行的“第三种”PDA 设计方案。Qtopia PDA 版具有可定制的用户界面,支持更大的屏幕尺寸以及横向和纵向布局。
图3.4 -1 Qtopia层次结构
六 实验步骤
1.实验可以分为以下几个步骤进行:
(1) 在装有linux 的pc 机上安装交叉编译环境。
安装光盘时所安装的编译器版本较低,不能正常编译QT 程序,所以编译前需要安装
Qt/tools/arm-linux-gcc-3.4.1.tar.bz2,并在/root/.bash_profile 中修改编译器搜索路径。
(2) 编译库文件:
(3) 编译qt-x11-2.3.2:
(4) 编译安装qt-embedded-2.3.2
(5) 编译安装QTOPIA
(6) 将需要拷贝到开发板上的文件整理到一个单独的文件夹里面
在本次实验中,buildqtopia.sh 文件已为大家做好了以上几步,我们可以直接运行该文件进
行编译。大家可以分析buildqtopia.sh 内容,掌握编译的步骤。
2. 编译步骤:
cd src
./buildqtopia.sh
当编译完成后,在src/qtopia-free-2.1.1/image/opt/Qtopia 下是编译完成的Qtopia 桌面环境。
说明:
在编译完成后,src 下的各个目录对应如下软件包:
e2fsprogs-libs-1.37 ext2 文件系统工具包,Qtopia 用到了其中的libuuid
e2fs-install ext2工具包编译结果
jpeg-6b jpeg 解码库
jpeg-install jpeg编译结果
tslib 触摸屏工具包
tslib-install 触摸屏工具包编译结果
tmake-1.13 tmake工具,编译Qtopia 时需要使用
qt-2.3.2 Qt/X11-2.3.2 及编译结果, 编译Qtopia 时需要使用其中的工具
qt-x11-free-3.3.4 Qt/X11-3.3.4 及编译结果,编译Qtopia 时需要使用其中的工具
qt-2.3.10 Qt/Embedded 2.3.10 及编译结果
qtopia-free-2.1.1 Qtopia 2.1.1 及编译结果
3. 安装步骤:
3.1 Qtopia
cd qtopia-free-2.1.1/image/opt/
tar cvjf /root/share/qtopia-install.tar.bz2 Qtopia
将/root/share /qtopia-install.tar.bz2 下载到目标机,并解压缩到/mnt/yaffs 下。
3.2 相关文件
将src/qtopia.sh 下载到目标机的/mnt/yaffs/Qtopia 目录下.
将src/e2fs-install/lib/libuuid.so*下载到目标机的/mnt/yaffs/lib 目录下
将src/jpeg-install/lib/libjpeg.so*下载到目标机的/ mnt/yaffs/lib 目录下
将tools/usr/local/arm/3.4.1/arm-linux/lib/libgcc_s.so*下载到目标机的/ mnt/yaffs/lib 目录下
将tools/usr/local/arm/3.4.1/arm-linux/lib/libstdc++.so*下载到目标机的/ mnt/yaffs/lib 目录下
3.3 目标机上的处理
在目标机上执行:
cd /usr
ln -s /mnt/yaffs/Qtopia qpe
cd /mnt/yaffs/Qtopia
mkdir tmp
4 运行:
插上USB 鼠标,在目标机上执行qtopia.sh 即可运行qtopia 桌面环境。
注意:1.如果运行./qtopia.sh 后提示找不到库文件,请从编译器目录下查找,并拷贝到开
发板/mnt/yaffs/lib 中。
2.如果提示:can’t open framebuffer device /dev/fb0 可以执行:ln –sf /dev/fb/0 /dev/fb0
3.如果提示:Qt/Embedded data directory is not owned by user 0:/tmp/qtembedded-0
运行:chown root:root /tmp/qtembedded-0
4.如果提示:Qtopia data directory is not owned by user 0:/tmp/qtopia-0
运行:chown root:root /tmp/qtopia-0
六. 思考题
1.请思考Qtopia 的framebuffer 的机制。
1.安装vmware,安装redhat-linux
2.按照指导书,安装博创linux开发环境;
3.配置网络、nfs服务等;
4.完成以上四个qt相关实验
=============================================================
重建目标机文件资源(移植咱们自己的qtopia)的步骤:
删除/mnt/yaffs/Qtopia下的东西
删除/mnt/yaffs/Qtopia下的东西
解压原厂光盘下img下的yaffs.tar.bz2到/mnt/yaffs
因为/mnt/yaffs/所占空间太多,可以将这个目录下无关的文件删除
甚至可以只保留Qtopia/、lib/、lost+found/目录,不过建议保留触摸屏的目录和库
====================== lib files to arm board =================
下面所指定位置下的lib库文件,很多都是链接文件。
为保证正确性,一般用命令行的压缩命令将相关文件压缩;
然后把压缩文件所在目录挂载到目标板,在目标板终端解压到/mnt/yaffs/lib
.tar.bz2
解压:tar -jxvf xxx.tar.bz2 -C /xxx/xx
压缩:tar –jcvf xxx.tar.bz2 DirName
============================================================
出错的原因一般是:
直接复制就会把原来的链接文件转换成为原始文件,
这样运行时无法保证库的一致性,就会出错;而且会耗尽目标机的memory。
指导书却只字未提,害了我相当多的时间(痛恨ing)
============================================================
<1>. 解压qtopia-install.tar.bz2到/mnt/yaffs/
这个压缩文件是实验四指导下制作的,其实就是编译成功了的qtopia镜像文件系统
<2>. qt2.3.10/lib/libqte.so* 下载到目标机的/usr/lib
libqte.so
libqte.so.2
libqte.so.2.3
libqte.so.2.3.10
<3>. qt2.3.10/lib/fonts 下载到目标机的/mnt/yaffs/lib/fonts
<4>. 将 src/e2fs-install/lib/libuuid.so*下载到目标机的/usr/lib
libuuid.so
libuuid.so.1
libuuid.so.1.2
<5>. 将 src/jpeg-install/lib/libjpeg.so*下载到目标机的/usr/lib
libjpeg.so
libjpeg.so.62
libjpeg.so.62.0.0
<6>.tools/usr/local/arm/3.4.1/arm-linux/lib/libgcc_s.so*下载到目标机的/mnt/yaffs/lib/目录下
libgcc_s.so
libgcc_s.so.1
<7>.tools/usr/local/arm/3.4.1/arm-linux/lib/libstdc++.so*下载到目标机的/mnt/yaffs/lib/目录下
libstdc++.so
libstdc++.so.6
libstdc++.so.6.0.1
<8>.root/2410sQt/tslib-install/lib/下的libts*复制到目标板/mnt/yaffs/lib/下
libts-0.0.so.0
libts-0.0.so.0.1.0
libts.la
libts.so
----------------------
< >.正常情况下,目标机/mnt/yaffs/lib下应该还有:
libbluetooth.so
libbluetooth.so.1
libbluetooth.so.1.0.16
libeg-1.2.so.0.0.0
libfhas2-1.1.so.0.0.0
libglib-1.2.so.0
libglib-1.2.so.0.0.10
libncurses.so.5.2
libpdag-1.2.so.0.0.0
这些应该是厂商提供的yaffs.tar.bz2下包含的东西
===========================================
完成后,个文件所占的空间:
1.du -s(查看当前目录所占空间)
/mnt/yaffs/lib/fonts/ ---------13.4 MB
/mnt/yaffs/lib/ ---------25.1 MB
/mnt/yaffs/Qtopia ---------22.9 MB
/mnt/yaffs/ ---------48.1 MB
===========================================
接下来还应该在/nt/yaffs/Qtopia/下建立tmp/目录
===============================================
要想联机执行你自己的程序,而非在开发板直接运行:
export QTDIR=/usr
cd xx/
./xxx
即可
===============================================
==============================================
要想联机执行你自己的程序,而非在开发板直接运行:
export QTDIR=/usrcd xx/./xxx即可
===============================================
制作自己的程序:
打开qt-2.3.2/bin/下的designer(这是2.x版本的qtdesigner)
qtdesigner3开发的程序不能在qtopia2.1.1上跑
不兼容
designer可以生成xx.ui文件
然后uic -o xx.h xx.ui
uic -o xx.cpp -impl xx.h xx.ui
tmake-1.3.1/bin/progen -t app.t xxx.pro
tmake-1.3.1/bin/tmake -o makefile xxx.pro
make
即可生成可执行文件