一般而言,Qt应用程序的内容可分为Qt库的编译,Qt库的移植和基于Qt的应用程序的移植。Qt库的编译所花费的耗线性时间代价是最长的,而Qt库的移植是比较简单的一个工作,只需要让串口发送数据到开发板上即可,笔者本人使用的是虚拟机提供的一个共享工具 wmwate-tools,在拷贝某些库的时候会出现不可以预知的错误,重试也无法解决这个问题,解决办法在于把库目录打包共享,这样的出错几率会比较低。最后,应用程序的移植,这部分所花费的非线性时间应该是最长的,在移植调试的过程中将会出现很多很多未能预知的问题,详细的解答将会在本文末尾出做详细笔录。

 

1.  编译的环境和所需要资源 :

Qt源码包 :Qt4.6源码包 :qt-everywhere-opensource-src-4.6.3.tar.gz

http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.6.3.tar.gz

交叉编译工具: arm-linux-gcc 4.1.2 arm920t-eabi.tar.gz

触摸屏校验工具 tslib1.4

PC虚拟机运行的OS Red Hat Enterprise Linux 5

2.  安装交叉编译器 :

主要是解压后要在设置交叉编译器的路径信息,即要为它设置一个环境变量。

   arm920t-eabi.tar.gz 放到/opt 目录下,解压该文件

   # tar xzvf arm920t-eabi.tar.gz

必须说明的是,网上转载该交叉编译器解压开来,产生的是一个/opt/toolchains/arm920t-eabi目录,在这里我们进行目录移动处理,把解压开来的/opt/toolchains/arm920t-eabi目录下面的/toolchains目录的所有内容剪切到系统/opt下面去,同时删除解压开来的/opt目录。

使用友善之臂带的arm-linux-gcc 4.3.2版本的交叉编译工具将会出现错误

   #arm-linux-gcc -v 可以看到版本信息

   #gedit /root/.bashrc

   这是编辑/root/.bashrc文件的命令,在末行添加上交叉编译器的路径信息

 

 

 

3.  安装触摸屏校验工具 :

   tslib-1.4.tar.gz放到/opt目录下

    #tar xvzf tslib-1.4.tar.gz

    #cd tslib

    #./autogen.sh

    #./configure --prefix=/usr/local/tslib --host=arm-linux ac_cv_func_malloc_0_nonnull=yes

    #make

    #make install

这样以后可以看到/usr/local/tslib下有了库文件,移植时会用到。

安装该库的时候费了很大劲,重新安装了libtoolautoconfautomake,有时候或许版本太低或者不匹配,重新安装后,在automake中执行下./automake,如果autogen.sh执行出现错误,或者./configure 出现错误,可以把tslib里面的文件都执行一遍,尤其是aclocal.m4文件,aclocal文件,如果要重新开始,限制性./autogen-clean.sh

如果安装不成功,将automakeautoconf重新安装一次,然后再/automake里面执行automake,然后到/tslib里面重新从autogen-clean.sh开始

4.  编译Qt-4.6.3库:

首先要明确的是,我们需要编译3种不同类型的Qt库,这些库都由源码包qt-everywhere-opensource-src-4.6.3.tar.gz根据不同的配置选项编译而来。

# cd /opt

qt-everywhere-opensource-src-4.6.3.tar.gz复制到这个目录下面,并且解压成三份,并且重命名为Qt-4.6.3-pcQt-4.6.3-x86Qt-4.6.3-arm

qtsdk-2010.04QT Creator2.0的安装目录。Toolchains是交叉编译器的安装目录。

 

1)  进入qt-4.6.3-pc目录,直接运行configure信息并且编译,安装应用Qt库,在默认的情况下将会在/usr/local/Trolltech目录下生成Qt-4.6.3库目录。

# ./configure

# gmake

# gmake install

修改.bashrc信息

编译出来的基于PC机的Qt源码包大概是3.2 GB左右, Qt库大概是900+M本次编译出来的是914M,如果中间有出现什么情况终止了编译,那一定是一些系统库或者是工具没有安装好,在虚拟机装载系统的时候可以选择把大部分工具都装载进来。

2)  进入qt-4.6.3-x86目录,输入编译嵌入式Qt库配置命令,并且进安装,在默认的情况下,将会在/usr/local/Trolltech产生嵌入式Qt库:QtEmbedded-4.6.3

