Qt4.5.1触摸屏(tslib 1.4)+sqlite3 移植全记录

主机系统:Debian 5.0

主机编译器:gcc/g++4.1.3

交叉编译器:arm-linux-gcc/g++3.4.5-glibc-2.3.6

软件资源:qt-embedded-linux-opensource-src-4.5.1.tar.gz

qt-x11-opensource-src-4.5.1.tar.gz

tslib-1.4.tar.gz

目标板:博创UP-TECH S2410

1. 安装X11的相关库文件和开发包

在编译时会生成一些在主机上运行的工具,要用到X11的一些头文件、库,所以需要安装X11开发包。

#sudo apt-get -y install x-dev libx11-dev xlibs-static-dev x11proto-xext-dev libxext-dev libqt3-mt-dev

#sudo mkdir -p /usr/X11R6/include

#sudo cp -rf /usr/include/X11 /usr/X11R6/include(参考韦东山《嵌入式Linux应用开发完全手册》)

2.安装交叉编译器arm-linux-gcc-3.4.5

(1) 新建安装目录:#mkdir /usr/local/arm

(2) 解压arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2

arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2复制在目录/usr/local/arm下,在终端中进行如下操作:

#cd /usr/local/arm

#tar jxvf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2

等待解压完成。

(3) 导入环境变量

export PATH=$PATH:/usr/local/arm/3.4.5/bin

或者:编辑一个导入环境变量的脚本(方便以后使用):

#vi ArmEnv

1 #!/bin/sh

2 export PATH=$PATH:/usr/local/arm/3.4.5/bin

#chmod +x ArmEnv //增加可执行权限

#arm-linux-gcc -v

这样就把交叉编译器的地址变量设置好了,但这样设置路径变量的方法只在此终端中生效,对其他的终端无效,若要设置对所有用户所有终端都有效的路径变量,在/etc/profile 中最后一行添加“export PATH=/usr/local/arm/3.4.5/bin:$PATH”(不推荐这种方式)。

3.编译安装qt-x11-opensource-src-4.5.1

qt-x11版本可以产生Qt开发工具,如designerlingust等,最重要的是可以得到qvfb,嵌入式的开发有了qvfb,就可以不需要实际的开发板,也可以开发Qt应程序。qt-embedded版本就是专门用于嵌入式方面的版本。

qt-x11-opensource-src-4.5.1.tar.gz复制到/root/local/qt目录下,进行解压,在终端中进行如下操作:

#cd /root/local/qt

#tar zxvf qt-x11-opensource-src-4.5.1.tar.gz

解压完成后,得到/root/local/qt/qt-x11-opensource-src-4.5.1目录。下面就开始进行编译了。

进入/root/local/qt/qt-x11-opensource-src-4.5.1目录,进行编译安装。在终端中进行如下操作:

#./configure –qvfb

#make

#cd tools/qvfb

#make

#cd ../..

#make install

经过相当长的时间完成后,会在/usr/local目录下生成一个Trolltech目录,形成/usr/local/Trolltech目录,这是qt-x11-opensource-src-4.5.1安装后所在的目录,进入/usr/local/Trolltech会看到一个Qt-4.5.1的目录,将/root/local/qt/qt-x11-opensource-src-4.5.1/tools/qvfb目录下的qvfb相关文件拷贝到/usr/local/Trolltech/Qt-4.5.1/bin目录下,在终端中操作(确定当前目录是/root/local/qt/qt-x11-opensource-src-4.5.1)。

#cp tools/qvfb/qvfb* /usr/local/Trolltech/Qt-4.5.1/bin

至此,qt-x11-opensource-src-4.5.1就编译安装成功了

你就可以使用/usr/local/Trolltech/Qt-4.5.1下的Qt进行编程开发了。

===============================================================================

