Chinaunix首页 | 论坛 | 博客
  • 博客访问: 120744
  • 博文数量: 22
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 284
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-16 11:37
个人简介

不是一个称职的程序员……

文章分类

全部博文(22)

文章存档

2014年(15)

2013年(7)

我的朋友

分类: LINUX

2014-01-12 22:12:43

原文地址:tslib和Qt移植笔记 作者:charles413

主机:Windows 7旗舰版,VMware7.1.2,Fedora9

编译环境:arm-linux-gcc 4.4.3

Linux版本:linux-2.6.32.2

目标板文件系统:busybox-1.19.4

参考资料:http://hi.baidu.com/vv1133/blog/item/b06c760a3c2a0332b0351d89.html 

http://blog.csdn.net/opensource2009/article/details/3444244 

 

http://blog.csdn.net/hadise/article/details/5416328 

http://fanzhichao.blog.hexun.com/24027892_d.html 


移植tslib1.4(用于Qt触摸屏支持)


确认Linux主机可以联网,下载tslib源码:

#svn co svn://svn.berlios.de/tslib tslib

或者在网上自己搜索下载。

我移植的版本是tslib v1.4,进入tslib目录执行以下操作:

#./autogen.sh

#echo ac_cv_func_malloc_0_nonnull=yes>arm-linux.cache

#./configure --host=arm-linux --prefix=/usr/local/tslib --cache-file=arm-linux.cache --enable-inputapi=no

--enable-inputapi=no:看你的触摸屏驱动是否支持ioctl操作,如果支持就不用写上,不支持就要添上,如果不添加会有
ts_open:Inappropriate ioctol for device
ts_open: No such file or directory
等错误(网上别人的文档是这么说的,我没有试过不加这个参数会怎样,感兴趣的试一下)

#make

#make install

编译并安装后会在/usr/local/tslib生成bin,etc,include,lib四个文件夹。

bin文件夹下是tslib的测试程序,把它们复制到开发文件系统下的/bin或者/usr/local/bin下,除了ts_calibrate触摸屏校准程序外,其他几个测试程序可有可无。

etc文件夹内只有一个文件ts.conf,把它复制到目标板文件系统下的/etc目录,修改/etc/ts.conf配置如下:

