搭建嵌入式QT4开发环境

一、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 文件,如下所示:

         # # qmake configuration for building with arm-linux-g++ # include(../../common/g++.conf) include(../../common/linux.conf) include(../../common/qws.conf) # modifications to g++.conf QMAKE_CC = arm-linux-gnu-gcc QMAKE_CXX = arm-linux-gnu-g++ QMAKE_LINK = arm-linux-gnu-g++ QMAKE_LINK_SHLIB = arm-linux-gnu-g++ # modifications to linux.conf QMAKE_AR = arm-linux-gnu-ar cqs QMAKE_OBJCOPY = arm-linux-gnu-objcopy QMAKE_STRIP = arm-linux-gnu-strip load(qt_config)     

 

         配置的一般方法是在源码目录下使用 ./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 文件内容如下:

        #ifndef QT_H #endif #ifndef QT_DLL #define QT_DLL #endif #define QT_QWS_IPAQ #define QT_QWS_IPAQ_RAW

 

        除了使用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的部署。

你可能感兴趣的:(搭建嵌入式QT4开发环境)