最近开始正式接触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

  1. sudo apt-get install automake
  2. sudo apt-get install autogen
  3. sudo apt-get install libtool

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

  1. # tar -zxvf tslib-1.4.tar.gz
  2. # cd tslib
  3. # ./autogen.sh
  4. #./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/usr/local/tslib
    # make
  5. # 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:
  1. #cd tests/
  2. #vi ts_calibrate

修改如下

  1. if ((calfile = getenv("TSLIB_CALIBFILE")) != NULL) {
  2. cal_fd = open (calfile, O_CREAT | O_RDWR, );
  3. } else {
  4. cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR, );
  5. }

tslib的开发板移植与测试


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

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

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

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

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

  1. 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                                       
  1. 说明:
  2. TSLIB_TSDEVICE //触摸屏设备文件名,这个需要选对
    TSLIB_CALIBFILE //校准的数据文件,由ts_calibrate校准程序生成。
  3. SLIB_CONFFILE //配置文件名。
  4. TSLIB_PLUGINDIR //插件目录
  5. TSLIB_CONSOLEDEVICE //控制台设备文件名
  6. TSLIB_FBDEVICE //设备名
  7.  
  8. 以上环境变量在实际开发中的实际配置可以根据实际情况决定。而这些指定的设备节点一定要和你的开发板上的/dev目录下的设备节点相对应。

最后运行测验程序

ts_calibrate 进行校验   ts_test      进行测试

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

QT 的交叉编译与安装


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

  1. #!/bin/sh
  2. ./configure \
  3. -opensource \
  4. -confirm-license \
  5. -release -shared \
  6. -embedded arm \
  7. -xplatform qws/linux-arm-g++ \
  8. -depths 16,18,24,32 \
  9. -fast \
  10. -optimized-qmake \
  11. -pch \
  12. -qt-sql-sqlite \
  13. -qt-libjpeg \
  14. -qt-zlib \
  15. -qt-libpng \
  16. -qt-freetype \
  17. -little-endian -host-little-endian \
  18. -no-qt3support \
  19. -no-libtiff -no-libmng \
  20. -no-opengl \
  21. -no-mmx -no-sse -no-sse2 \
  22. -no-3dnow \
  23. -no-openssl \
  24. -no-webkit \
  25. -no-qvfb \
  26. -no-phonon \
  27. -no-nis \
  28. -no-opengl \
  29. -no-cups \
  30. -no-glib \
  31. -no-xcursor -no-xfixes -no-xrandr -no-xrender \
  32. -no-separate-debug-info \
  33. -nomake examples -nomake tools -nomake docs \
  34. -qt-mouse-tslib \
  35. -I/usr/local/tslib/include \
  36. -L/usr/local/tslib/lib
  37.  
  38. exit

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

运行脚本

  1. #chmod +x autoconfig
  2. #./autoconfig

成功后会出现如下信息

  1. Qt is now configured for building. Just run 'make'.
  2. Once everything is built, you must run 'make install'.
  3. Qt will be installed into /usr/local/Trolltech/QtEmbedded-4.8.4-arm
  4.  
  5. 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卡拷的。

设置环境变量:

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

在最后加入以下内容

  1. 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 #重要

立即使用变量

  1. #source /etc/profile

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

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

  1. # cd /usr/local/Qt-4.8./demos/

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

例如

  1. cd affine/
  2. ./affine -qws

必须要加参数-qws

