zoukankan      html  css  js  c++  java
  • tslib1.4与Qt4.8.6的交叉编译与移植

     最近开始正式接触QT开发,网上看了些移植教程都写的有点乱,博客园的emouse思·睿有一篇写的很好的文章,下面是文章的链接

    http://www.cnblogs.com/emouse/archive/2013/01/29/2881311.html

    我结合自己编译移植过程中遇到的问题重新整理下,写下这篇博客,大部分跟上面的一样,但也有些原帖没有的东西,算是一个总结。

    就像上面那位老兄说的“Linux的东西搞起来麻烦的地方就在于太杂、太散”,这个我十分同意,有时候少做了那么一个步骤,后面就会出错,到网上搜半天才能解决。这就是所谓的蛋疼吧。

    QT个各版本之间是存在差异的,qt-creator和qt-library尽量用最新的吧。


    先大致说一下整个过程:

    首先,在PC上交叉编译tslib和Qt(交叉编译是为了生成在开发板上能用的文件),然后将生成文件下载或拷到开发板上,我是用SD卡拷的。然后将开发板的环境变量设置好,移植就算成功了,大概过程就是这样。


    下面正式开始:

    软件平台


    Linux:Ubuntu 12.04(32位,尽量用32位的,不然还得安装32位的库文件。)

    qt-library:4.8.6

    qt-creator:5.3.0

    交叉编译工具链:arm-linux-gcc (version 4.4.6)

    tslib编译与安装


    tslib是电阻式触摸屏用于校准的一个软件库,是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。因此这里先编译安装tslib,这样在后面编译Qt的时候才能打包编译进去。

    准备工作:安装以下三个软件(原帖中autoconf无需安装,另外需安装libtool

    sudo apt-get install automake
    sudo apt-get install autogen
    sudo apt-get install libtool

    安装完上面的3个软件以后,将下载的tarlib-1.4源码解压编译安装

    # tar -zxvf tslib-1.4.tar.gz
    # cd tslib
    # ./autogen.sh
    #./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/usr/local/tslib 
    # make # make install

     编译过程中,有一个问题,

    在make时出错,提示
    In function ‘open’,
    inlined from ‘main’ at ts_calibrate.c:229:11:
    /usr/include/bits/fcntl2.h:51:24: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments
    make[2]: *** [ts_calibrate.o] Error 1
    解决方法:
    这是因为open函数的语法不符合最新的gcc,在/tests/ts_calibrate.c中加入open的第三个参数0777:
    #cd tests/
    #vi ts_calibrate

    修改如下

    if ((calfile = getenv("TSLIB_CALIBFILE")) != NULL) {
        cal_fd = open (calfile, O_CREAT | O_RDWR, 0777);
    } else {
        cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR, 0777);
    }

    tslib的开发板移植与测试


    将tslib文件夹整个拷到开发板/usr/local/目录下,然后修改ts.conf文件

    下面是ts.conf文件的第一行与第二行

    # Uncomment if you wish to use the linux input layer event interface
    # module_raw input

    去掉# module_raw input前面的注释,一定要注意中间的空格也去掉,module顶格。

     最后添加环境变量,通过超级终端在开发板系统中添加环境变量,可以在开发板文件系统的/etc/profile文件里添加,也可以直接添加。(若修改/etc/profile,要立即使这些变量生效,还需要修改完后输入命令source /etc/profile)

    export set TSLIB_FBDEVICE=/dev/fb0
    export set TSLIB_TSDEVICE=/dev/event3
    export set TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf
    export set TSLIB_CALIBFILE=/etc/pointercal
    export set TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts                                       
    说明: 
                    TSLIB_TSDEVICE        //触摸屏设备文件名,这个需要选对
    TSLIB_CALIBFILE //校准的数据文件,由ts_calibrate校准程序生成。 SLIB_CONFFILE //配置文件名。 TSLIB_PLUGINDIR //插件目录 TSLIB_CONSOLEDEVICE //控制台设备文件名 TSLIB_FBDEVICE //设备名 以上环境变量在实际开发中的实际配置可以根据实际情况决定。而这些指定的设备节点一定要和你的开发板上的/dev目录下的设备节点相对应。

    最后运行测验程序

    ts_calibrate 进行校验   ts_test      进行测试

    测试结果如下图所示:(这里就用他的图了,懒得拍)

    SNAGHTML2232630

    image

    QT 的交叉编译与安装


    首先配置,同样是通过运行./configure来生成Makefile,由于配置项较多,所以把它写成一个脚本,如下

    #!/bin/sh
    ./configure 
    -opensource 
    -confirm-license 
    -release -shared 
    -embedded arm 
    -xplatform qws/linux-arm-g++ 
    -depths 16,18,24,32 
    -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 
    -no-phonon 
    -no-nis 
    -no-opengl 
    -no-cups 
    -no-glib 
    -no-xcursor -no-xfixes -no-xrandr -no-xrender 
    -no-separate-debug-info 
    -nomake examples -nomake tools -nomake docs 
    -qt-mouse-tslib 
    -I/usr/local/tslib/include 
    -L/usr/local/tslib/lib
    
    exit

    上面的主要参数含义说明如下:
    -embedded arm: 表示将编译针对 arm 平台的 embedded 版本;  
    -xplatform qws/linux-arm-g++: 表示使用 arm-linux 交叉编译器进行编译;  
    -qt-mouse-tslib: 表示将使用 tslib 来驱动触摸屏;

    运行脚本

    #chmod +x autoconfig
    #./autoconfig

    成功后会出现如下信息

    Qt is now configured for building. Just run 'make'.
    Once everything is built, you must run 'make install'.
    Qt will be installed into /usr/local/Trolltech/QtEmbedded-4.8.4-arm
    
    To reconfigure, run 'make confclean' and 'configure'.

    接下来执行make进行编译

    编译完后执行make install 进行安装。

    可以在文件夹/usr/local/Trolltech/下看到刚刚编译好的Qt文件夹。


    移植到开发板


    将编译的文件夹,PC中的/usr/local/Trolltech/Qt-4.8.6/,拷到开发板的/usr/local/目录下,我是用SD卡拷的。

    设置环境变量:

    我直接修改profile文件
    #vi /etc/profile

    在最后加入以下内容

    export set QTDIR=/usr/local/Qt-4.8.6   #目录名要与拷贝的Qt文件夹名一致                     
    export set LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
    export set PATH=$QTDIR/bin:$PATH  
    export set MANPATH=$QTDIR/man:$MANPATH            
    export set QT_QWS_FONTDIR=/usr/local/Qt-4.8.6/lib/fonts
    export set QWS_MOUSE_PROTO=tslib:/dev/event3 #重要

    立即使用变量

    #source /etc/profile


    到此为止,QT的移植算是成功了

    可以用Qt自带的示例程序来测试一下,

    # cd /usr/local/Qt-4.8.6/demos/

    此文件夹下有很多示例程序,随便选一个运行。

    例如

    cd affine/
    ./affine -qws 

    必须要加参数-qws

  • 相关阅读:
    [Sdoi2016]征途
    何时会发生db file sequential read等待事件?
    oracle分布式事务总结
    db file scattered read 等待事件
    db file sequential read (数据文件顺序读取)
    INDEX_JOIN
    Oracle优化器介绍
    GC Buffer Busy Waits处理(转载)
    Oracle V$SESSION详解
    Oracle锁表(转载)
  • 原文地址:https://www.cnblogs.com/Jasonsblog/p/3757985.html
Copyright © 2011-2022 走看看