一、PC环境:
Vmware7.0;
操作系统为:ubuntu9.10;
GCC版本为:4.4.1;
交叉工具链版本为:4.1.1。
二、安装交叉工具链:
QT4最好使用GCC4版本的工具链,这里提供4.1.1版本的交叉工具链,工具链包是:4.1.1_softfloat_withlib.tar.bz2。
将它解压到/opt/crosstool 目录下,在/opt/crosstool 目录下多了一个4.1.1的目录,这个就是4.1.1版本的交叉工具链。
使用4.1.1版本的交叉工具链前,记得设置PATH环境变量。
export PATH=/opt/crosstool/4.1.1/bin:$PATH
三、ubuntu下的QT4开发环境搭建:
开发QT4应用程序需要安装QT4库、头文件和QT开发工具。一般的QT开发环境包括两部分:
1、QT4库文件和头文件;
2、QT4的开发工具,如qmake、uic、moc等工具。
下面介绍在ubuntu下大家QT4开发环境的搭建方法,基于ubuntu平台的QT4开发环境搭建方法一般有三种:
(一)使用apt-get install 从ubuntu源服务器安装QT4开发工具:
如:apt-get install libqt4-dev 等。
ubuntu源服务器上提供的QT4的开发库和工具也可以从新立得软件管理器上搜索QT4的库和开发工具来选择安装。
安装的路径是系统的默认路径,安装完后不用设置环境变量,因为系统已经把相应的库装到对应的目录下了。
(二)使用sdk开发工具包安装:
QT从4.5版本之后提供了sdk安装包,可以从 ftp://ftp.qt.nokia.com/qtsdk/ 下载sdk安装包,sdk安装包包含了QT4
开发所需要的动态库、头文件和开发工具。其中还提供了qtcreator集成开发环境,qtcreator是一个集开发、调试于一体
的图像化开发环境,推荐安装。
如:下载到sdk包 qt-sdk-linux-x86-opensource-2009.04.1.bin
在终端上执行上面的sdk安装包,会弹出安装导向对话框,根据对话框的提示安装就行。
安装完毕后记得设置环境变量:
export QTDIR=安装路径/qt
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
(三)从源码编译安装:
从 ftp://ftp.qt.nokia.com/qt/source/ 下载qt-x11的源码,如下载 qt-x11-opensource-src-4.5.3.tar.gz;
然后在ubuntu终端上,解压、配置、编译、安装。
步骤如下:
1、在你的工作目录下解压源码包:
如在目录/home/andydung下
tar zxvf qt-x11-opensource-src-4.5.3.tar.gz
2、配置源码包:
解压完成后会生成一个文件夹qt-x11-opensource-desktop-4.5.3
进入目录 cd qt-x11-opensource-desktop-4.5.3
执行配置命令./configure
配置时可以使用 -help 查看配置选项。
3、编译:
执行make
配置完之后,产生Makefile文件,是用make编译出来的。
4、安装
make install
默认情况下,会安装在/usr/local/Trolltech/Qt-4.5.2/目录下,可以在配置时使用-prefix 选项配置安装目录。
注意:源码包提供的qt4很多工具源代码,如在源码的tools目录下有个qconfig工具,这个工具是用来细分配置qt4
库的。前面使用 ./configure 来配置属于粗略配置,可以使用qconfig 工具进一步细分配置qt库。
qconfig工具的生成:先进入源码目录下 cd qt-x11-opensource-desktop-4.5.3
再 make tools/qconfig
然后 cp tools/qconfig/qconfig /usr/local/bin/
这样就把qconfig工具配置好了。
一般情况下,使用粗略配置即可,但是在交叉编译qt4库时,希望进一步定制QT4库的大小,就可以使用qconfig工
具了。qconfig在下面配置编译 qt-embedded 时用到。
安装完毕后记得设置环境变量:
export QTDIR=/usr/local/Trolltech/Qt-4.5.3
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
四、 交叉编译 qt-embedded 安装:
(1)交叉编译qt4库
获得源码包 qt-embedded-linux-opensource-src-4.5.3.tar.gz
一般步骤是解压、配置编译、安装。
在解压源码之后,接下来就是配置 qt-embedded。
由于默认的交叉工具链是以 arm-linux-开头的,而我4.1.1工具链是以 arm-linux-gnu-开头的,所以需要修改解压后源码目录下的
mkspecs/qws/linux-arm-g++/qmake.conf 文件,如下所示:
配置的一般方法是在源码目录下使用 ./configure 来粗略配置。
要细微配置QT4的可以使用qtconfig工具。
这里我们在解压qt-embedded 源码后,使用qconfig工具配置qt4:
cd qt-embedded-linux-opensource-src-4.5.3
qtconfig src/corelib/global/qfeatures.txt
启动qtconfig工具之后,出现了一个配置界面,使用这个界面可以选择qt的配置选项。
配置完成后,将配置保存为qconfig-local.h文件,保存在源码目录下的 src/corelib/global/目录下;
为了使QT4支持触摸屏,我们在qconfig-local.h 添加两个宏定义:
#define QT_QWS_IPAQ
#define QT_QWS_IPAQ_RAW
这两个宏是表示qt源码中的自带触摸屏支持。
如: 我的 qconfig-local.h 文件内容如下:
除了使用qtconfig工具得到qconfig-local.h文件外,可以直接编辑生成qconfig-local.h文件。生成qconfig-local.h文件后,接下来
是使用./configure命令配置qt库;
以下是 qt-embedded 的一些配置选项:
./configure -prefix /usr/qt-4.5.3 -debug -opensource -embedded arm -qconfig local -depths 4,8,16
-qt-mouse-linuxtp -nomake examples -nomake demos -nomake tools
这里的配置是:
-prefix 指定安装路径是 /usr/qt-4.5.3
-debug 表示调试版本
-opensource 表示开源版本
-embedded arm 指定平台是arm
-qconfig local 使用细配置文件 qconfig-local.h
-depths 4,8,16 指定每像素的位数
-qt-mouse-linuxtp 指定使用qt指定的触摸屏
-nomake example
-nomake demos
-nomake tools 指定不编译例子和工具
配置完成后,就可以编译安装了:
make
make install
编译的时间比较长,编译安装后,qt4安装在/usr/qt-4.5.3目录下。
(2)QT4应用程序交叉编译:
交叉编译自己开发的QT4应用程序需要配置如下环境变量:
export QTDIR=/usr/qt-4.5.3
export QMAKESPEC=qws/linux-arm-g++
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/bin:$LD_LIBRARY_PATH
例如:在PC上开发了一个qt程序,并且编译运行通过,现在需要交叉编译这个程序;
步骤是先设置上面的环境变量;
然后使用qmake重新生成Makefile文件;
再make就可以了。
五、部署QT4到嵌入式根文件系统
1、根文件系统的基本配置
(1)拷贝C库
由于在交叉编译QT embedded时,我们使用的是4.1.1版本的工具链,原来版本是3.4.5,要将qt移植到ARM的根文件系统中,
必须重新拷贝C库;
步骤如下:
先将原来的C库删除
cd /opt/filesystem
rm -fr lib/*
然后拷贝 /opt/crosstool4.1.1/arm-linux-gnu/lib 目录下的库文件到根文件系统中。拷贝C库参考脚本如下:
for file in libc libcrypt libdl libm libnss_dns libnss_files libpthread libresolv libutil
do
sudo cp /opt/crosstool/4.1.1/arm-linux-gnu/lib/$file-*.so /opt/filesystem/lib
cp -d /opt/crosstool/4.1.1/arm-linux-gnu/lib/$file.so.[*0-9] /opt/filesystem/lib
done
cp -d /opt/crosstool/4.1.1/arm-linux-gnu/lib/ld*.so* /opt/filesystem/lib
cp -d /opt/crosstool/4.1.1/arm-linux-gnu/lib/libgcc_s*.so* /opt/filesystem/lib
cp -d /opt/crosstool/4.1.1/arm-linux-gnu/lib/libstdc++.so* /opt/filesystem/lib
cp -d /opt/crosstool/4.1.1/arm-linux-gnu/lib/libuuid.so* /opt/filesystem/lib
cp -d /opt/crosstool/4.1.1/arm-linux-gnu/lib/libz.so* /opt/filesystem/lib
cp -d /opt/crosstool/4.1.1/arm-linux-gnu/lib/libpng*.so* /opt/filesystem/lib
cp -d /opt/crosstool/4.1.1/arm-linux-gnu/lib/libjpeg.so* /opt/filesystem/lib
(2)配置启动脚本
原来根文件系统的启动流程是,启动的最后一个程序是/bin/sh ,这个shell程序跟我们在PC上用
的bash shell 程序有点区别;
因此,这里将bash程序移植到根文件系统;
bash 移植步骤:
解压 bash.3.2.tar.bz2
tar zxvf bash.3.2.tar.bz2
cd bash-3.2
打上补丁;
patch -Np1 -i ../bash-3.2-fixes-9.patch
编译一个config.cache 文件,内容如下:
ac_cv_func_mmap_fixed_mapped=yes
ac_cv_func_strcoll_works=yes
ac_cv_func_working_mktime=yes
bash_cv_func_sigsetjmp=present
bash_cv_getcwd_malloc=yes
bash_cv_job_control_missing=present
bash_cv_printf_a_format=yes
bash_cv_sys_named_pipes=present
bash_cv_ulimit_maxfds=yes
bash_cv_under_sys_siglist=yes
bash_cv_unusable_rtsigs=no
gt_cv_int_divbyzero_sigfpe=yes
配置编译
./configure --host=arm-linux /
--prefix=/usr --bindir=/bin --cache-file=config.cache /
--without-bash-malloc --enable-static-link
make
拷贝到根文件中
cp bash /opt/filesystem/bin/
上面已经将交叉编译的bash 程序移植到根文件系统中,现在指定启动bash程序;修改/opt/filesystem/etc/inittab 文件,
指定启动bash交互程序;
下面就可以进行QT embedded的部署了。
2、部署QT embedded
部署QT4到根文件系统大概分成两步:
(1)拷贝QT库和QT应用程序到根文件系统中;
(2)配置QT应用程序运行所需要的环境;
(1)拷贝QT库和QT应用程序
自己编写的QT应用程序的运行依赖于QT库。因此,移植QT应用程序到根文件系统时,要将QT库移植到根文件系统中;
如,根文件系统的构建目录是/opt/filesystem , qt-embedded 的安装目录是 /usr/qt-4.5.3 。使用下面的命令
拷贝QT库:
mkdir /opt/filesystem/usr/qt-4.5.3
mkdir /opt/filesystem/usr/qt-4.5.3/lib
cp -a /usr/qt-4.5.3/lib/*so* /opt/filesystem/usr/qt-4.5.3
cp -a /usr/qt-4.5.3/lib/fonts /opt/filesystem/usr/qt-4.5.3/lib
拷贝QT应用程序到根文件系统中,如拷贝到/opt/filesystem/usr/bin目录下。
(2)配置QT应用程序运行环境
bash交互程序启动配置环境变量使用的是 .bashrc 文件,因此在 /opt/filesysytem/ 目录下创建一个 .bashrc文件,
添加如下内容;
在运行QT应用程序时,需要指定如下环境变量:
DISPLAY=:0.0
HOME=/tmp
QTDIR="/usr/qt-4.5.3"
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
QWS_MOUS_PROTO=linuxtp:/dev/touchscreen/0
DISPLAY //指定显示设备
HOME //指定工作目录
QTDIR //指定QT所在目录
LD_LIBRARY_PATH //指定QT库路径
QWS_MOUSE_PROTO //指定使用的触摸屏驱动的设备文件
运行QT程序:
在ARM平台上运行QT程序时,如果是第一次运行QT应用程序,则需要加-qws选项,指定这个程序是server程序,之后启动
的都可以不使用-qws选项。
如:
cd /tmp
hello -qws &
部署QT4需要了解嵌入式根文件系统的基本部署过程,在搭建的根文件系统的基本结构后,再运行QT4的部署。