tslib1.4与Qt4.8.6的交叉编译与移植的更多相关文章

  1. [转载]tslib1.4与Qt4.8.6的交叉编译与移植

    原文:http://www.cnblogs.com/Jasonsblog/p/3757985.html http://blog.csdn.net/sno_guo/article/details/168 ...

  2. Linux开源模块迁移概述暨交叉编译跨平台移植总结--从《嵌入式Linux驱动模板简洁和工程实践》

    本文摘录<嵌入式Linux驱动模板简洁和工程实践>一本书"开发和调试技术". Linux强大的是,有那么多的开源项目可以使用.通常非常需要可以通过寻找相关的源模块被定义 ...

  3. Windows7下移植Qt4.8.4项目到QT5.2上时遇到的一些问题

        最近在Windows7下将Qt4.8.4+MSVC2008的项目移植到QT5.2下时,遇到了一些小问题: 问题一:错误:C1083: 无法打开包括文件:"QApplication&q ...

  4. QT开发实战一:图片显示

    测试平台 宿主机平台:Ubuntu 12.04.4 LTS 目标机:Easy-ARM IMX283 目标机内核:Linux 2.6.35.3 QT版本:Qt-4.7.3 Tslib版本:tslib-1 ...

  5. Zynq7000开发系列-7(在Zybo上运行Linaro桌面系统)

    目标板:Zybo(7Z010) 主机操作系统:Ubuntu 14.04.5 LTS 64bit 交叉编译链: arm-xilinx-linux-gnueabi-       [gcc version ...

  6. 高效c/c++日志工具zlog使用介绍

    1. zlog简介 zlog的资料网上很多,这里不在详细说明:zlog是用c写的一个日志工具,非常小,而且高效,可以同时向控制台和文件中输出,日志接口与printf使用基本一样,所以使用起来很简单. ...

  7. qt4.7.0 交叉编译环境搭建经验总结

    一.前期软件准备: 1 .虚拟机fedora9.到fedora官网下载,地址 http://fedoraproject.org/   版本推荐使用fedora9,在vm内安装,并且不安装vmware ...

  8. 嵌入式V3s交叉编译 tslib和QT4.8.7,并使用Qt Creator编译项目

    本文主参考:http://zero.lichee.pro/%E5%BA%94%E7%94%A8/QT_index.html 环境 Ubuntu16 64位 arm-linux-gnueabihf ve ...

  9. Ubuntu14.04配置gcc4.4.4+Qt4.8.4交叉编译环境

    安装32位程序运行支持 sudo apt-get install lib32stdc++6 lib32z1 lib32ncurses5 lib32bz2-1.0 可能报错: lib32stdc++6 ...

随机推荐

  1. JavaScript 设计模式之工厂模式

  2. 一个Demo学完Android中所有的服务(转)

    说明:这个例子实现了Android中常见的许多服务,下面是实现的截图 接下来,以源代码的方式分析这个例子   1.MainActivity--主界面 这个类主要是实现用户所看到的这个Activity, ...

  3. paper 99:CV界的明星人物经典介绍

            CV人物1:Jianbo Shi史建波毕业于UC Berkeley,导师是Jitendra Malik.其最有影响力的研究成果:图像分割.其于2000年在PAMI上多人合作发表”Nor ...

  4. Redhat 7使用CentOS 7的Yum网络源

    由于redhat 的更新包只对注册的用户生效,所以需要自己手动更改成CentOS 的更新包,CentOS几乎和redhat是一样的,所以无需担心软件包是否可安装,安装之后是否有问题,另外CentOS公 ...

  5. [转]ASP.NET MVC Json()处理大数据异常解决方法 json maxjsonlength

    本文转自:http://blog.csdn.net/blacksource/article/details/18797055 先对项目做个简单介绍: 整个项目采用微软的ASP.NET MVC3进行开发 ...

  6. em

    macro jumptocaller(){    JumpToLocation(GetSymbolLocation((GetCurSymbol ())))}

  7. MVC5 + EF6 完整入门教程三

    期待已久的EF终于来了. 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程. 本次将会完成EF数据模型的搭建和使用. 基于这个模型,将之前的示例添加数据库查询验证功能. 文章提纲 概述 & ...

  8. 常用HTML正则表达式

    1.只能输入数字和英文的: <input onkeyup="value=value.replace(/[\W]/g,'') " > 2.只能输入数字的: <inp ...

  9. sql注入过滤的公共方法

    /// <summary> ///SQL注入过滤 /// </summary> /// <param name="InText">要过滤的字符串 ...

  10. [Linux] VIM 常用快捷键2

    如何使用MacVim 1.在插入模式之外 基本上来说,你应该尽可能少的呆在插入模式里面,因为在插入模式里面 VIM 就像一个“哑巴”编辑器一样.很多新手都会一直呆在插入模式里面,因为这样易于使用.但 ...