本文内容:
1:分析Qt、Qt/E 、qtopia的关系。
2:如何搭建qtopia开发平台。
3:分析友善之臂的错误以及基于此理解x86-qtopia和arm-qtopia.
其实搭建环境本身是个比较容易理解的过程,只不过由于Qt、Qt/E 、qtopia版本繁多,相互之间又有一
些不兼容的问题,关于这三者之间的关系,
参考:http://blog.csdn.net/hadise/archive/2010/03/14/5378378.aspx
加上网上的攻略很多,都是针对不同版本不同环境的,有些又是错的,让人一下子不知
所措。那么,就让我来理一理吧。方法有很多种,网上说得比较全,我只说友善的这种方式。
最终目的:
qtopia应用程序开发,就是说,ARM开机之后,在桌面上要有我的应用程序图标,点击后可以运行.
环境:
Fedora9
vmware6.5
mini2440开发板
arm-linux-gcc 4.3.2
方法:
A:先搭建X11平台的qt程序开发平台.
B:安装Qt/E
C:在PC平台写应基于Qt的应用程序,编译运行无错。
D:将源代码拷贝到Qt/E(qtopia)安装目录,然后根据qtopia的特点稍做修改,在X86平台编译,使用
qvfb模拟运行无错。
E:将应用程序源代码拷贝到ARM平台的Qt/E安装文件夹,编译生成可执行文件。
F:移植到板子上。
以下一条一条分析如何实现。
A:先搭建X11平台的qt程序开发平台.
针对我们的目的,其实这一步也不是必须的。如果安装Qt仅仅是为了后期的qtopia应用程序开发做代码编
写测试,也可以在WINDOWS平台做。因为Qt是夸平台的。在windows下的话,由于有VS插件这种工具,相信
做Qt开发还是比较容易的(我还没有尝试过)。
不过由于qtopia主要是针对LINUX,所以在X11平台安装qt,开发流程还是更让人能够理解。另,也可以单
纯学习LINUX QT程序设计。
我自己尝试过下载qt4.6.2安装,结果make的时候,耗费了太多时间(大概4小时),而且最终虚拟机的空
间不够用了,提示:no space left!失败。因此建议以后大家不要安装4.6版本的qt,除非你硬盘够大。
推荐安装Qt3.2,安装方法参考Qt Assistant.
或者参考http://doc.trolltech.com/3.0/install-x11.html (qt官方网站 qt3.0安装方式。qt3版本都
用这种方式安装)
B:安装Qt/E(分析友善之臂的错误以及基于此理解x86-qtopia和arm-qtopia.)
关于这个,就得说说友善的方法了。参考友善的mini2440用户手册。
友善在/opt/FriendlyARM/mini2440/这个目录下,产生了两个子目录,分别是x86-qtopia和arm-qtopia.
可以在两根目录下的build脚本中看出着两个目录的区别。
图1:/opt/FriendlyARM/mini2440/x86-qtopia/build
图2:/opt/FriendlyARM/mini2440/arm-qtopia/build
不难发现:arm-qtopia 和 x86-qtopia下build脚本的内容比,只是少了
cd ..
/bin/rm qtopia-2.2.0-FriendlyARM/qtopia/image/opt/Qtopia/lib/fonts/helvetica_*
tar xfvz fonts.tar.gz -C qtopia-2.2.0-FriendlyARM/qtopia/image
这几句。
不难发现,其实都是对qtopia-2.2.0.tar.gz解压之后安装的。
那么,这两个目录的区别到底体现在哪里呢?
我们继续看它的示例程序hello.
首先看/opt/FriendlyARM/mini2440/x86-qtopia/hello/build这个脚本的内容
图3:/opt/FriendlyARM/mini2440/x86-qtopia/hello/build
可以看出,首先执行/opt/FriendlyARM/mini2440/x86-qtopia/qtopia-2.2.0-FriendlyARM/setQpeEnv设置环境变量,然后根据 hello.pro 文件自动生成Makefile,然后make 生成可执行程序。
再看/opt/FriendlyARM/mini2440/arm-qtopia/hello/build这个脚本的内容
图4:/opt/FriendlyARM/mini2440/arm-qtopia/hello/build
看出区别所在了吧。就是qmake后面所跟的参数中,X86是linux-generic-g++,ARM是linux-arm-g++。注意到setQpeEnv这个脚本的内容基本一样,那么,着两个目录的区别难道就仅仅在这里?这个我以后再验证。有答案了再写出来。
换句话说,如果区别仅仅在这里,那么,完全没必要搞两个文件夹。只不过我在编译应用程序的时候,写脚本注意区分就行了。那么,关于qtopia平台搭建,可以使用友善的方法,也可以只产生一个目录,这个需要后期验证。
具体的安装方法在图一的build脚本中已经写明了。
C、D、E、F4各部分,在以后的文章中再讲了。
下面要说说友善的一个问题
按照友善的手册,在PC平台模拟的hello程序,运行的时候,看到qtopia的框架,但是中间是黑屏
分析这个问题有利于理清开发流程。原因及如下:
在刚开始的时候,hello目录中是没有Makefile的,这个Makefile文件,是用qmake生成的,见hello目录中build内容。因此它以来与hello.pro这个文件。
那么我们来看看hello.pro这个文件的内容。如下:
图5:/opt/FriendlyARM/mini2440/x86-qtopia/hello/hello.pro
注意到生成的可执行文件名字叫 hello ,路径在 $(QPEDIR)/bin/ 下面。顺带说一下,在arm-qtopia这个目录中的相应hello.pro的内容,跟这个一模一样。
我们再看看hello目录下的run-hello脚本内容
图6:/opt/FriendlyARM/mini2440/x86-qtopia/hello/run-hello
可以看出,在PC模拟的时候,首先调用了qvfb工具,然后设置环境变量,最后运行hello.问题就处在最后这句话了。因为run-hello的当前目录不是hello的所在目录,所以脚本找不到hello,自然就成了黑屏。
解决方法:将最后一句话改为$(QPEDIR)/bin/hello -qws!
保存,运行./run-hello ,ok!
下一步打算验证我对arm-qtopia和x86-qtopia区别的理解!