之前做过关于QT的移植和相关的编程工作,简单的介绍一下,方便以后在开发板上的应用程序的开发。由于移植的QT版本比较高,所以工作相当的繁琐。
Qt的编译过程:
(1) 下载安装文件
登录Qt官方网站,在下载专区里,下载qt-embedded-linux-opensource-src-4.5.2.tar.bz2文件,放在指定的目录下。
获取交叉编译器的安装文件:4.3.1-eabi-armv6-mv20081010.tar.gz。
(2) 安装交叉编译器
首先,找到相应的安装文件包,解压该文件:
#tar xvf 4.3.1-eabi-armv6-mv20081010.tar.gz
然后,创建如下目录:
#mkdir -p /usr/local/arm
#mv 4.3.1-eabi-armv6-mv20081010 /usr/local/arm/
再修改环境变量:
#export PATH=$PATH:/usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-
接着,手动修改添加执行文件:
vi ~/.bash_profile
我的Linux 系统环境如下:
PATH=$PATH:$HOME/bin:/usr/local/arm/4.3.1-eabi-armv6/usr/bin
LD_LIBRARY_PATH=/usr/local/arm/4.3.1-eabi-armv6/gmp/lib:/usr/local/arm/
4.3.1-eabi-armv6/mpfr/lib
export PATH LD_LIBRARY_PATH
unset USERNAME
LANG=en
最后,执行source命令式设置生效:
#source ~/.bash_profile
(3) 编译安装tslib1.4
① 安装编译过程需用到的程序
# apt-get install autoconf
# apt-get install automake
# apt-get install libtool
② 配置编译
# tar xzvf tslib-1.4.tar.gz
# cd tslib
生成./configure
# source autogen.sh
#./configure–prefix=/usr/local/tslib/–host=arm-linuxac_cv_func_malloc_0_nonnull=yes
# make
③ 安装
# make install-strip //生成瘦身应用程序和库
打包:
# tar czvf tslib.tar.gz tslib
④ 复制到NFS文件系统/usr/local目录下解压
# tar xzvf tslib.tar.gz
⑤ 设置环境变量,校准触摸屏。
在天开板终端建立脚本文件,并执行:
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_FBDEVICE=/dev/fb0
export QWS_MOUSE_PROTO=Tslib:/dev/input/event0
注意:触摸屏的前提是你的触摸屏驱动加载进了内核.
可以测试有没有加载触摸屏驱动,cat /dev/input/event0。点击触摸屏,看终端有无显示,若有则表明正确。
在开发板/usr/local/tslib/bin目录下执行校准触摸屏程序:
# ./ts_calibrate
当然,也可以运行此目录下的其他程序进行测试。
(4) 移植流程
通过浏览README文件,可以了解到Qt编译的整个过程。首先是要按自己的实际需求配置Qt源文件,然后指定特定的交叉编译器对Qt源文件进行交叉编译,接着在安装到指定的路径下,最后把生成的,编译通过的Qt文件系统拷贝到相应的目标平台上,并且配置相应的环境变量,使得Qt文件系统移植成功。
(5) 详细了解配置参数
经过上述分析,根据自己定制的要移植的Qt文件系统的配置。我使用的实际配置命令如下:
./configure -release -shared -fast -qt-sql-mysql -plugin-sql-mysql -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-svg -qt-gif -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -make libs -make tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype depths16,18 –qt-mouse-tslib –L/usr/local/tslib/lib –I/usr/local/tslib/include
在配置过程中,需要选择开源模式,并且同意相应的选项提示,才能顺利通过Qt文件系统的配置操作。
在Qt文件系统编译的配置过程,是最耗费时间和精力的工作了。我在实际的编译过程中,就是因为编译之前的配置不够合理,出现了很多的问题。配置参数不合理,不能达到最后移植的要求,导致我编译Qt文件系统多次。所以,在Qt编译配置时候,一定要认真分析每个参数的作用,还要细心发现编译过程中的错误,善于修改一些相关文件的不合理内容。只有这样,才能够成功的编译Qt文件系统,为下一步的移植工作做好准备。
(6) 编译与移植
在配置Qt文件的编译参数后,在Qt文件系统的主目录下,运行make命令即可启动Qt源码的编译。这个编译过程是十分漫长的。在编译的过程中,起初是有PC机上的gcc编译器编译相应的文件的,过后系统会自动使用相应的交叉编译器来编译后面的部分,并且生成可移植的目标Qt文件系统了。
在编译的过程中,可能会出现一些错误,并且错误的形式还是不尽相同的。这就要求我们根据出现的错误一个一个解决才行。最常用的解决方法,就是删除原有的安装文件,因为往往执行重新配置命令后,依然不能彻底的解决问题。再重新解压安装文件,进行再配置。常见的问题有configure配置时候出现:SQL enable supported in test files……的问题。我们可以首先进入config.test文件夹中,修改complie.test文件中的内容,在最后几行上,注释掉make disclean相关的内容。然后,到MySQL源文件中先进行交叉编译,生成目标文件,这样就可以避免重复被编译了。所以,问题就会被解决了。当然,在编译的过程中,也会遇到其他种类的问题的,针对不同的问题使用不同的解决方法,正常的情况下,都会顺利通过编译的。
移植的过程相对来说是比较简单的。把Qt交叉编译好的文件,挂载到ARM开发板的相应路径下,配置QT相关的环境变量就可以了。
在Qt文件系统交叉编译之后,必须通过把其移植到ARM开发板上,才能检测其是否编译成功了,这也是必须做的一步。
(1) minicom配置
在终端中,直接配置minicom。
① 在root用户下,执行minicom –s 命令,进入minicom配置界面;
② 进入配置界面后,ctrl+A~Z是选择配置的各个功能栏;
③ 由于我使用的是笔记连接ARM开发板,所以要用到的是U口转串口的连接线,也就是我要配置的端口不是通常情况下的串口,而是USB口。所以,串口号选择为:/dev/ttyUSB0即可。
④ 其他项的配置:波特率为115200 8N1,Hardware Flow Control设为NO 等。
⑤ 配置完成后,重新启动minicom就可以连接到ARM开发板上了。
(2) nfs-server安装与配置
① 安装
在终端中,执行如下命令:
$sudo apt-get install nfs-kernel-server;
输入密码即可。
② 配置
配置nfs服务很简单,主要修改相应的配置文件,再重新启动nfs服务就可以了。利用vi编辑器修改配置文件,即/etc/exports文件。在文件中,加入PC机上要挂载到开发板的文件目录,并制定授权的ip地址和操作权限。配置好之后,重新启动nfs服务既可以生效了。启动命令是:/etc/init.d/nfs-kernel-server restart 。这样操作之后,就可以把相应的文件挂载到开发板上了。注意,挂载之前,应该通过minicom把开发板的ip地址改为和PC机的ip地址处在同一网段上才可以。
(3) ARM开发板上的环境变量配置
ARM开发板上Qt文件系统的相关环境变量设置如下:
QTDIR 为Qt根文件目录;
LD_LIBRARY_PATH 为QTDIR/lib;
QT_QWS_FONTDIR 为 QTDIR/lib/fonts。
… …
(4) 程序测试
在PC机上,利用Qt-Creater编写一个简单的Qt图形界面的应用程序,以备测试使用。开启终端,进入此应用程序的路径下,执行make clean命令,在删除可执行文件和相应的Makefile文件。在使用上述交叉编译生成的可移植的Qt文件系统中的/bin/qmake命令,重新编译此应用程序。
具体的操作步骤如下:
$/usr/local/Trolltech/QrEmbedded4.5.2/bin/qmake –project
$/usr/local/Trolltech/QrEmbedded4.5.2/bin/qmake
$make
这样,将此可执行文件挂载到开发板上,关闭开发板自带的Qt进程(使用kill命令),设置好开发板的环境变量后,即可运行此程序了。
利用minicom输入运行应用程序的命令,例如:./xxxx –qws 。 如果,在开发板的屏幕上显示该应用程序产生的图形界面,就证明Qt文件系统编译与移植都成功了;否则,就是编译或者移植的过程中存在问题,还需要从开始编译Qt的地方找问题的出处,进行重新编译和移植工作。移植Qt文件系统,是一个相当麻烦而且消耗时间的工作,必须不厌其烦的进行调试和重新编译的。也只有这样,才会最终实现Qt的成功移植。