QT210开发板移植Qt4.6.2笔记

    最近一段时间在QT210开发板上移植了Qt 4.6.2,写篇文章把遇到的问题和自己心得总结一下


1. Qt的版本选择

    对于Qt的版本变迁,可以参考文章:http://hi.baidu.com/cgfscccphmfhsur/item/6534cf18f1866e6c71d5e8cfQt的版本汇总:http://doc.qt.digia.com/(不包括Qt的最新版本)。

    总的来说,集成桌面环境的Qt Extended已经不再提供支持,持续提供支持的是Qt库,即C++ Application Development Framework。所以,使用Qt的库可以拥有Qt的最新功能,可以做出更漂亮的界面。在Ubuntu 10.04版本安装Qt Creator,其中的文档是基于Qt 4.6.2版本,Qt 4.6.2版本也是一个较新的Qt Library版本,因此决定移植Qt 4.6.2(这样,不需要再下载和安装官方的Qt Creator)。

2. Qt开发环境和移植思路

    参考韦东山《嵌入式Linux应用开发完全手册》中对Qtopia 2.2.0的移植,弄清楚了Qt的开发环境。一般来说,需要对Qt源码进行两次编译:一次编译产生Embedded Linux Qt的ARM版本,一次编译产生Embedded Linux Qt的x86版本。第一次编译的目的很清楚,就是要产生在开发板上运行的代码。而第二次编译的主要目的是在主机上对开发的程序进行仿真。我们下载的是Embedded Linux版本的库,源码并没有指定Qt运行的体系结构,我们当然可以编译成在任何体系结构(包括x86)的Qt。在第二次编译时,实际上把我们的主机当做了一个嵌入式环境。

   另外,Qt有一个版本是X11之上的,在主机上编译X11版本和x86体系结构的Embedded Linux版本是不一样的。X11版本在运行时是基于X Windows的,因此,编译X11版本需要X Windows开发环境,即相关的库、头文件。在ubuntu下的软件中心安装Qt Creator之后,也自动安装了qvfb,因此,qvfb就不用再独立编译了。

    关于qvfb:qvfb是在主机上运行帧缓冲虚拟软件,下面是qt-embedded-linux-opensource-src-4.6.2.tar.bz2 源码包中的tools->qvfb->README文件中的部分内容:
    The virtual frame buffer allows a Qt for Embedded Linux program to be developedon your desktop machine, without switching between consoles and X11.  The virtualframebuffer consists of a shared memory region (the virtual frame buffer)and a utility to display the framebuffer in a window.  The display is updatedperiodically, so you will see discrete snapshots of the framebuffer ratherthan each individual drawing operation.  For this reason drawing problemssuch as flickering may not be apparent until theprogram is run using a real framebuffer.

    To use the virtual framebuffer:
    1. Ensure QT_NO_QWS_VFB is not set in qconfig.h (when you configure Qt,add the -qvfb option).
    2. Start qvfb (qvfb should be compiled as a normal Qt for X11 application, NOT as a Qt for EmbeddedLinux application!).
    3. Start a Qt for Embedded Linux server (i.e. construct QApplication with QApplication::GuiServer flag, or run a client with the -qws option).

    也就是qvfb是运行在主机端,基于X11的应用程序。
    因此,如果不在主机上用qvfb仿真的话,只编译ARM版本的Embedded Linux Qt就行了。否则的话,还要编译x86版本的Embedded Linux Qt。