4这里,qt-embedded有两个复制:qt-embedded-linux-opensource-src-4.5.1-x86qt-embedded-linux-opensource-src-4.5.1-arm,根据他们的名字可以知道前者是适合x86架构的,后者适合arm架构为什么需要两个呢?如果有开发板的话,可以只编译qt-embedded版本成arm架构的就可以了,但是很多时候用qvfb的话,开发会方便很多,所以多编译一个x86架构的也不错。这里是否有些疑问,qt-x11也是适合x86结构的,这不是和qt-embedded重复了吗?答案是这样的,qt-embedded版本只能在嵌入式板子上面运行,编译成x86架构的程序也只能在x86的嵌入式板子上跑(这里咱们用的PC机其实是也可以看成嵌入式开发板只不过它是x86架构的)。前面说过,我们需要qvfb来开发,但是qvfb只能执行x86架构的应用程序,所以需要让qt-embedded生成关于x86的库和其他文件。而将qt-embedded编译成arm,又是为什么呢?道理很简单,我最终的qt应用程序需要在arm架构上面运行,当然需要这方面的库,所以编译成arm也就顺理成章了。好了,现在简单的总结一下,首先,使用qt-x11提供的库和开发工具开发出qt应用程序,然后使用qt-embedded关于x86库和工具再次编译我们开发qt应用程序,这是所得到的可执行文件就可以在qvfb上运行了,最后,使用qt-embeddeddarm库再次编译就可以得到在arm上能运行的可执行程序。很明显,如果有开发板,第二步是可要可不要的(最好是要),如果没有开发板的话,第三步也就没必要了,这样就不需要将qt-embedded编译成适合arm架构的。

5编译配置QtEmbedded-4.5.1-x86版本

解压qt-embedded-linux-opensource-src-4.5.1.tar.bz2在路径/root/local/qt路径下

# tar xjvf qt-embedded-linux-opensource-src-4.5.1.tar.bz2

修改解压后的文件夹名称

#mv qt-embedded-linux-opensource-src-4.5.1 qt-embedded-linux-opensource-src-4.5.1-x86

进入/root/local/qt/qt-x11-opensource-src-4.5.1-x86目录,进行编译安装。在终端中进行如下操作:

#cd /root/local/qt/qt-x11-opensource-src-4.5.1-x86

./configure -prefix /usr/local/Trolltech/QtEmbedded-4.5.1-x86 -embedded x86 –qvfb

#make(windowns系统下gmake)

#make install(gmake install)

OKQtEmbedded-4.5.1-x86就编译好了。

在需要x86版本QT编译时建立环境变量:

export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.1-x86/
export PATH=/usr/local/Trolltech/QtEmbedded-4.5.1-x86/bin/:$PATH
export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.21-x86/lib/:$LD_LIBRARY_PATH

这里也写成脚本:

#vi setX86env

1 #!/bin/sh

2 export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.1-x86/

3 export PATH=/usr/local/Trolltech/QtEmbedded-4.5.1-x86/bin:$PATH

4export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.1-x86/lib/:$LD_LI BRARY_PATH

记得加上执行权限。

如果要添加触摸屏支持还需要安装tslib,现在最高版本为1.4(笔者开发时)。下面介绍一下tslib1.4编译安装过程。

6.编译安装tslib1.4

安装编译过程需用到的程序

# apt-get install autoconf(或autoconf2.13
# apt-get install automake
# apt-get install libtool

tslib1.4解压到/home

#./autogen.sh

#./configure --prefix=/home/zyx/project/mytslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes

#make

#make install-strip //生成瘦身应用程序和库

注意:/home/zyx/project/mytslib/tslib1.4安装目录在装QtEmbedded-4.5.1-arm版本时需要用到此目录,打包mytslib

# tar czvf mytslib.tar.gz mytslib

下载到开发板上/usr/local目录解压。

#tar xzvf mytslib.tar.gz

设置环境变量,校准触摸屏。修改开发板上创建/bin/ts.sh文件。

#!/bin/sh

export QTDIR=/usr/local/Qtembedded-4.5.1

export QPEDIR=/usr/local/Qtembedded-4.5.1

export PATH=$PATH:$QTDIR/bin

export TSLIB_ROOT=/usr/local/tslib //tslib主目录

export TSLIB_TSDEVICE=/dev/event0 //触摸屏设备节点

export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf //触摸屏配置文件

export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts //触摸屏在进行AD转换时用到的插件

export TSLIB_CALIBFILE=/etc/pointercal //生成的校验文件存放目录

export TSLIB_FBDEVICE=/dev/fb0 //触摸屏framebuff设备节点

export QWS_SIZE=640x480 //根据自己触摸屏大小进行设置,这条也可不加

export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0"//如果不加这条会出现触摸屏字体很小的现象(不管在程序中设置多大的字体)

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

export QWS_MOUSE_PROTO="Tslib:/dev/event0"

export TSLIB_CONSOLEDEVICE=none

export QT_QWS_FONTDIR=$QPEDIR/lib/fonts //设置字体,否则程序显示乱码

