tslib1.4与Qt4.8.6的交叉编译与移植

时间:2022-09-28 07:41:46

 最近开始正式接触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, );
} else {
cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR, );
}

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      进行测试

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

tslib1.4与Qt4.8.6的交叉编译与移植

tslib1.4与Qt4.8.6的交叉编译与移植

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./demos/

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

例如

cd affine/
./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&period;8&period;4项目到QT5&period;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&sol;c&plus;&plus;日志工具zlog使用介绍

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

  7. qt4&period;7&period;0 交叉编译环境搭建经验总结

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

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

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

  9. Ubuntu14&period;04配置gcc4&period;4&period;4&plus;Qt4&period;8&period;4交叉编译环境

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

随机推荐

  1. raid性能对比

    1,raid0的特性:采用剥离,数据将在几个磁盘上进行分割.数据被分成很多数据块,每一数据块会被写入不同的磁盘.从而, 每一磁盘的工作负荷都得到了降低,这有助于加速数据传输.RAID-0可让磁盘更好地 ...

  2. EasyUi datagrid 表格分页例子

    1.首先引入 easyui的 css 和 js 文件 2.前台 需要写的js //源数据 function Async(action,args,callback){  $.ajax({  url: a ...

  3. Outlook账户迁移帮助

    Outlook账户迁移指南 1. 介绍 开贴聊聊如何迁移Outlook用户账户到另外一台电脑. 相信许多Outlook用户都遇到过这样的情况:买来一台新电脑,安装完Outlook后,想把旧电脑里面的O ...

  4. BZOJ 2049&colon; &lbrack;Sdoi2008&rsqb;Cave 洞穴勘測 LCT

    入门级LCT: 仅仅有 Cut Link 2049: [Sdoi2008]Cave 洞穴勘測 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 3073 ...

  5. Java使用jackson问题解决

    Java使用jackson问题解决 >>>>>>>>>>>>>>>>>>>>&g ...

  6. 2014Esri国际用户大会ArcGIS Online

    1.基于什么是新的ArcGISOnline? ArcGISOnline不断更新.大约每四个月就会把新的增强的功能公布到各部分中.有新的空间分析的应用程序,如 Explorer forArcGIS,ap ...

  7. 001-List&comma;数组&comma;Set&comma;Map属性的映射

    hibernate.cfg.xml: <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configur ...

  8. SoftEther

    sudo apt-get update   sudo wget http://www.softether-download.com/files/softether/v4.25-9656-rtm-201 ...

  9. A&period;02&period;01—功能定义—一般定义

    二章将属于较轻松的内容,整个过程也会主要以文字描述为主. 最常见的功能定义为按使用操作来定义,如下面的例子是最普通的: 1)用户将雨刮开关打至高速档,雨刮以高速速率刮刷 2)在电源档位为OFF时,用户 ...

  10. springboot&plus;maven多模块工程dependency not found

    参见:https://blog.csdn.net/m0_37943753/article/details/81031319. 重点是<dependencyManagement>标签的作用, ...