花了很长时间,终于把Qt移植到mini2440开发板上了,不能说完全成功,总算是完成一大步,各中过程心酸,废话不多说,下面正式讲解移植过程。
移植环境:
win7系统,虚拟机是ubuntu12.04
友善之臂mini2440开发板
Qt版本:4.8.6 交叉编译器版本:4.4.3
一.虚拟机Qt开发环境的搭建
1.上Qt的官网下载Qt的源码包:http://qt-project.org/downloads,下载版本是4.8.6,也可以下载其他的版本
2.安装Qt所需要支持的文件
sudo apt-get install qt4-dev-tools #开发包 sudo apt-get install qtcreator #IDE sudo apt-get install qt4-doc #开发帮助文档 sudo apt-get install qt4-qtconfig #配置工具 sudo apt-get install qt4-demos #DEMO源码 QT
3.下载源码包并进行加压
tar zxvf qt-everywhere-opensource-src-4.8.6.tar.gz
4.进入加压后的文件夹并开始配置
root@rwzhou-virtual-machine:/11rwzhou/qt_leran/qt-everywhere-opensource-src-4.8.6# ./configure
在进行配置的过程中会提示:
Which edition of Qt do you want to use ? Type 'c' if you want to use the Commercial Edition. Type 'o' if you want to use the Open Source Edition.
这样就选择o
然后接下里还有提示:
This is the Open Source Edition. You are licensed to use this software under the terms of the Lesser GNU General Public License (LGPL) versions 2.1. You are also licensed to use this software under the terms of the GNU General Public License (GPL) versions 3. Type '3' to view the GNU General Public License version 3. Type 'L' to view the Lesser GNU General Public License version 2.1. Type 'yes' to accept this license offer. Type 'no' to decline this license offer. Do you accept the terms of either license?
配置完成后会生成Makefile文件,然后执行make语句,执行make的过程会比较长,请耐心等待,不同的电脑配置不同,所花的时间时间也不同,一般是两三个小时,make完成后,就执行make install 指令,完成后将会生成/use/local/Trottrch/Qt-4.8.6文件夹。
其实我们本身的系统就包好有qmake的指令,在//usr/bin目录下,可以使用qmake -v使用查看其版本,版本是不同的。有两种方法可以修改,可以将我们编译生成的qmake添加到环境变量,即/etc/profile文件内,或者修改/usr/bin/下面的qmake的链接路径,查看/usr/bin/qmake的属性可以发现它是链接到/etc/alternatives/qmake,可以进行如下的修改:
root@emouse:/# rm /etc/alternatives/qmake root@emouse:/# ln -s /usr/local/Trolltech/Qt-4.8.4/bin/qmake /etc/alternatives/qmake
5.Qt-creator的安装
上官网下载源文件,我下载的是qt-creator-linux-x86-opensource-2.6.1.bin,给该文件添加可执行权限,并运行
chomd u+x qt-creator-linux-x86-opensource-2.6.1.bin ./qt-creator-linux-x86-opensource-2.6.1.bin
然后之后的安装就和普通软件的安装时一样的。
安装之后的界面如下图所示:
进行到这里,已经可以使用Qtcreator进行开发,不过我们只是搭建了桌面的开发环境,并没有搭建嵌入式开发平台的环境,所以接下来我们要做的就是搭建嵌入式开发平台环境,这也是比较繁琐的。
嵌入式开发平台环境搭建
1.Tsilib的移植
tslib是电阻式触摸屏用于校准的一个软件库,是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口,具体的移植过程请见另一篇博客:http://www.cnblogs.com/rwzhou/p/3830404.html
2.Qt的交叉编译和安装
和pc平台的编译类似,使用我们之前下载的源码包解压,为了对嵌入式平台进行针对的配置,生成一个配置文件:
vim autoconfig.sh
配置文件的内容为:
#!/bin/sh ./configure \ -opensource \ -confirm-license \ -release -shared \ -embedded arm \ -xplatform qws/linux-arm-g++ \ -depths 16,18,24 \ -fast \ -optimized-qmake \ -pch \ -qt-sql-sqlite \ -qt-libjpeg \ -qt-zlib \ -qt-libpng \ -qt-freetype \ -little-endian -host-little-endian \ -no-qt3support \ -no-libtiff -no-libmng \ -no-opengl \ -no-mmx -no-sse -no-sse2 \ -no-3dnow \ -no-openssl \ -no-webkit \ -no-qvfb \ -no-phonon \ -no-nis \ -no-opengl \ -no-cups \ -no-glib \ -no-xcursor -no-xfixes -no-xrandr -no-xrender \ -no-separate-debug-info \ -nomake examples -nomake tools -nomake docs \ -qt-mouse-tslib \ -I/usr/local/tslib/include \ -L/usr/local/tslib/lib exit
这个文件时copy别人的,所以有些语句也不是很懂,-qt-mouse-tslib \表示利用tslib来驱动屏,-I/usr/local/tslib/include \ -L/usr/local/tslib/lib表示利用tslib的库的支持,所有我们在编译tslib时,路径要相匹配,-xplatform qws/linux-arm-g++ \表示使用交叉编译器进行编译。完成后,在终端执行./autoconfig.sh
配置完成后,生成Makefile会有如下提示:
Qt is now configured for building. Just run 'make'. Once everything is built, you must run 'make install'. Qt will be installed into /usr/local/Trolltech/QtEmbedded-4.8.4-arm To reconfigure, run 'make confclean' and 'configure'.
接下来就是执行make和make install指令,安装完成后会生成安装文件/usr/local/Trolltech/QtEmbedded-4.8.6-arm
3.接下来进行开发板平台的环境的搭建。
将我们生成的Qt的交叉环境库复制到开发板中,目录在/usr/local/Trolltech/QtEmbedded-4.8.6-arm/lib下,可以使用nfs共享的方法将库文件复制到开发板,你可以在开发板自己建立新的文件夹用来存放Qt的库文件,我的放置如下所示:
接下来要设置环境相应的环境变量,修改/etc/profile文件
export TSLIB_TSDEVICE=/dev/input/event0 export TSLIB_CALIBFILE=/etc/pointercal export TSLIB_CONFFILE=/etc/ts.conf export TSLIB_PLUGINDIR=/lib/ts export TSLIB_FBDEVICE=/dev/fb0 export QTEDIR=/opt/qtarm //路径一定要对应相应的路径设置 export PATH=$QTEDIR/bin:$PATH export QT_QWS_FONTDIR=$QTEDIR/lib/fonts //字体库的对应支持 export QWS_MOUSE_PROTO=Tslib:/dev/input/event0 //Qt鼠标设备的枚举者来创建你想要的鼠标设备 export QWS_KEYBOARD=none export LD_LIBRARY_PATH=/lib:$QTEDIR/lib:$LD_LIBRARY_PATH //库文件的路径 export QWS_SIZE=320*240 export QWS_DISPLAY="LinuxFb:mmWidth50:mmHeight75:0" //
这是最重要的一步,如果环境变量设置不正确的话是不能正常运行编译好的Qt程序的,具体的问题我们稍后再分析。
4.在Qt-creator进行构建环境的搭建
打开qt-creator,打开工具-选项,进入构建和运行配置目录
首先添加Qt versions,一个是pc平台,一个是arm平台,要选择对应的qmake程序
对应的编译器是gcc和交叉编译器
添加arm的构建套件,下面的配置要对应上具体的选项,这就添加了arm的构建套件
接下来就可以编写个简单的应用程序,构建后下到开发板上能不能上正常使用,例如只是简单的新建一个工程,在编辑框拖入几个控件,然后进行构建,我们可以使用桌面构建进行构建,直接点运行,就会结果出现。
我们可以使用我们新建的arm构建套件进行构建,由于我们的arm构建套件没有进行部署,所以我们直接点击锤子的图标进行构建
只要配置没问题,一般构建就没有问题,构建完成后会在工程目录下生成
该文件夹,接着进入文件夹,找到执行文件并将其下载到开发板中。我的可执行文件名为hello_world,则在终端执行
./hello_world -qws如果能够正常的话应该会在开发板上显示相同的界面,按钮能够点击,且鼠标箭头可以随着触摸笔移动,但是往往会出现问题,我运行这个问题之后,出现的问题如下所示:
QWSTslibMouseHandlerPrivate: ts_open() failed with error: 'No such file or directory'
出现这个问题后,有显示界面,但是移动触摸笔鼠标不会移动,而且还会点击到开发板上本身存在的图标,所以我们需要杀死开发板的界面进程即Qt进程,使用top命令查看进程号,使用kill命令杀死关于Qt的所有进程,然后运行可执行文件,还是出现一样的问题,说明该程序一启动就崩溃,我们看到的只是假的现像。首先我们可以想到的就是环境变量的设置错误,后来就发现环境变量的配置问题,由于其本身就配置有tslib,在路径上发生了冲突,修改之后能够正常显示,总算是成功了。运行可执行文件,可以使用触摸笔进行操作,也可以关闭程序,只是字体和屏幕的大小没有调整好,接下来要做的就是如何调整它。
从这一次,认识环境变量的设置很是重要,稍微不正确将会导致整个程序无法正常运作。fighting!
参考文章:http://www.cnblogs.com/emouse/archive/2013/01/29/2881311.html