export QT_PLUGIN_PATH=$QTDIR/plugins/

注意:

(1) 上面这些设置一定要仔细写,否则会出现这样那样的问题,笔者曾出现露掉字体问题。总之这个一定要根据自己的配置写正确。

(2) 检查ts.conf 参数是否设置正确,下面是我的配置。

module_raw input

module pthres pmin=1

module variance delta=30

module dejitter delta=100

module linear

(3) 如果是静态添加节点的话,触摸屏设备节点一定要建正确。

#mknod ts0 c 13 128

(4) 触摸屏的前提是你的触摸屏驱动已经写好,并加载进了内核.你可以测试有没有加载触摸屏驱动,cat /dev/touchscreen/0raw),点击触摸屏,看终端有无显示,若有则表明正确。

(5) 修改文件ts.conf将其他不需要的都删掉,空格也都删掉,因为配置文件有大小限制(好像是不大于150k)。否则有可能会提示: selected device is not a touchscreen I understand错误信息

在开发板/usr/local/mytslib/bin目录下执行校准触摸屏程序:# ./ts_calibrate

会在/etc目录生成一个:pointercal触摸屏效准的必须文件,也可以运行此目录下的其他程序进行测试。

特别注意:如果是挂载根文件系统,在/etc/exports文件中发布权限要设置正确,否则可能会出现虽然已经校验但却无法生成pointercal文件。

7. 编译安装QtEmbedded-4.5.1-arm版本

解压qt-embedded-linux-opensource-src-4.5.1.tar.bz2(在路径/root/local/qt)进入/root/local/qt/ qt-embedded-linux-opensource-src-4.5.1-arm目录,进行编译安装。在终端中进行如下操作

# tar xjvf qt-embedded-linux-opensource-src-4.5.1.tar.bz2

#mv qt-embedded-linux-opensource-src-4.5.1 qt-embedded-linux-opensource-src-4.5.1-arm

# cd qt-embedded-linux-opensource-src-4.5.1-arm

配置选项编译:

./configure -release -shared -fast -no-largefile -qt-sql-sqlite -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg -no-webkit -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -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++ -embedded arm -little-endian -qt-freetype -depths 16,18 -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-usb -no-glib -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib

解释:-fast:快速编译,加此项不会生成中间文件,如果你确定你能一次编译通过的话可以加上,否则重新编译会浪费很多时间。

-qt-sql-sqlitesqlite数据库选项,如果要编写的程序需要数据库就必须加上,或者使用插件的形式,但是两者只能选一个,否则编写的程序会出现加载不上驱动的现象。

注意:最后两个路径如果设置不对则生成的库文件没办法支持触摸屏

假如提示mkspec/qws/linux-arm-g++/qmake.confQMAKE_INCDIRQMAKE_LIBDIR错误信息

qmake.conf文件中加入

QMAKE_INCDIR =/home/zyx/project/mytslib/include

QMAKE_LIBDIR =/home/zyx/project/mytslib/lib

重新./configure

#make

#make install

如果在编译的过程中出错,在重新make前需要先执行make clean,然后再./configure,再执行make的操作。

安装默认目录在/usr/local/Trolltech/QtEmbedded-4.5.1-arm中。

8. 打包编译安装好的QtEmbedded库文件以备以后使用

# tar czvf QtEmbedded-4.5.1-arm.tar.gz QtEmbedded-4.5.1-arm

编译ARMQT应用程序前建立环境变量:
export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.1-arm/

export PATH=/usr/local/Trolltech/QtEmbedded-4.5.1-arm/bin/:$PATH

export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.1-arm/lib/:$

LD_LIBRARY_PATH

编译简单的QT程序或者QtEmbedded-4.5.1-arm自带的程序例子挂载到开发板执行看是否成功,一般会提示找不到fonts libQtGui.so.4 libstdc++.so.6 libQtNetwork.so.4 libQtCore.so.4 librt.so.1等库文件。从/usr/local/trolltech/QtEmbedded-4.5.2-arm/lib /usr/local/arm/3.4.5/arm-linux/lib中拷贝到开发板上即可。

2010-06-16 整理

问题1:

./ts_calibrate: error while loading shared libraries: libts-0.0.so.0: cannot open shared object file: Error 40

./ts_calibrate: error while loading shared libraries: libts-0.0.so.0: cannot ope

n shared object file: No such file or directory

