转自:http://hi.baidu.com/wxd2000/blog/item/27f732284f2780f498250aa2.html
注,指导书的错误有:
1.理论上完全可以复制指导书中的命令,粘贴就可执行,但是指导书中许多“-”号是全角下的“-”,必须是半角的“-”才可以;
2.前两个实验中的环境变量设置命令里,多了host和target目录;
3.在最后一个实验复制库文件的时候,说是直接cp,但是这样会出错。最保险的方法是先压缩这些库文件,然后解压到目标板相应的位置。
4.这些隐形的错误害了我太多时间了,非常痛恨博创。
3.1安装与建立Qt 桌面运行环境
一、实验目的
1. 了解在Linux 下安装Qt 以及Qt/Embedded 的基本步骤;2. 学会在Qt/E 平台下使用Virtual framebuffer 显示程序结果;
二、实验内容
1. 在Linux 下编译和使用Qt/E 平台;2. 在Qt/E 平台下编译和运行一个程序使用Virtual framebuffer 显示运行结果;
三、预备知识
1. 熟悉使用C++语言程序设计;2. 掌握Linux 下常用编辑器的使用;3. 掌握Linux 下程序编译;4. 熟悉Qt 程序设计;
四、实验室设备和工具
硬件:PC 机Pentumn500 以上, 硬盘10G 以上。软件:PC 机操作系统REDHAT LINUX 9.0 +MINICOM + ARM-LINUX 开发环境tmake-1.13.tar.gz qt-embedded-2.3.10-free.tar.gz qt-x11-2.3.2 .tar.gz
五、实验步骤
在Trolltech公司的网站上可以下载该公司所提供的Qt/Embedded 的免费版本,在安装产品光盘以后,本次实验目录下已有要下载的文件,在/arm2410s/gui/Qt/src 下。在做实验前把本次实验用到的三个文件拷贝到/root/2410sQt 目录下。
[root@BC root]#cd /root/
[root@BC root]#mkdir 2410sQt
[root@BC root]#cd 2410sQt
[root@BC 2410sQt]#mkdir host
[root@BC root]#cd /arm2410s/gui/Qt/src
[root@BC src]#cp -arf tmake-1.13.tar.gz qt-embedded-2.3.10-free.tar.gz qt-x11-2.3.2.tar.gz /root/2410sQt/host
安装编译器arm-linux-gcc-3.4.1:
[root@BC src]#cd /arm2410s/gui/Qt/tools
[root@BC tools]#tar xjvf arm-linux-gcc-3.4.1.tar.bz2 -C ./
[root@BC tools]#vi /root/.bash_profile //打开文件
将该文件中的PATH 变量改为PATH=$PATH:$HOME/bin:/arm2410s/gui/Qt/tools
/usr/local/arm/3.4.1/bin/,存盘后退出。
[root@BC tools]# source /root/.bash_profile
如果安装正确的话,在任意路径下输入ar 后按Tab 键即可列出编译器文件。
Qt/Embedded 平台的搭建需要以下几步:
第一步,解压安装包并设置环境变量
1.安装Tmake
cd ~/2410sQt/host
tar -xzf tmake-1.13.tar.gz
export TMAKEDIR=$PWD/tmake-1.13
(这里指导书错了,多了host在里面,也害了我很多时间)
2.安装Qt 2.3.2
cd ~/2410sQt/host
tar -xzf qt-x11-2.3.2.tar.gz
export QT2DIR=$PWD/qt-2.3.2
(这里指导书错了,多了host在里面,也害了我很多时间)
3.安装Qt/Embedded
cd ~/2410sQt/host
tar -xzf qt-embedded-2.3.10-free.tar.gz
export QTEDIR=$PWD/qt-2.3.10
(这里指导书错了,多了host在里面,也害了我很多时间)
环境变量的设置是非常重要的,它关系到能否正确的安装及编译这些安装包,下面介绍一下这些环境变量:
TMAKEDIR : 指向用于编译Qt/Embedded 的Tmake 工具
QT2DIR : 指向qt-2.3.2 的文件夹
QTEDIR : 指向qt-2.3.10 的文件夹
第二步,编译Qt/Embedded。
1. Build Qt2.3.2
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 -arf bin/uic $QTEDIR/bin/
./configure 是对Qt 进行配置,它包括很多选项,例如可以通过添加“ -no-opengl”等,如果想要进一步了解可以通过键入 ./configure --help 来获得更多的帮助信息。编译完成后需要将生成的/bin/uic 复制到$QTEDIR 下新创建的目录bin 中,因为在随后编译
Qt/Embedded 的时候会用到这个工具。
2. Build Qvfb
export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
cd $QTEDIR/tools/qvfb
/root/2410sQt/host/tmake-1.13/bin/tmake -o Makefile qvfb.pro
make
mv qvfb $QTEDIR/bin/
这一步build qvfb 并建立了从Qt/Embedded 2.3.10 到Qt 2.3.2 的静态库的链接。其中qvfb 工具用来生成Virtual framebuffer,这是一个非常有用的工具,它可以模拟在开发板上的显示情况,如果在Virtual framebuffer 中运行没有问题的话,可以直接通过交叉编译在开
发板上运行。
3. Build Qt/Embedded
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
./configure -no-xft -qvfb -depths 4,8,16,32
yes
5
make
在配置./configure 中-qvfb 用来支持Virtual framebuffer,-depths 4,8,16,32 支持4 位,8位,16 位,32 位的显示深度,此外还可以添加如-syestem-jpeg 和-gif 来提供对jpeg 和gif的支持。配置系统同时还支持对特定平台系统选项的添加,但一般来讲,凡是支持framebuffer 的Linux 系统都可以使用“linux-generic-g++”平台。详细的配置信息可以通过运行./configure --help 命令来查看。
第四步,查看运行结果,如果上面各步都能够成功的编译通过,下面就可以通过运行Qt/Embedded 自带的demo 来查看运行结果。
●在Virtual framebuffer 上运行:
export QTDIR=$QTEDIR
export PATH=$QTEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH
cd $QTEDIR/examples/launcher
qvfb -width 640 -height 480 &
sleep 10
./launcher -qws
运行结果如下:图3.1-1 Qt/Embedded Demo 程序
将上面的步骤完成后,我们就已经建立好了在本机上开发Qt 应用程序的环境,下面
我们通过编写一个“Hello Embedded”的程序来了解Qt 程序设计。
[root@BC qt-2.3.10]# cd /root/2410sQt/host/
[root@BC 2410sQt]# mkdir exp
[root@BC 2410sQt]# cd exp
[root@BC exp]# vi hello.cpp
使用VI 编写文件hello.cpp,程序代码如下:
//hello.cpp
#include <qapplication.h>
#include <qlabel.h>
int main(int argc, char **argv)
{
QApplication app (argc, argv);
QLabel *hello = new QLabel("Hello Qt/Embedded!", 0);
app.setMainWidget(hello);
hello->show();
return app.exec();
}
现在开始逐行讲解一下每一句是什么意思,掌握了这些以后可以帮助我们更加了解Qt的程序设计。
第1 行和第2 行包含了两个头文件,这两个头文件中包含了QApplication 和 QLabel类的定义。
第5 行创建了一个QApplication 对象,用于管理整个程序的资源,它需要2 个参数,因为Qt 本身需要一些命令行的参数。
第6 行创建了一个用来显示Hello Qt/Embedded!的部件。在Qt 中,部件是一个可视化用户接口,按钮、菜单、滚动条都是部件的实例。部件可以包含其它部件,例如,一个应用程序窗口通常是一个包含QMenuBar、QToolBar、QStatusBar 和其它部件的一个部件。在QLabel 函数中的参数0 表示,这是一个窗口而不是嵌入到其它窗口中的部件。
第7 行设置hello 部件为程序的主部件,当用户关闭主部件后,应用程序将会被关闭。如果没有主部件的话,即使用户关闭了窗口程序也会在后台继续运行。
第8 行使hello 部件可视,一般来说部件被创建后都是被隐藏的,因此可以在显示前根据需要来订制部件,这样的好处是可以避免部件创建所造成的闪烁。
第9 行把程序的控制权交还给Qt,这时候程序进入就绪模式,可是随时被用户行为激活,例如点击鼠标、敲击键盘等。
下面我们要让我们的程序跑起来,首先要让它能够在Virtual framebuffer 中显示出来,然后再通过交叉编译在开发板上运行。要在本机的Virtual framebuffer 中显示结果,下面几步是必须的:
1.生成工程文件(.pro)
每一个Qt 程序都对应着一个工程文件,因为tmake 工具要借此工程生成相应的Makefile 文件。生成工程文件需要使用progen 工具,它的位置在$TMAKEDIR/bin 下,使用progen 生成工程文件的方法如下:
$TMAKEDIR/bin/progen -t app.t -o hello.pro
生成的这个hello.pro 工程文件是可以被修改的,可以编辑里面的头文件、源文件等内
容。
2.生成Makefile 文件
Qt 提供了生成Makefile 文件的工具tmake,这极大地方便了应用程序的开发,节省了大量的时间,而且还可根据不同平台的需要生成适合于不同平台的Makefile 文件。在使用tmake 工具前,必须查看相应的环境变量是否正确,由于我们要编译在本机上运行的Qt 程序,所以指定的编译器应该为“linux-x86-g++”,在命令行中输入下面的命令来检查环境变量是否正确:
echo $TMAKEPATH
查看返回的结果的结尾字符是否是“……/qws/linux-x86-g++”,如果不是的话需要在
命令行中重新设置TMAKEPATH
export TMAKEPATH=/tmake 的安装路径(如$TMAKEDIR)/lib/qws/linux-x86-g++
此外还要使QTDIR 指向Qt/Embedded 的安装路径,如:
export QTDIR=$QTEDIR 或者直接指定路径
export QTDIR=……/qt-2.3.10
完成了上面的环境变量的设置,并用echo 命令检查无误以后,就可以使用tmake 工
具来生成我们需要的Makefile 文件,在命令行中输入如下命令:
$TMAKEDIR/bin/tmake -o Makefile hello.pro
完成上面的步骤以后就可以在当前的目录中生成一个Makefile 文件,关于Makefile
文件的功能和结构这里就不再做过多的介绍了,可以参考前面的章节来了解Makefile。
最后在命令行中输入 “make”命令就可以对整个程序进行编译链接了,最终生成了一
个二进制的可执行文件hello。用Virtual framebuffer 显示效果如下:
我们可以通过对QLabel *hello = new QLabel("Hello Qt/Embedded!", 0)这句进行修改,
使我们的程序显示起来更为美观,修改如下:
QLabel *hello=new QLabel("<h2><fontcolor=blue>Hello"
修改后显示效果如图所示:图3.1-3 修改后Hello Embedded
3.2 Qt Designer 简介以及Qt/E 的交叉编译
一、实验目的
1. 了解Qt Designer 的使用方法以及Qt/Embedded 交叉编译的基本步骤;2. 学会在使用Qt Designer 编写程序,交叉编译,在开发板上运行;
二、实验内容
1. 在Linux 下使用Qt Designer;2. 在Qt Designer 下编写程序,完成交叉编译并在开发板上运行;
三、预备知识
1. 熟悉使用C++语言程序设计;2. 掌握Linux 下常用编辑器的使用;3. 掌握Linux 下程序编译;4. 熟悉Qt 程序设计;
四、实验室设备和工具
硬件:PC 机Pentumn500 以上, 硬盘10G 以上。
软件:PC 机操作系统REDHAT LINUX 9.0 +MINICOM + ARM-LINUX 开发环境
五、实验步骤
Qt 提供了非常强大的GUI 编辑工具— Qt Designer,它的操作界面类似于Windows 下的Visual Studio,而且它还提供了相当多的部件资源。图3.2-1 Qt Designer 丰富的部件资源
下面我们来介绍一下Qt Designer 的开发环境以及使用Qt Designer 的开发过程,下面所示的图3-5 为我们使用的Qt/X11 2.3.2 中自带的v 1.1 版的Qt Designer。无论我们是采用Qt Designer 还是纯手工编写代码都需要经过下面的几个步骤:
●创建和初始化子部件
●设置子部件的布局
●设置Tab 键的次序
●建立信号与插槽的连接
下面我们透过一个简单的例子,来熟悉一下Qt Designer。我们编写的窗体主要包括下
面几个部件:一个CheckBox,一个PushButton,一个Silder,一个dial,一个LCDNumber,
一个ProgressBar;要实现的功能是点击PushButton 会选中CheckBox;拖动Silder 同时,
Dial、LCDNumber 和ProgressBar 会随其发生变化。图3.2-3 布置部件
在布置部件时,我们可以不必要非常准确的放好每个部件的位置,因为Qt Designer自带的lay out 功能回自动帮我们实现。将全部部件都选中,使用Layout|in a Gird 网格布局。图3.2-4 使用Layout 布局管理后
将部件布置好后,就可以根据我们的需要来建立连接,Qt 开创性的使用了信号与插槽机制,与传统的回调函数方式不同,它是一种灵活、类型安全、快速、完全面向对象的C++机制。使用传统的回调函数机制来关联某段代码和和一个按键,需要有一个指向函数的指针,并且将这个指针地址传给按钮。当这个按钮被按下,这个函数就会被执行。以前的工具包不能保证函数被执行时所传递的类型是正确的,这使得进程很容易崩溃。另一个问题是,这种回调方法紧紧得绑定了GUI 得基本功能元素,使得很难进行独立的分类开发。Qt 的信号与插槽机制则不同,Qt 部件(Widgets)事件发生时发出信号,如一个按钮被点击时会发出一个clicked”信号。程序员可以选择建立一个函数(称为插槽)并调用connect()函数来将这个信号与插槽连接起来。用户在编程时可以将两个对象捆绑在一起而不需要知道每个对象的各自的信息,而且可以自己创建信号与插槽,发射自己的信号等等。有关信号与插槽的具体内容请参考其它书籍,这里就不再过多介绍了。
建立连接要用到connect Singal/Solts (F3) 按钮,点击后只要用鼠标连接两个部件就可以建立它们之间的连接。图3.2-5 建立两个部件的连接
连接建立以后会自动出现编辑连接(Edit Connection)的对话框:图3.2-6 编辑连接对话框
依次建立各个部件之间的连接后,可以通过点击Edit|Connections 来查看各个部件的连
接情况,还可以通过点击Edit 菜单来对连接进行修改。
图3.2-7 连接关系图
Qt 取消了传统的“编译、连接和运行”的方式,直接提供了Preview 功能,而且支持
不同平台的不同风格,比如常见的Windows 风格、Motif 风格等。图3.2-8 Qt 的预览风格选择图3.2-9 Qt Designer 的不同风格
将以上步骤做完后,我们就可以把我们设计的窗体保存起来,Qt 会将我们的窗体信息保存成一个.ui 文件,用Qt 提供的uic 工具可以方便的通过这个文件来生成.h 文件和.cpp文件,假设我们将上面的窗体保存为win.ui,则具体操作如下:
uic -o win.h win.ui
uic -o win.cpp -impl win.h win.ui
完成了这两个命令后,我们会发现在我们的当前目录中会有win.h 与win.cpp 两个文件,只有这两个文件程序还是不能运行的,我们还需要再创建一个main.cpp 文件,我们使用vi 编辑器手工编写这个文件。
vi main.cpp
具体代码如下:
#include "win.h"
#include <qapplication.h>
int main(int argc,char **argv)
{
QApplication a(argc,argv);
Form1 form ;
form.setCaption("Form");
a.setMainWidget(&form);
form.show();
return a.exec();
}
要将我们写好的程序发布到开发板上,我们需要对Qt/Embedded 重新编译,与前面在
宿主机上编译类似,步骤如下:
[root@BC root]#cd 2410sQt
[root@BC 2410sQt]#mkdir targett
[root@BC root]#cd /arm2410s/gui/Qt/src
[root@BC src]#cp -arf tmake-1.13.tar.gz qt-embedded-2.3.10-free.tar.gz
qt-x11-2.3.2.tar.gz /root/2410sQt/target
第一步,解压安装包并设置环境变量
1.安装Tmake
cd ~/2410sQt/target
tar -xzf tmake-1.13.tar.gz
export TMAKEDIR=$PWD/tmake-1.13
2.安装Qt 2.3.2
cd ~/2410sQt/target
tar -xzf qt-x11-2.3.2.tar.gz
export QT2DIR=$PWD/qt-2.3.2
3.安装Qt/Embedded
cd ~/2410sQt/target
tar -xzf qt-embedded-2.3.10-free.tar.gz
export QTEDIR=$PWD/qt-2.3.10
第二步,编译Qt/Embedded。
1.Build Qt2.3.2
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 -arf bin/uic $QTEDIR/bin/
2. Build Qvfb
export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
cd $QTEDIR/tools/qvfb
/root/2410sQt/target/tmake-1.13/bin/tmake -o Makefile qvfb.pro
make
mv qvfb $QTEDIR/bin/
3.Build Qt/Embedded
cd $QTEDIR
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32
make
这步完成后,我们会在$QTEDIR/lib/目录下面看到libqte.so libqte.so.2 libqte.so.2.3
libqte.so.2.3.10 这四个文件,我们可以使用file 命令来查看这个库文件是否是我们需要的在开发板上跑的库。
file libqte.so.2.3.10
libqte.so.2.3.10: ELF 32-bit LSB shared object, ARM, version 1 (ARM), not stripped
有了这个库以后我们就可以把它拷贝到我们的开发板中相应的库目录下面,这里我们
选择了开发板上的/usr/lib 目录,将$QTEDIR/lib/下的libqte.so*复制到/usr/lib 目录下。首先要建立宿主机和开发板的通讯,假设本机的ip 地址为192.168.0.56 并且/root/share 为共享文件夹。
mount -t nfs -o nolock 192.168.0.56:/root/share /host //在开发板端
将文件复制到开发板上
cp -arf /$QTEDIR/lib libqte.so* /root/share //在PC 端
cp -arf /mnt/nfs/libqte.so* /usr/lib //在开发板端
复制时可能提示没有空间,在yaffs 下删除一些无关程序以获取空间。
1. 修改tmake 配置文件
vi $ TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf
将其中“TMAKE_LINK= arm-linux-gcc”
“TMAKE_LINK_SHLIB= arm-linux-gcc”
修改为:“TMAKE_LINK= arm-linux-g++”
“TMAKE_LINK_SHLIB= arm-linux-g++”
2. 生成可执行文件
这里我们采用了Qt/Embedded 自带的一个demo,它在$QTEDIR/examples/progressbar
目录下, 这个目录包括下面几个文件: main.cpp 、Makefile.in 、progressbar.h 、
Makefile、progressbar.cpp、progressbar.pro,如果已经有了progressbar 的执行文件,可以使
用make clean 删除。
在这里已经有了工程文件progressbar.pro,这个是Qt 已经配置好的,一般情况下我们
自己编写程序事需要progen 工具来生成这个文件的,以这个程序为例
$TMAKEDIR/bin/progen -t app.t -o progressbar.pro
在使用tmake 工具生成makefile 文件之前,我们要确保tamke 工具的路径是正确的,
可以采用echo 名来来查看
echo $TMAKEPATH
查看返回的结果的结尾字符是否是“……/qws/linux-arm-g++”,如果不是的话需要在
命令行中重新设置TMAKEPATH
export TMAKEPATH=/tmake 的安装路径(如$TMAKEDIR)/lib/qws/linux-arm-g++
此外还要使QTDIR 指向Qt/Embedded 的安装路径,如:
export QTDIR=$QTEDIR 或者直接指定路径
export QTDIR=……/qt-2.3.10
完成了上面的环境变量的设置,并用echo 命令检查无误以后,就可以使用tmake 工
具来生成我们需要的makefile 文件,在命令行中输入如下命令:
$TMAKEDIR/bin/tmake -o makefile progressbar.pro
make
如果没出现错误的话就可以在当前目录下找到progressbar 这个可执行文件,将该程序
复制到/root/share 下,然后在开发板端进行如下操作:
[/mnt/yaffs]#mount -t nfs 192.168.0.56:/root/share /host
[/mnt/yaffs]#cd /host
[/host]#export QTDIR=/usr
[/host]#cd /usr/lib
[/mnt/yaffs/lib]#mkdir fonts
将pc 端$QTEDIR/lib/fonts 下的所有文件复制到开发板/mnt/yaffs/lib/fonts 下。
cd /host
./progressbar -qws
图3.2-10 在Qtopia 下运行的progressbar 程序
本文来自CSDN博客,出处:http://blog.csdn.net/chenhaoqiang/archive/2008/05/03/2368874.aspx
3.3 建立本机Qtopia 虚拟平台
一、实验目的
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
3.4 Qtopia2.1.1 在2410-S 上的移植
一. 实验目的
将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
即可生成可执行文件