3. Qt 4.6.2 for Embedded Linux的ARM平台的编译

    该编译过程主要注意三点:

    (1) 编译前运行./configure的配置选项。

     tar -jxvf qt-embedded-linux-opensource-src-4.6.2.tar.bz2 解压源码。

     使用以下命令获取embedded版本的配置选项:

     ./configure -embedded -help

     在移植Qt for Embedded Linux时,最重要的就是要弄明白configure命令的各种配置选项。在配置好之后,生成Makefile,然后make,make install就能成功编译。

     下面的文章介绍了这些配置选项(最好还是自己用./configure -embedded -help看看):

    http://blog.csdn.net/dengroj2009/article/details/5650386      

    (2) 使用的编译器。

     http://doc.qt.digia.com/4.6/requirements-embedded-linux.html

     上面的链接中有对编译器版本的要求。使用低版本的编译器会遇到很多的语法错误,并且编译成功了也不一定能够成功运行。我开始使用的是3.4.5版本的编译器,即使改正了编译错误,也还是不能运行,在开发板上仅出现一个鼠标光标的形状,有绿色的方框作为背景,在网上搜索,有人说是交叉编译器版本的问题,使用友善之臂tiny210开发板光盘中的4.5.1版本的交叉编译器重新编译busybox,构建根文件系统,在重新编译Qt之后,成功在开发板上运行。

   (3) 环境变量的设置

   因为Qt应用程序最终在开发板上运行,必须读取环境变量作为配置参数,因此,环境变量的配置非常重要。

    对于环境变量,网上有很多移植的实例可以参考,但是个人觉得最好还是参考官方的文档,因为这个讲的最清楚,最全面。

    http://doc.qt.digia.com/4.6/qt-embedded-envvars.html

  

   下面是具体的移植步骤:

    解压源码。(这个不多说了)

    配置:

     creanovator@ubuntu:~/work/sources/qt-everywhere-opensource-src-4.6.2-arm$ ./configure-prefix /usr/local/Trolltech/QtEmbedded-4.6.2-arm  arm  -release  -opensource  -fast  -no-accessibility   -no-scripttools  -no-mmx  -no-multimedia  -no-svg  -no-webkit  -no-3dnow  -no-sse  -no-sse2  -silent  -qt-libpng  -qt-zlib -qt-libjpeg -no-libtiff -no-multimedia -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl-xplatform qws/linux-arm-g++ -little-endian -qt-freetype -depths 16,32-qt-gfx-linuxfb -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-glib -qt-mouse-pc

     最重要的配置选项用红色标出。关于交叉编译的配置与qt-everywhere-opensource-src-4.6.2-arm/mkspecs/qws文件夹中的内容有关,我的配置是-xplatform qws/linux-arm-g++,那么交叉编译相关的信息就在qt-everywhere-opensource-src-4.6.2-arm/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-none-linux-gnueabi-gcc
QMAKE_CXX               = arm-none-linux-gnueabi-g++
QMAKE_LINK              = arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB  = arm-none-linux-gnueabi-g++

# modifications to linux.conf
QMAKE_AR                = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY    = arm-none-linux-gnueabi-objcopy
QMAKE_STRIP          = arm-none-linux-gnueabi-strip

load(qt_config)

    后面的红色的配置选项是指定使用的显示设备和输入设备。这个只是配置Qt是否支持某种设备,具体在运行时使用那种设备,要由环境变量指定。     
    配置好之后,生成Makefile文件,执行make命令编译,执行make install安装,Qt的库文件、头文件等就会安装在/usr/local/Trolltech/QtEmbedded-4.6.2-arm目录下。

    在开发板上的用于设置环境变量的shell文件SetQtEnv.sh:

   !/bin/sh
    export LD_LIBRARY_PATH=/opt/Qt-4.6.2/lib:$LD_LIBRARY_PATH
    export QWS_SW_CURSOR
    export QT_QWS_FONTDIR=/opt/Qt-4.6.2/lib/fonts
    export HOME=/root
    export QPEDIR=/opt/Qt-4.6.2
    export QWS_SIZE=1024x768
    export QWS_MOUSE_PROTO="MouseMan:/dev/mice"
    export QWS_KEYBOARD=""
    export QWS_DISPLAY="LinuxFb:mmWidth 1024:mmHeight 768:0"

    在开发板上,使用 . ./SetQtEnv.sh执行,注意前面的".",只有加上它,才能更改系统变量,否则只在该脚本运行时设置的环境变量才有效。

    将/usr/local/Trolltech/QtEmbedded-4.6.2-arm文件夹中的内容拷贝到开发板/opt/Qt-4.6.2/目录下。

    设置好环境变量,拷贝好库文件之后,编译好的Qt应用程序就能在开发板上运行了。

   

4. Qt 4.6.2 for Embedded Linux的x86平台的编译

    编译嵌入式x86版本使用的配置命令如下:

    ./configure -prefix /usr/local/Trolltech/QtEmbedded-4.6.2-x86 -embedded x86 -release -opensource -fast -no-accessibility -no-scripttools -no-mmx -no-multimedia -no-svg -no-webkit -no-3dnow  -no-sse  -no-sse2  -silent  -qt-libpng  -qt-zlib -qt-libjpeg -no-libtiff -no-multimedia -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl-xplatform qws/linux-x86-g++ -little-endian -qt-freetype -depths 16,32-qt-gfx-qvfb -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc -qt-kbd-qvfb -qt-mouse-qvfb -no-glib

    注意配置选项的不同之处。

    make,make install之后,保存在/usr/local/Trolltech/QtEmbedded-4.6.2-x86目录下。


5. 使用Qt Creator创建Qt应用程序工程。

    Qt支持跨平台开发,这主要是通过使用qmake根据不同的平台,生成不同的Makefile实现的。在Qt Creator中,指定不同的qmake(在Qt的安装目录下的bin文件夹中),就可以根据不同的平台生成不同的Makefile。


6. 使用qvfb工具

   在主机上编译嵌入式x86版本的Qt应用程序test,首先运行qvfb &命令开启qvfb工具,设置分辨率之后,执行./test -qws -display qvfb,可以看到qvfb中显示Qt应用程序,根开发板上显示的结果一样。

   


  

span style=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值