• Qt4.8.5在ARM9上的移植


                                         Qt4.8.5在ARM9开发板上的移植

        以前移植过qtopia-embedded-2.2.0,俗称Qt/E,在早期的Qt框架中是使用X11桌面服务器系统,无法应用于嵌入式平台,为此产生了qtopia,qtopia2.2.0就是一款针对嵌入式小资源平台的GUI系统,他是直接操作嵌入式系统显示设备的FramerBuffer,精简高效。但这是一款过时的产品,奇趣公司在Qt的4.5.0的时候,将Qt/E纳入了Qtopia,推出Qtopia4,可以使用在任何平台上,只需在编译时做相应的配置,这次我们就将移植Qt4.8.5到S3C2440开发板。

        主机环境:Ubuntu12.04 LTS

        编译器:arm-linux-gcc 4.4.3

        开发板:JZ2440,Linux-2.6.32.12

    一. 首先得搞定驱动的问题,主要是触屏的驱动和LCD的驱动,我是直接将两个驱动编译进内核了,针对不同的开发板,驱动是不同的,LCD驱动可以直接移植,但是触屏驱动需要自己写,具体的驱动可以参考友善之臂的触屏驱动。这里不再详细赘述。

    二. 编译tslib库:

        由于Qt的运行会调用tslib的库,所以先移植安装tslib,下载tslib-1.4的压缩文件,百度上到处都有下载的,下载后解压,如果你使用的是4.4.3的编译器的话,一定要注意配置。

    解压后进入目录:

    cd  tslib

    首先安装autoconfig工具:

    sudo   apt-get install autoconf

    sudo   apt-get install automake

    sudo   apt-get install libtool

    然后依次执行:

    sudo   ./autogen.sh

    mkdir   tmp

    sudo   echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache

    sudo   ./configure --host=arm-none-linux-gnueabi

    --cache-file=arm-linux.cache --prefix=$(pwd)/tmp

    CC=/usr/local/arm-tool/bin/arm-linux-gcc CXX=/usr/local/arm-tool/bin/arm-linux-g++

    export   CC=/usr/local/arm-tool/bin/arm-linux-gcc

    export   CXX=/usr/local/arm-tool/bin/arm-linux-g++

    上面需要注意的就是一定要指定交叉编译器的绝对路径,我就是在这个地方弄了好长时间,编译后的文件总是X86的,指定成绝对路径就是交叉编译器了,而且host选项必须是和编译器名一致,而不是编译器的链接名。

    接下来:sudo  make;然后sudo  make  install

    这时就能看到tmp目录下多了编译后的库文件。在开发板的根目录的opt目录中建立tslib,这个目录将是tslib目录的安装位置,最好使用先使用nfs挂载根文件系统,这样可以减少烧写flash的次数,有利于保护开发板,将刚才tmp目录下的所有文件全部拷贝过来,这里我选择全部拷贝。

    三:编译移植Qt4.8.5

        至此,tslib安装结束,下面编译Qt库,下载qt-everywhere-opensource-src-4.8.5.tar.gz,官网有下载,下载后解压进入目录,先要配置,最好写一个配置文件

    vim  autoconfig.sh

    内容为:

    #!/bin/sh

    sudo ./configure

    -prefix /usr/local/qte-arm/

    -force-pkg-config

    -opensource

    -confirm-license

    -release -shared

    -embedded arm

    -xplatform qws/linux-arm-gnueabi-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

    其中的配置选项根据自己的需要添加或删减,选项说明直接./configure --help就出来了,当然上面的可以直接拷贝。

    然后sudo chmod autoconfig.sh 777增加可执行权限,最后sudo ./autoconfig.sh

    即可配置,这里说明一点,-force-pkg-config选项增加后会有警告,直接忽略,但是如果不加的话,则会出错,这个错误是谷歌了好长时间才解决的。

    配置到一半的时候,肯定会弹出类似的错误,

    The tslib functionality test failed!

     You might need to modify the include and library search paths by editing QMAKE_INCDIR and QMAKE_LIBDIR in

    /qt-embedded-linux-opensource-src-4.8.5-arm/mkspecs/qws/linux-arm-g++

    没关系,这个错误有两个原因,一个是没加额外的tslib的链接库文件,还记得刚才编译tslib时用的tmp目录么,现在就要用了,还有一个就是编译器要使用绝对路径,这就是4.4.3版本坑爹的地方,我是试了好长时间才发现的,一开始以为是tslib编译错了,后来发现是编译器要使用绝对路径而不是环境变量。

    打开mkspecs/qws/linux-arm-gnueabi-g++目录下的qmake.conf文件,修改编译器为绝对路径,并添加刚刚那个tmp目录中的库目录,也是绝对路径,我的设置是:

                               

    主要是QMAKE_INCDIR和QMAKE_LIBDIR,对应于你自己编译tslib的库目录。

    然后重新sudo ./autoconfig.sh,

    接下来,就是sudo make,这个过程是个很长的过程,make完了后,sudo make install,就会安装到你设置的目录下,就是-prefix /usr/local/qte-arm/配置选项的目录,但是不知道为什么,我的配置了,他给我安装到了usr的下的默认的目录下了,默认的是/usr/local/Trolltech,但最后的提示确实我配置的目录,显得有点坑爹。至此编译就结束了,一般是不会出错的。在开发板的根文件系统的opt目录下建立Qte目录,

    再进入Qt安装目录下,将其中的四个目录:imports   lib  mkspecs  plugins复制到,/opt/Qte下,也可将demos也复制过来,因为待会要测试,就使用他的程序了。

    四. 测试:

        将/opt/tslib/etc/下的ts.conf打开,将

    # module_raw input一行前面的符号和空格去掉,注意空格也不能留。

    配置环境变量:

    export TSLIB_ROOT=/opt/tslib

    export TSLIB_TSDEVICE=/dev/event0

    export TSLIB_FBDEVICE=/dev/fb0

    export TSLIB_PLUGINDIR=/opt/tslib/lib/ts

    export TSLIB_CONSOLEDEVICE=none

    export TSLIB_CONFFILE=/opt/tslib/etc/ts.conf

    export POINTERCAL_FILE=/etc/pointercal

    export TSLIB_CALIBFILE=/etc/pointercal

    export QWS_SIZE=480x272

    export QWS_MOUSE_PROTO=Tslib:/dev/event0

    export QTDIR=/opt/Qte

    export QPEDIR=/opt/Qte

    export PATH=$QTDIR/bin:$PATH

    export QWS_DISPLAY=LinuxFb:/dev/fb0

    export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$QTDIR/lib:$LD_LIBRARY_PATH

    export QT_QWS_FONTDIR=$QTDIR/lib/fonts

    如果你的开发板刚刚的目录设置和我一样的话,可以直接使用,不同的话根据自己的设置配置,根据环境变量的名字应该能看出每个目录代表什么,主要就是tslib和Qt的安装目录,同时配置屏幕的大小,我的是480X272的,还有就是输入子系统的文件节点,基本都差不多的。OK,下面,将demos下的一个可执行文件随便拷贝一个过来,先进入tslib的bin目录,执行./ts_calibrate校准触屏,然后执行一个Qt程序,./textedit -qws就可以看到打开了一个文本编辑器,./mainwindow -qws就可以打开一个窗口界面,

     

    这些程序在demos目录下需要拷贝到开发板上执行,执行成功则说明移植成功,接下来,编写一个脚本文件,将上述环境变量的设置写入脚本文件,开机执行,并且在/etc/init.d/rcS中写入开机启动Qt程序的命令,则开机即可看到优美的GUI界面了,OK。至此,移植完成。

  • 相关阅读:
    驯服 Tiger: 并发集合 超越 Map、Collection、List 和 Set
    模块化Java:声明式模块化
    模块化Java:静态模块化
    用 Apache Tika 理解信息内容
    Refactoring: Encapsulate Collection
    新型的几乎万能的数据结构CDO
    CDO数据结构基础(1) 转载
    模块化Java简介(转载infoq)
    模块化Java:动态模块化
    责任链模式(C++)
  • 原文地址:https://www.cnblogs.com/crazywangzx/p/3567725.html
Copyright © 2020-2023  润新知