搜索
bottom↓
回复: 19

[经验分享]初步:用 Qt 开发 嵌入式linux 的应用程序

[复制链接]

出0入0汤圆

发表于 2014-4-16 12:18:25 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_ZJJ 于 2014-5-7 10:36 编辑

搭建 Qt 开发环境
原则上,Qt的组成如下图所示,分别包括 Creator 和 Library,Creator实现代码及UI设计,并调用Qt封装提供的基于C++的Library。如果在PC端进行开发,则如下的结构即可。



在嵌入式开发领域来看,一般情况下推荐采用以下结构搭建开发的环境,如下图所示:




分别安装 Creator 和所选择的 Library ,之后在 Creator 中添加相关的“构建套件”,既可以在统一平台下对不同目标系统进行编译。
目前,暂时采用如下结构,利用 Qt5 已经包含的 QtCreator 和 Lib(for PC),另外在单独编译安装一套 Lib(for Embedded),将该支持库加入 QtCreator中对应的构造套件中。





怀疑:由于在 Qt Lib 4.8.5 中,官方提供的 Embedded 和 Linux 为同一文件,那在Qt5.2.1中,包含的 Linux Lib 是否已经统一了 x86 Linux 和 Embedded ?有待验证。

前提:
(1)已建立基本的交叉编译环境;
(2)已建立 TFTP 及 NFS 调试环境(可选);
所需资源:
(1)qt-opensource-linux-x86-5.2.1.run                          (388.5M)
(2)qt-everywhere-opensource-src-4.8.5.tar.gz         (解压后651.8M)
http://qt-project.org/downloads

安装流程:
(一)安装 Qt-5.2.1
1. 从qt-project.org下载
qt-5.2.1 for linux 32-bit,下载的文件为*.run文件。
首先,修改文件属性为可执行,如下:
                ~$sudo chmod 777 *******.run