module_raw input  (注意把这句前的注释符#删除)
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear

include文件夹包含有关tslib的头文件tslib.h,不需要复制到目标板。

lib文件夹下是tslib的动态库的在目标板文件系统/usr/local/下新建文件夹tslib,把lib文件夹下的所有文件都复制过去。

在你目标板的/etc/profile文件里添加运行tslib的环境变量

export TSLIB_TSDEVICE=/dev/input/event0 (目标板触摸屏设备节点文件)

export TSLIB_CONFFILE=/etc/ts.conf 

export TSLIB_PLUGINDIR=/usr/local/tslib/ts

export TSLIB_CALIBFILE=/etc/pointercal (触摸屏校准信息文件)

export LD_LIBRARY_PATH=/usr/local/tslib/:$LD_LIBRARY_PATH

以上是我在自己目标板添加的环境变量,可以正常运行,参考网友环境变量配置如下(这个环境变量多一些,比较全面,做下记录):

export TSLIB_ROOT=/usr/local
export TSLIB_TSDEVICE=/dev/event0 (目标板触摸屏设备节点文件)
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib(这句我注释掉的原因是:有一种说法是使用 LD_LIBRARY_PATH这样设置不安全,我的做法是把路径添加到/etc/ld.so.conf文件中,然后执行ldconfig命令,这样就可以了。ldconfig在你的交叉编译工具里就有)

修改/etc/profile后,执行:#source /etc/profile使刚配置的环境变量生效。

运行触摸屏校准程序ts_calibrate,会自动生成文件/etc/pointercal来保存校准信息。到此tslib移植工作完成!


移植Qt4.7.3


Qt源码下载地址:

下载qt-everywhere-opensource-src-4.7.3.tar.gz,解压缩到/opt目录下,重命名为qt-4.7.3-src。

交叉编译Qt与交叉编译其他源程序一样,三步曲:

./configure

make

make install

一般导致交叉编译不成功都是由于./configure时,参数配置错误。

/opt下新建文件夹qt-4.7.3-target作为Qt编译的工作目录。创建配置文件script.sh,内容如下:

../qt-4.7.3-src/configure \

--prefix=/usr/local/qt-embedded-4.7.3 \

-release -opensource -shared -fast -confirm-license \

-no-largefile \

-no-exceptions \

-no-accessibility \

-no-stl \

-qt-sql-sqlite \

-no-qt3support \

-no-xmlpatterns \

-no-multimedia \

-no-audio-backend \

-no-phonon \

-no-phonon-backend \

-svg \

-no-webkit \

-no-javascript-jit \

-script \

-no-scripttools \

-declarative \

-no-mmx -no-3dnow -no-sse -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-neon \

-qt-zlib \

-qt-gif \

-no-libtiff \

-qt-libpng \

-no-libmng \

-qt-libjpeg \

-no-openssl \

-nomake docs \

-nomake examples \

-nomake tools \

-nomake demos \

-optimized-qmake \

-no-nis \

-no-iconv \

-no-cups \

-no-pch \

-no-gtkstyle \

-no-nas-sound \

-no-opengl \

-no-openvg \

-no-sm \

-no-xshape \

-no-xvideo \

-no-xsync \

-no-xinerama \

-no-xcursor \

-no-xfixes \

-no-xrandr \

-no-xrender \

-no-mitshm \

-no-fontconfig \

-no-xinput \

-no-xkb \

-xplatform qws/linux-arm-g++ \

-embedded arm \

-qt-freetype \

-depths 16,18,24 \

-no-opengl \

-qt-gfx-linuxfb -qt-gfx-transformed \

-no-gfx-qvfb -no-gfx-vnc -no-gfx-multiscreen -no-gfx-directfb -no-gfx-qnx \

-no-kbd-qvfb -no-kbd-qnx \

-qt-mouse-tslib \

-no-mouse-qvfb -no-mouse-qnx \

-no-glib 

运行Qt配置脚本script.sh,生成Makefile文件。configure的配置选项可以运行/opt/qt-4.7.3-src/configure --help查看,可参考网友的配置选项说明:

生成Makefile后,执行make && make install,编译安装Qt。完成后我们所需用到的工具和库都在目录/usr/local/qt-embedded-4.7.3下。

下面就是移植工作了,目标板需要用到的只有动态库、字库等,都在编译安装后生成的lib文件夹下,大概25.4M大小。其他文件和可执行程序是主机交叉编译目标板的Qt应用程序时用到的,不需要复制到目标板文件系统中。复制lib下所有文件到目标板/usr/local/qt473lib。修改目标板/etc/profile文件,添加环境变量如下:

export QWS_MOUSE_PROTO=Tslib:/dev/input/event0

export QWS_SIZE=480*272 (LCD分辨率)

export QWS_DISPLAY=LinuxFb:mmWidth95:mmHeight54:0

export QT_PLUGIN_PATH=/usr/local/qt473lib/plugins

export QT_QWS_FONTDIR=/usr/local/qt473lib/fonts

export LD_LIBRARY_PATH=/usr/local/tslib/:/usr/local/qt473lib/:$LD_LIBRARY_PATH

环境变量说明:

QWS_MOUSE_PROTO是鼠标的设置,Tslib表示使用tslib类型鼠标,即触摸屏,/dev/input/event表示触摸屏对应的设备节点,要与移植tslib时设置的环境变量TSLIB_TSDEVICE一致。如果想要同时支持USB鼠标,设置如下:

export QWS_MOUSE_PROTO="Tslib:/dev/input/event0 Intellimouse:/dev/input/mouse0"

QWS_DISPLAY指定显示形式和framebuffer。格式如下:

 export QWS_DISPLAY="[:] [:]"

的有效参数是LinuxFb, QVFb, VNC, Transformed, Multi 和 keys identifying custom drivers的参数通常是用来区分是否是相同的显示屏和是否支持多显示屏,这里设置为0。

驱动详细选项

可用的

描述

mmWidth=

LinuxFb, QVFb

屏幕的物理宽度 (通常是按分辨率计算).

mmHeight=

LinuxFb, QVFb

屏幕的物理宽度 (通常是按分辨率计算).

VNC, Transformed, Multi

指定一个子驱动.

Transformed

屏幕的旋转角度x的有效值为90,180,270.

mmWith和mmHeight的值的大小与Qt应用程序在LCD上显示的字体和控件大小有关系。VNC, Transformed和Multi screen drivers都依赖子驱动. 指定一个驱动的一般方法如下:

export QWS_DISPLAY="[:][:] [:]

如果想要在原来设置的基础上把屏幕旋转90度,参数值设置如下:

QWS_DISPLAY=Transformed:Rot90:LinuxFb:mmWidth95:mmHeight54:0

Qt环境变量说明详见: 

环境变量配置完成后,执行#source /etc/profile使之生效。然后在主机交叉编译一个Qt测试程序,在目标板运行测试是否成功移植Qt。测试程序hello.cpp如下:


点击(此处)折叠或打开

  1. #include 
  2. #include 
  3. int main(int argc, char** argv)
  4. {
  5.         QApplication app(argc, argv);
  6.         QLabel *label = new QLabel("Hello World!");
  7.         label->show();
  8.         return app.exec();
  9. }

使用我们刚刚在/usr/local/qt-embedded-4.7.3/bin下生成的qmake,交叉编译生成目标板可执行文件hello。

#qmake -project

#qmake hello.pro

#make

下载到目标板,运行./hello -qws。目标板LCD显示出Hello World的窗口,Qt移植成功!

阅读(2159) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~