1、移植准备(环境搭建)
1.1编译所需环境和资源
1、Qt源码包:Qt4.6源码包 :qt-everywhere-opensource-src-4.6.3.tar.gz
2、交叉编译工具:arm-linux-gcc-4.4.3-20100728.tar
3、触摸屏校验工具 :tslib-1.4.tar.gz
4、PC运行的OS 环境:Ubuntu10.10
5、mini/micro 2440开发板
1.2安装交叉编译器
把交叉编译工具包放到根目录下,执行命令如下:
$tar zxvf arm-linux-gcc-4.4.3-20100728.tar-C /
解压后产生一个目录:/opt/FriendlyARM/toolschain/4.4.3,进入该目录,进入bin目录,执行命令如下:
$pwd >> /$HOME/.bashrc #pwd >> /root/.bashrc
接着执行命令如下:
$gedit /$HOME/.bashrc #gedit /root/.bashrc
然后修改最后一行:exportPATH=/opt/FriendlyARM/toolschain/4.4.3/bin:$PATH
为了使配置的环境立即生效,接着执行如下命令:
$source /$HMOE/.bashrc #source /root/.bashrc
查看版本信息,执行命令:
$arm-linux-gcc –v
出现正确版本,说明配置交叉编译器成功。
1.3 安装触摸屏校验工具
把tslib-1.4.tar.gz放到一个目录下,比如/opt目录下。接着执行命令如下:
tar zxvf tslib-1.4.tar.gz
执行命令cd tslib,进入tslib当前目录,接着执行命令如下:
source autogen.sh
然后接着执行配置命令:
./configure --prefix=/usr/local/tslib --host=arm-linuxac_cv_func_malloc_0_nonnull=yes
最后执行编译命令和安装命令如下:
make
make install
如果以上步骤没错,则可以在/usr/local/tslib下出现我们需要的库文件,这些库文件我们移植时会用到。
1.4 编译Qt-4.6.3库文件
1.4.1 建立目录
首先在/home/username目录下新建/Qtenv文件夹,为了文件管理方便,再使用mkdir命令在Qtenv下分别建立三个文件夹:arm,x86,qtsdk。
qtsdk用于安装QT-X11;
x86用于存放QTE的x86版本。
arm用于存放QTE的arm版本;
1.4.2.安装QT-X11:
qt-sdk-linux-x86-opensource-2010.05.1.bin放在/qtsdk文件夹中
$ cd ~/Qtenv/qtsdk
$chmod u+x qt-sdk-linux-x86-opensource-2010.05.1.bin
$./qt-sdk-linux-x86-opensource-2010.05.1.bin
之后开始图形化的安装,然后选择安装目录为/home/username/Qtenv/qtsdk,一路NEXT。
1.4.3.解压QTE源代码包
1)将源代码包分别复制到/arm和/x86下:
直接在目录下复制即可,不必使用命令行操作。
2)解压缩:
$ cd Qtenv/arm
$ tar xzvf qt-everywhere-opensource-src-4.6.3.tar.gz
(解压gz文件用xzvf,解压bz2 文件用xjvf)
$ mv qt-everywhere-opensource-src-4.6.3 arm
(把/qt-everywhere-opensource-src-4.6.3目录下的文件放到/arm文件夹下,即改名为arm,方便输入)
$ cd Qtenv/x86
$tar xzvf qt-everywhere-opensource-src-4.6.3.tar.gz
(解压gz文件用xzvf,解压bz2 文件用xjvf)
$ mv qt-everywhere-opensource-src-4.6.3 x86
(把/qt-everywhere-opensource-src-4.6.3目录下的文件放到/x86文件夹下,即改名为x86,方便输入)
1.4.4.解压缩后分别针对arm平台和x86平台进行编译配置
(1) 编译x86版本的QT
$ cd ~/Qtenv/x86
$ ./configure -prefix /home/alex/Qtenv/x86 -embedded x86 -nomake docs-nomake demo -nomake examples -qvfb
$ sudo make
$ sudo make install
sudo 获得root权限,否则可能出错。
此过程花费过多时间,大概几个小时左右,视电脑配置而定。
此过程出现错误较多,都可以解决,要有耐性。。。
过程中常见的错误解决方法,见bug列表的文档。
(2) 编译arm版本的QT
$ cd ~/Qtenv/arm
$ sudo make
$ sudo make install
此编译工程中,编译arm版本的工具是arm-linux-g++、编译x86版本的工具是g++;编译的时候注意查看是否正确!尤其是arn的编译经常会出错,遇到错误,见错误bug列表文档。
技巧:
1)configure之后想清除重新来过,使用makeconfclean,再重新configure即可
2)make之后想清除重新来过,使用makeclean,再make
1.4.5. 环境变量的设置
这个也是非常重要的一步,前面说的目录管理,在这一步显的非常重要了
我的处理方法是:在各文件夹下新建shell脚本文件。
1)QT-X11:
$ cd Qtenv/qtsdk
$ sudo gedit setenv.sh
添加如下内容:
PATH=/home/username/Qtenv/qtsdk/qt/bin:$PATH
LD_LIBRARY_PATH=/home/username/Qtenv/qtsdk/lib:$LD_LIBRARY_PATH
export PATH
export LD_LIBRARY_PATH
保存退出,文件放在Qtenv/qtsdk下!
2)x86:
$ cd Qtenv/x86
$ sudo gedit setenv.sh
添加如下内容:
QTEDIR=/home/username/Qtenv/qtsdk/x86
PATH=/home/username/Qtenv/qtsdk/x86/bin:$PATH
LD_LIBRARY_PATH=/home/username/Qtenv/qtsdk/x86/lib:$LD_LIBRARY_PATH
export QTEDIR
export PATH
export LD_LIBRARY_PATH
保存退出文件放在qtenv/x86下!
3)arm:
$ cd qtenv/arm
$ sudo gedit setenv.sh
添加如下内容:
QTEDIR=/home/username/Qtenv/qtsdk/arm
PATH=/home/username/Qtenv/qtsdk/arm/bin:$PATH
LD_LIBRARY_PATH=/home/username/Qtenv/qtsdk/arm/lib:$LD_LIBRARY_PATH
export QTEDIR
export PATH
export LD_LIBRARY_PATH
保存退出文件放在Qtenv/arm下!
在运行的时候分别运行对应的脚本即可,比如我们要用QT-X11:
cd /Qtenv/qtsdk
source setenv.sh
然后就可以用qmake、Creator等工具了.
注意:通过运行这几个shell脚本来改变环境变量。整个环境变量的改变只有在当前终端下才有效。当打开其他终端后,必须重新执行对应的shell脚本。
对应所在的路径,username为当前的用户名,领会意思就行。
1.4.6 独立编译qvfb
前面已经安装了QT-X11和QT for embedded linux,但是当使用QVFB的时候却发现没有安装QVFB。我安装QT-X11的时候是直接从NOKIA网站上下载的SDK,而不是源码包SRC,而 SDK中是不包含QVFB的,源码包也是需要编译的。经过一番折腾摸索,参考了很多资料,下面是详述。
1、安装QVFB,需要知道它在哪儿,我的QT-X11安装在/home/fengchao/qtenv/qtsdk/,而QVFB就是在 qtsdk/qt/tools/qvfb/下,需要经过编译安装才可以使用。编译需要由qmake所生成的makefile,所以要确保qmake可用; 然后需要make来把makefile生成可执行文件qvfb,然后就把它cp到home/fenchao/qtenv/x86/bin的目录下就可以 了。(因为qvfb是用来在电脑上演示用的,所以放在x86环境下)
$ cd Qtenv/qtsdk/ //qtsdk下的环境变量设置文件setenv.sh
$ source setenv.sh //使QT-X11的环境变量生效
$ cd qt/tools/qvfb
$ qmake
$ make
错误:
make的过程中出现一个典型错误:qvfb.cpp:51:24: error: deviceskin.h: No such file or directory
这个问题仍然是环境变量设置的问题,因为QT_SOURCE_TREE的设置使得make的时候找不到deviceskin.h。原因就在于DeviceSkin的代码没有被加入编译qvfb的工程中。
在qvfb.pro这个文件里,可用gedit打开查看
第37行include($[[QT_SOURCE_TREE]]/tools/shared/deviceskin/deviceskin.pri)
那么就需要设置一下该变量QT_SOURCE_TREE
解决方案:
1)首先定位到文件夹:Qtenv/qtsdk/
$ cd Qtenv/qtsdk/qt/tools/qvfb
$ gedit qvfb.pro
将第37行的代码改成如下的样子,或者也可以将$QT_SOURCE_TREE的变量设置好也可以,但是通过实践发现,直接修改的效果要好的多。
include(/home/username/Qtenv/qtsdk/qt/tools/shared/deviceskin/deviceskin.pri)
4)执行qmake,make编译,执行命令为
$ qmake
$ make
5)然后把qtsdk/qt/bin目录下的qvfb文件拷贝到x86/bin下
$ cp qtsdk/qt/bin/qvfb x86/bin
6)最后测试qvfb
$ cd x86
$ source setenv.sh
$ cd x86/bin
$ qvfb &
若出现小窗口(可能是黑色的屏幕),则表示qvfb安装成功;
若想使用qvfb则运行 ./app -qws指令即可,app为生成的可执行文件。
其中工程文件app.pro由qmake生成makefile,再运行make生成可执行文件app,然后运行 qvfb -width 800 -height 600 &,最后运行./app -qws即可执行。
如果在一些文件的make过程中出现错误则再根据错误提示解决即可,一般是缺乏安装文件。
错误可参考错误bug列表的文档。