之后,执行该文件
~$./*********.run
2. 在解压得到的Qt5.2.1文件夹里面找到Tools运行QtCreator。
3. 之后在QtCreator里面设置bulid&run,设置编译器 。之前要预装上gcc,gdb,g++。编译器设置为gcc,调试器为gdb。
完成以上过程后,就可以在 PC 端利用 Qt 进行多种类型的应用程序的开始调试,包括 窗口和命令行模式的应用程序开发。
但是,由于所采用的编译环境依然为 x86 体系下,所产生的编译结果只能在 x86 & linux 平台下运行。为了编译产生可以运行于 ARM & Linux 平台的应用程序,必须采用交叉编译方式,在 x86 平台下编译 ARM 平台指令。

理论上说,之前所采用的“编辑器(sublimeText)+编译器(arm-linux-gcc)”的模式,已经可以生成可执行的 ARM 指令序列,在 QT 下也应该可以采用类似的交叉编译模式进行处理。但存在以下几个问题:
首先,Qt本质上是一个基于C++ 的应用程序框架,其包括大量的使用C++实现的函数库,而以后的交叉编译器是  arm-linux-gcc ,而非  arm-linux-g++ 。
其次,从Qt Project的发展过程来看,在Qt5之前的版本,Library 和 Creator是独立存在的,而且专门存在一个针对嵌入式系统的Qt库,例如Qt libraries 4.8.5 for embedded Linux。但发展到目前的Qt-5.2.1之后,就将 Library 和Creator 合并在同一个安装包内,并且仅提供 MAC,WIN,LINUX,iOS,Android 等区别,而不再专门提供嵌入式版本的函数库。查看Linux版本的发布内容,明确为qt-opensource-linux-x86-5.2.1.run,也并非 qt-everywhere-......。
目前通过网络可以检索到的资料,绝大部分均是基于 Qt5 之前的开发环境,均采用 qt-everywhere...库进行编译。
第一,嵌入式开发所使用的 Lib 与 PC 平台所使用不同的库,那即使采用 arm-linux-g++对PC端的代码进行交叉编译,也未必可以顺利获得能够在 ARM_Linux 运行的代码。
第二,现有文献和参考资料绝大部分均是  qt-everywhere 进行编译获得嵌入式版本的静态或动态运行库。暂时采用同样的方式也是为了便于学习。
基于以上所述,暂时采用 qt-everywhere 作为嵌入式开发所涉及的Qt库,不排除将来在熟悉 Qt5 的基础上,完成统一到 Qt5 下进行 x86_Linux 和 ARM_Linux 的开发。
(二)安装 Qt/Embedded-4.8.5
需要说明的是,在Qt Project 的链接里面,Qt libraries 4.8.5 for Linux/X11 和 Qt libraries 4.8.5 for embedded Linux 实际上指向的是同一个文件—— qt-everywhere-opensource-src-4.8.5.tar.gz,下载即可。
基本流程:解压 → 配置 → 生成makefile → 编译 → 安装 五个阶段。
(1)解压文件,执行命令:
        tar -xvzf qt-everywhere-opensource-src-x.x.x.tar.gz
(2)转入该文件夹下,cd qt-everywhere-opensource-src-4.8.3
并执行如下命令:
./configure \
-prefix /usr/local/Trolltech/QtEmbedded-4.8.5-arm-static\ -opensource \
-confirm-license \
-release \
-static \
-fast \
-nomake demos \
-nomake examples \
-nomake tools \
-depths 16,24,32 \
-no-qt3support \
-no-xmlpatterns \
-no-multimedia \
-no-audio-backend \
-no-phonon \
-no-phonon-backend \
-no-svg \
-no-webkit \
-no-javascript-jit \
-no-script \
-no-scripttools \
-no-declarative \
-no-declarative-debug \
-no-mmx \
-no-3dnow \
-no-sse \
-no-sse2 \
-no-sse3 \
-no-sse4.1 \
-no-sse4.2 \
-no-avx \
-no-neon \
-optimized-qmake \
-no-pch \
-no-sql-sqlite \
-qt-libjpeg \
-qt-zlib \
-no-libpng \
-no-libtiff \
-no-libmng \
-no-opengl \
-no-openssl \
-no-nis \
-no-cups \
-no-iconv \
-no-dbus \
-no-glib \
-no-xcursor \
-no-xfixes \
-no-xrandr \
-no-xrender \
-no-separate-debug-info \
-embedded arm \
-xplatform qws/linux-arm-g++

具体配置参数的含义参考如下链接:[2]http://blog.csdn.net/li_hai/article/details/5006454

(3)生成makefile,执行命令:
        make
(4)根据生成的makefile文件,进行按照,执行命令:
        make install
另外,可以参考[http://blog.csdn.net/csf111/article/details/9324277]的结构,用同一份qt-everywhere-opensource-src-4.x.x.tar.gz,编译获得不同的 Library 支持库,再从 Creator 中添加相关的库和编译器,获得同样的跨平台开发环境。如下:
首先分别解压 tar –zxvf qt-everywhere-opensource-src-4.7.1.tar.gz,并分别复制三份,命名成qt-4.7.1-arm、qt-4.7.1-x86、qt-4.7.1-pc不同的文件夹;
其次,对每一个文件夹,在配置阶段(./configure)采用不同的参数即可获得不同的库;
接下来,使用make命令,分别生成对应的makefile:make ,这一阶段根据配置内容和范围的大小,可以历时最多3个小时;
最后,采用指令 make install完成安装。
(三)添加构造套件
选择“项目”,通过“添加构造套件”或“管理构造套件”,进入套件的编辑页面。在如下页面中,选择“构建和运行”,分别编辑“构建套件”,“Qt Visions”和“编译器”页面,添加 ARM-LINUX-G++ 编译器,
以及刚刚编译获得的qmake。
在完成如上所示的设置后,既可以看到新增的构建套件,名称设置为Qt-ARM,以区别于桌面目标系统。

在如下图所示位置,可以选择不同的目标平台,分别包括:桌面系统的调试和发布版本,远程主机(arm linux target)的调试和发布版本。

在成功编译后,即可在项目文件下看到对应版本的编译结果。
如下图所示,从左起分别为:桌面调试,桌面发布,远程调试和远程发布,以及与具体平台无关的源代码部分。
至此,最基本的跨平台编译环境已经建立,可以将编译的产生的.bin 文件,cp 到 NFS 加载的根文件系统中。
最后,将Qt/Embedded编译过程中,配置参数指定位置 /usr/local/Trolltech/QtEmbedded-4.8.5-arm-static中的如下四个函数库复制到 target 的根文件系统的相同位置,完成Qt在 ARM-LINUX 端的“移植”。
完成后,既可以在target中,通过 ./progarmName -qws 运行。

---------------------------------------
本人在这个方面非常初级,如果理解错误的地方,欢迎有更好方案的朋友提出来拍砖讨论。让大家把这个东西搞起来。

出0入0汤圆

发表于 2014-4-16 12:25:33 | 显示全部楼层
目标的桌面GUI怎么指定,比如目标设备可以能是xubuntu、lubuntu等等或者干脆没有桌面GUI

出0入0汤圆

发表于 2014-4-16 12:25:51 | 显示全部楼层
没学过C++的表示Qt很难受
有时间打算用PyQt了。。。好歹以前学过python

出0入25汤圆

发表于 2014-4-16 12:48:04 | 显示全部楼层
Jordan?? 发表于 2014-4-16 12:25
没学过C++的表示Qt很难受
有时间打算用PyQt了。。。好歹以前学过python ...

PyQt电脑上用的,ARM9上跑没戏。。。

出0入0汤圆

发表于 2014-4-16 13:28:36 | 显示全部楼层
XIVN1987 发表于 2014-4-16 12:48
PyQt电脑上用的,ARM9上跑没戏。。。

ARM9不行
A8 A9应该没问题吧?

出0入0汤圆

发表于 2014-4-16 13:49:28 | 显示全部楼层
Jordan?? 发表于 2014-4-16 12:25
没学过C++的表示Qt很难受
有时间打算用PyQt了。。。好歹以前学过python ...

握个爪 ,python是个好东西啊.我也在学习

出0入0汤圆

发表于 2014-4-17 11:30:47 | 显示全部楼层
非常感谢楼主分享学习经验~~给广大小伙伴们带来福利啊

出0入0汤圆

 楼主| 发表于 2014-4-18 12:07:26 | 显示全部楼层
PC 用的5.2.1的库,ARM用的4.8.5的库,调试串口就体现差异啦。为了统一起来,我又到qt去找了一下,原来Qt5.2.1 也有 everywhere的源码包,编译了PC 上用的,但编译 arm 上用的就不行
./configure -embedded arm
会报错,无效指令。qt这货每个版本的变化这么大吗?

出0入0汤圆

发表于 2014-4-18 12:28:06 | 显示全部楼层
图挂了,图呢?

出0入0汤圆

发表于 2014-4-18 12:30:08 | 显示全部楼层
好吧。。看一下,学习了

出0入0汤圆

 楼主| 发表于 2014-4-18 13:41:33 | 显示全部楼层

对不起,复制过来发现图没有过来。现在遇到一些问题,这个可能还会修改
我处理好了,再发成PDF,

目前用的 qt-everywhere-source-src-5.2.1 ,  configure 了一下,但没有 embedded 命令,查看了一下帮助文件,对比 4.8.5 的帮助,好像真的没有
Embedded 这个命令选项啦。
目前还在处理这个问题。

之前用 5.2.1 + 4.8.5 的方式虽然可以用,但有些操作在两边不一致,比较烦,就像统一到5.2.1 下,还在google中。

出0入0汤圆

发表于 2014-4-18 13:53:42 | 显示全部楼层
leoyang 发表于 2014-4-18 13:41
对不起,复制过来发现图没有过来。现在遇到一些问题,这个可能还会修改
我处理好了,再发成PDF,

3Q,目前我刚刚接触QT,还需要请大侠多指教

出0入0汤圆

发表于 2014-4-19 11:02:16 | 显示全部楼层
帮顶。。。。。。

出0入0汤圆

 楼主| 发表于 2014-4-21 14:56:56 | 显示全部楼层
更新一下:
在PC和ARM ,统一采用 qt 4.8.5。更新一个有图有真相的pdf文档。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-4-21 15:23:17 | 显示全部楼层
leoyang 发表于 2014-4-21 14:56
更新一下:
在PC和ARM ,统一采用 qt 4.8.5。更新一个有图有真相的pdf文档。

非常感谢楼主无私的分享,赞~~

出0入0汤圆

 楼主| 发表于 2014-4-21 15:45:25 | 显示全部楼层
FSL_TICS_Rita 发表于 2014-4-21 15:23
非常感谢楼主无私的分享,赞~~

这段时间也从网络上学了好多,折腾啊。
写出来自己总结备忘,作为工作文档,也给和我一样的新手提供一点参考。

出0入0汤圆

发表于 2014-4-21 17:18:01 | 显示全部楼层
leoyang 发表于 2014-4-21 15:45
这段时间也从网络上学了好多,折腾啊。
写出来自己总结备忘,作为工作文档,也给和我一样的新手提供一点 ...

非常不错~~支持ing。如果楼主遇到问题也可以在论坛中提问交流的 ~~

出0入0汤圆

 楼主| 发表于 2014-4-22 08:29:29 | 显示全部楼层
还差一点忘记了,记得需要在 tatget 上配置环境变量指明复制的库的路径,否则不能运行。

出0入4汤圆

发表于 2014-4-22 08:58:59 | 显示全部楼层
非常感谢楼主无私的分享,赞~~

出0入0汤圆

发表于 2014-4-24 17:14:04 | 显示全部楼层
非常感激,正准备用呢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 19:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表