解决办法:

#echo $LD_LIBRARY_PATH //查看lib路径,

#export LD_LIBRARY_PATH=$T_ROOT/lib

问题2

ts_open: No such file or directory

解决办法:

#export TSLIB_TSDEVICE=/dev/input/event0 //触摸屏设备路径

问题3

Couldnt open tslib config file: No such file or directory ts_config: Illegal seek

解决办法:

#export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf

问题4

Couldnt load module pthres

No raw modules loaded.

ts_config: Success

解决办法:

#export TSLIB_PLUGINDIR=$T_ROOT/lib/ts

问题5

No raw modules loaded.

Ts_config: No such file or directory

解决办法:

修改$T_ROOT/etc/ts.conf,至少放开一个module_raw,并去掉前面空格

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


SQLite架构简单,又有Json计算能力,有时会承担Json文件/RESTful的计算功能,但SQLite不能直接解析Json文件/RESTful,需要用Java代码硬写,或借助第三方类库,最后再拼成insert语句插入数据表,代码非常繁琐,这里就不展示了。参考前面的代码可知,入库的过程比较麻烦,不能只用SQL,还要借助Java或命令行。SPL是现代的数据计算语言,属于简化的面向对象的语言风格,有对象的概念,可以用点号访问属性并进行多步骤计算,但没有继承重载这些内容,不算彻底的面向对象语言。...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。本教程将告诉您如何使用 SQLite 编程,并让你迅速上手。.................................
安卓开发,利用SQLite实现登陆注册功能
相比大多数数据库而言,具有等优势,广泛应用于、等领域。
有时候,一个项目只有一个数据库,比如只有SQLite,或者MySQL数据库,那么我们只需要使用一个固定的数据库即可。但是一个项目如果写好了,有多个用户使用,但是多个用户使用不同的数据库,这个时候,我们就需要把软件设计成可以连接多个数据库的模式,用什么数据库,就配置什么数据库即可。4.Users实体类,这个实体类要和数据库一样的,形成一一对应的关系。11.Sqlite数据库,需要在代码里面创建数据库,建立表,再建立数据。8.我们开启MySQL数据库,然后进行调试,看程序的结果。2.安装SqlSugar。
基于Android的背单词软件,功能强大完整。
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。说白了就是使用起来轻便简单,
Android的简单购物车案例
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库...
Qt设计较为美观好看的登录注册界面(包含SQLite数据库以及TCP通信的应用)
SQLite是用C语言开发的跨平台小型数据库,可嵌入其他开发语言,也可在单机执行。SPL是用Java开发的跨平台的数据计算语言,可嵌入Java,可在单机执行,可以数据计算服务的形式被远程调用。两者的代码都是解释执行的。...
新建库.openDATA_BASE;新建表createtableLIST_NAME(DATA);语法:NAME关键字...<用逗号分割>删除表droptableNAME;查看表.schema查看表信息新建数据insertintoLIST_NAMEvalues();语法:CLASS,PARAMETER...,CLASS是类别,PARAMETER是参数<用逗号分割新建的
importsqlite3classDemo01:def__init__(self):self.conn=sqlite3.connect("sql_demo_001.db")self.cursor1=self.conn.cursor()self.cursor1.execute("select*fromtable_001wherename=?andid=?",('ssss&#0
 在客户端配置文件<configuration>节点下,添加:<connectionStrings>      <add name="localdb" connectionString="Data Source=config/local.db;Version=3;UseUTF16Encoding=True;" providerName="System.Data.SQLite.SQLiteFactory"/&g
提到锁就不得不说到死锁的问题,而SQLite也可能出现死锁。下面举个例子:连接1:BEGIN(UNLOCKED)连接1:SELECT...(SHARED)连接1:INSERT...(RESERVED)连接2:BEGIN(UNLOCKED)连接2:SELECT...(SHARED)连接1:COMMIT(PENDING,尝试获取EXCLUSIVE锁,但还有SHARED锁未释放,返回SQLITE_BUSY)连接2:INSERT...
SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。在使用SQLite前,我们先要搞清楚几个概念:表
设计思想————首先要确定有几个页面、和每个页面的大致布局由于是入门,我也是学习了不是很长的时间,所以项目比较low。。。。第一个页面,也就是打开APP的首页面:今天这个博客,先实现添加功能!:首先对主界面进行布局:其中activity_main.xml的代码为<?xmlversion="1.0"encoding="