# ./configure -embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb

# gmake

# gmake install

安装下来的嵌入式Qt包大概有2.8GQt库大概是接近1G

进入/usr/local

进入qt-4.6.3-arm目录,输入编译基于arm处理器的配置命令。

修改文件夹下src/3rdparty/freetype/include/freetype/config/ftconfig.h将第330行修改为:"orr    %0, %0,%2, lsl #16/n/t"  /* %0 |= %2 << 16 */,这个错误让偶差点崩溃。

设置环境变量:#export CPLUS_INCLUDE_PATH=/opt/arm920t-eabi/arm-angstrom-linux-gnueabi/include/c++:/opt/arm920t-eabi/arm-angstrom-linux-gnueabi/include/c++/arm-angstrom-linux-gnueabi

可以在/root/./bashrc里面把这句添加进去

这段命令不知道是不是真正需要,还并不确定,为了使得编译不在半路出错,还是写上了,主要是让编译找到arm-linux-gcc的路径

./configure -prefix /usr/local/Trolltech/QtEmbedded-4.6.3-arm -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

 

红色部分主用于指定tslib编译文件,不然的话可能会找不到,导致tslib的功能无法实现而使编译无法正常进行

 

#gmake

#gamke install

在编译的时候出现了错误,可以尝试将/opt/qt-4.6.3-arm/mkspecs/qws/linux-arm-g++/qmake.conf文件修改为下面的内容

# modifications to g++.conf

QMAKE_CC                = arm-linux-gcc   lts

QMAKE_CXX               = arm-linux-g++  lts

QMAKE_LINK              = arm-linux-g++   lts

QMAKE_LINK_SHLIB        = arm-linux-g++  lts

缺少了链接选项

编译顺利结束以后,将会在/usr/local/Trolltech/QtE-4.6.3-arm目录下面产生基于ARM处理器平台的Qt库,73M

下图是编译出来的Qt库的一个容量信息。

 

 

在基于ARM的嵌入式版本的QT4安装成功以后,为了进行交叉编译,即在我们的PCx86处理器上生成另一个处理器ARM可执行的文件,为此,需要一个脚本的文件的引导,

内容如下

 

每次进行交叉编译之前,都必须执行这个脚本,执行命令如下

# source setenv-embedded.sh

 

 

 

 

1.  Qt库的移植

在对开发板的所有操作都必须在PC机的超级终端下完成,在超级终端上对各种文件的操作就是对基于ARM的嵌入式系统的操作。

在开发板的跟目录下新建两个目录

# mkdir mini2440

# mkdir tslib

不管用什么方法,可以选用串口或者是SD卡传输,把PC机下面的/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib目录下面的所有文件全部拷贝过来开发板的/mini2440目录下面,同时,把触摸屏校验工具的安装目录/usr/local/tslib下面所有的内容都拷贝到开发板的/tslib目录下面去。修改相关的环境变量信息

# vi /etc/profile

在该文件末尾处输入如下环境变量信息

#export QTDIR=/mini2440

#export T_ROOT=/tslib

#export PATH=$QTDIR/bin:$PATH

#export TSLIB_CONSOLEDEVICE=none

#export TSLIB_FBDEVICE=/dev/fb0

#export TSLIB_TSDEVICE=/dev/input/event0

#export TSLIB_PLUGINDIR=$T_ROOT/lib/ts

#export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf

#export TSLIB_CALIBFILE=/etc/pointercal

#export QWS_MOUSE_PROTO=tslib:/dev/input/event0

#export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib


 

 参考

 

http://www.arm9home.net/read.php?tid=6758&page=e&#a

http://www.arm9home.net/read.php?tid-5161.html

http://hi.baidu.com/jiyeqian/blog/item/f46d26a2ff3f7da6caefd0d6.html

http://blog.csdn.net/dongliqiang2006/archive/2009/08/30/4500002.aspx

http://www.qtforum.org/article/27370/qtembedded-4-5-0-compile-make-error.html

http://blog.csdn.net/nicholas4856/archive/2010/07/03/5710283.aspx

http://blog.csdn.net/halechan/archive/2010/03/26/5421484.aspx

http://blog.csdn.net/nicholas4856/archive/2010/07/03/5710283.aspx

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