Chinaunix首页 | 论坛 | 博客
  • 博客访问: 50612
  • 博文数量: 21
  • 博客积分: 970
  • 博客等级: 准尉
  • 技术积分: 250
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-03 18:43
文章分类
文章存档

2010年(21)

我的朋友

分类: 嵌入式

2010-01-15 17:00:15

经过了半个多月,终于移植成功了,好兴奋!之所以这么长时间是由于板子上自带的是Qtopia1.7.0+qte2.3.7,移植的时候不知道该怎么做。用过nfs挂载的方式,不是nfs启动,只是把必要的文件挂载上去,这个时候可以运行程序,但是有两个鼠标的箭头,一个是系统的,一个是qte的,qte的没有办法使用,因为没有移植tslib.但是如果移植tslib的话估计会跟板子里面的有冲突,所以不知道该怎么办。查资料的时候好多都是用NFS启动的,可是我之前有试过弄成NFS启动的,但是没有成功,昨天晚上又试了一下,成功启动,所以后面就进行的很顺利了。下面记录一下重要过程,以防以后忘记。
主要参考了这篇文章
http://blog.chinaunix.net/u3/109488/showart_2138306.html

我的系统环境以及软件准备如下:
主机操作系统:Ubuntu 9.10
主机编译器:gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu8)
交叉编译器:arm-linux-gcc 3.4.1(开发板的文档里自带的)
软件安装包:(软件包事先下载到了主目录下的/utuLinux2.6.24目录)
qt-embedded-linux-opensource-src-4.5.3.tar.gz
qt-x11-opensource-src-4.5.3.tar.gz
tslib-1.4.tar.gz
Qt的软件安装包可以到下载,tslib

前面已经构建了pc上的qte开发环境,这一篇主要记录移植的过程。

1.编译安装qt-embedded(进入到/utuLinux2.6.24目录)

A、解压qt-embedded-linux-opensource-src-4.5.3.tar.gz
把源文件qt-embedded-linux-opensource-src-4.5.3.tar.gz解压到当前目录下。执行:

tar xvzf qt-embedded-linux-opensource-src-4.5.3.tar.gz

将其解压得到qt-embedded-linux-opensource-src-4.5.3目录,重命名为qt-embedded-linux-opensource-src-4.5.3-arm。在qte-arm目录下编译arm架构的编译工具链,用于交叉编译在arm开发板上运行的程序。

B、编译安装触摸屏库软件tslib-1.4.tar.gz
解压tslib-1.4.tar.gz文件到当前目录,进入到解压后的tslib-1.4目录。运行:

./autogen.sh
./configure --prefix=/usr/local/Trolltech/QtEmbedded-4.5.3-arm/tslib-1.4 --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
make
sudo make install

这样就可以在/usr/local/Trolltech/QtEmbedded-4.5.3-arm/tslib-1.4目录下看到相关的应用程序、共享库、配置文件等。


 C 、编译安装qte-arm (进入到qt-embedded-linux-opensource-src-4.5.3-arm目录)

./configure -prefix /usr/local/Trolltech/QtEmbedded-4.5.3-arm \
> -no-qt3support \
> -qt-zlib \
> -qt-libtiff \
> -qt-libpng \
> -qt-libmng \
> -qt-libjpeg \
> -make libs \
> -nomake examples \ (因为这个是arm版本,所以编译出来的程序只能在arm开发板上运行,编译时把这些给去掉,加快编译过程)
> -nomake demos \
> -nomake docs \
> -no-nis \
> -no-cups \
> -no-iconv \
> -xplatform qws/linux-arm-g++ \
> -embedded arm \
> -little-endian \
> -qt-freetype \
> -depths 8,16,24,32 \
> -qt-gfx-linuxfb \
> -no-gfx-transformed \
> -no-gfx-qvfb \
> -no-gfx-vnc \
> -no-gfx-multiscreen \
> -qt-kbd-usb \
> -qt-kbd-tty \
> -qt-mouse-pc \
> -no-glib \
> -qt-mouse-tslib -I /usr/local/Trolltech/QtEmbedded-4.5.3-arm/tslib-1.4/include -L /usr/local/Trolltech/QtEmbedded-4.5.3-arm/tslib-1.4/lib
make
make install

编译选项-qt-mouse-tslib需要用到触摸屏功能的动态库,所以得把之前编译安装的tslib库包含进来。

至此,Qt/E的编译安装工作算是完成了,把这两个都编译好所花时间大约3个小时

接下来进行移植。(我用的是NFS启动的文件系统,所以这个移植和一般的移植有点不一样,主要是把需要的文件拷贝到NFS文件系统的相应位置,然后对环境进行配置。)

A、tslib 的环境变量和配置

(以下内容主要摘自TSlib校准原理
在采用触摸屏的移动终端中,触摸屏性能的调试是个重要问题之一,因为电磁噪声的缘故,触摸屏容易存在点击不准确、有抖动等问题。
Tslib 是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。在 Qtopia 4.*版本中,默认的Tslib版本为Tslib 1.4。在Qtopia 2.*版本中,默认的Tslib版本为Tslib 1.3。

在 嵌入式中,由于触摸屏的种类多样、质量不一,采用Tslib 的参考配置往往无法获得较好的触摸屏触摸效果,同样需要经过大量的测试才能得到满意的配置参数,恶劣情况下,甚至需要对Tslib 的算法进行进一步的优化。下面就Tslib 的环境变量、配置文件等进行简要的介绍。

1)环境变量
为了实现Tslib 的正确运行,需要对如下的Tslib 的环境变量进行配置:

TSLIB_TSDEVICE //触摸屏设备文件名
Default (no inputapi): /dev/touchscreen/ucb1x00
Default (inputapi): /dev/input/event0
TSLIB_CALIBFILE //校准的数据文件,由ts_calibrate 校准程序生成
Default: ${sysconfdir}/pointercal
TSLIB_CONFFILE //配置文件名
Default: ${sysconfdir}/ts.conf
TSLIB_PLUGINDIR //插件目录
Default: ${datadir}/plugins
TSLIB_CONSOLEDEVICE //控制台设备文件名
Default: /dev/tty
TSLIB_FBDEVICE //FrameBuffer设备名
Default: /dev/fb0

以上环境变量在实际开发中的实际配置可以根据实际情况决定。

2)配置文件
除了环境变量以外,Tslib 的配置文件ts.conf 同样是个十分重要的部分,在ts.conf 中配置了需要加载的插件、插件加载顺序以及插件的一些约束参数,这些配置参数对触摸屏的触摸效果具有十分重要的影响。
下面是Tslib 1.4 中的ts.conf 的参考配置:

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

# Uncomment if you're using a Sharp Zaurus SL-5500/SL-5000d
# module_raw collie

# Uncomment if you're using a Sharp Zaurus SL-C700/C750/C760/C860
# module_raw corgi

# Uncomment if you're using a device with a UCB1200/1300/1400 TS interface
# module_raw ucb1x00

# Uncomment if you're using an HP iPaq h3600 or similar
# module_raw h3600

# Uncomment if you're using a Hitachi Webpad
# module_raw mk712

# Uncomment if you're using an IBM Arctic II
# module_raw arctic2

module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear

其中 pthres 为Tslib提供的触摸屏灵敏度门槛插件;variance 为Tslib提供的触摸屏滤波算法插件;dejitter 为Tslib提供的触摸屏去噪算法插件;linear 为Tslib 提供的触摸屏坐标变换插件。

tslib 的实际配置:

去掉module_raw input前面的#号,同时把其他#号注释项全部删除,以免给后来的操作带来麻烦。我的最终ts.conf 内容为:

module_raw input
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear

B、tslib、qte-arm 的移植

目 前我是使用nfs方式启动开发板的,所以这个“移植”不大像真正意义上的移植。新建一个/opt/utuLinux2.6.24/s3c2440_recover目录作为开发板nfs方式启动所要挂载的根文件系统目录,里面是开发板自带的文件系统的压缩包,解压之后的文件夹。

1)在/utuLinux2.6.24/s3c2440_recove目录下新建opt子目录,然后再新建一个qt/lib目录。

cd /utuLinux2.6.24/s3c2440_recove
mkdir opt
cd opt
mkdir qt
cd qt
mkdir lib

拷贝/usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib目录下的 libQtCore、libQtGui、libQtNetwork 动态链接库及其对应的所有符号链接到qt/lib目录下。

2) 在/utuLinux2.6.24/s3c2440_recove目录的usr目录下新建一个
local/Trolltech/QtEmbedded-4.5.3-arm/lib/fonts目录,然后到/usr/share/fonts目录找到 wqy(文泉驿)的字体文件并拷贝过来。

3)拷贝/usr/local/Trolltech/QtEmbedded-4.5.3-arm/tslib-1.4目录到/utuLinux2.6.24/s3c2440_recove目录下

4)设置环境变量。编辑/utuLinux2.6.24/s3c2440_recove/etc/profile文件(即开发板系统上的/etc/profile文件),输入如下内容(假定当前工作目录为/utuLinux2.6.24/s3c2440_recove):

# Ash profile 
# vim: syntax=sh

# No core files by default
ulimit -S -c 0 > /dev/null 2>&1

USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]\$ '
PATH=$PATH

HOSTNAME=`/bin/hostname`

export USER LOGNAME PS1 PATH

export LD_LIBRARY_PATH=/lib:$LD_LIBRARY_PATH
export QTDIR=/opt/qt
export QPEDIR=$QTDIR
export T_ROOT=/tslib-1.4
export PATH=$T_ROOT/bin:$PATH
export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib:$LD_LIBRARY_PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
export QWS_KEYBOARD=USB:/dev/input/event1
export QWS_MOUSE_PROTO=Tslib:/dev/event0
export QWS_DISPLAY=LinuxFb:mmWidth45:mmHeight60:0
export QWS_SIZE=320x240
(注:红色字体是后来自己添加的,经过修改的)

到这里,tslib、qte-arm的移植工作算是完成了,至于上面环境变量的意思,
5)测试。以nfs的方式启动开发板上的系统,然后执行ts_calibrate命令对触摸屏进行校正,如果该命令能成功执行,那么恭喜你,任务完成了。当然,你还可以执行ts_test命令做进一步的测试。也可以编写一个简单的helloworld到开发板上进行测试。

6)可能出现的问题汇总

 1.在执行./ts_calibrate命令对触摸屏进行校正的时候,出现如下错误:
./ts_calibrate:error while loading shared libraries:libts-0.0.so.0:cannot open shared object file:Error 40
解决办法:
#echo $LD_LIBRARY_PATH //查看lib路径
#export LD_LIBRARY_PATH=$T_ROOT/lib
ts_open:No such file or directory
解决办法:
出错原因是我的NFS文件系统在/dev下就有event0,而不是在/input下面。所以
#export TSLIB_TSDEVICE=/dev/event0
2.在执行./helloworld的时候出现如下错误:
./t1: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
解决办法:
将/usr/local/arm/3.4.1/arm-linux/lib下面的
libstdc++.so.6及相关库文件拷贝到/utuLinux2.6.24/s3c2440_recover/lib(nfs文件系统目录)下。
QWSTslibMouseHandlerPrivate: ts_open() failed with error: 'No such file or directory'
解决办法:
export QWS_MOUSE_PROTO=tslib:/dev/event0
Cannot create qte data directory: /tmp/qtembedded-0
原因:在根目录下没有创建tmp目录
解决办法:
在根目录下mkdir tmp

至此,终于完成了整个移植过程。

阅读(2200) | 评论(2) | 转发(0) |
0

上一篇:make menuconfig出错

下一篇:mysql问题

给主人留下些什么吧!~~

chinaunix网友2010-04-28 13:32:15

您好,照着您的博客,我的第一个QT程序也可以在mini2440开发板上运行了,我现在有两个问题想问你一下:1)我现在开机总是要进行触摸屏校准,网上说,校准一次之后会生成一个配置文件,下次有这个配置文件了就不需要再次校准了,为什么我的要总校准呢? 2)我的触摸屏好用了,可是鼠标不好用,怎么做能让鼠标和触摸屏一起好用呢?USB的驱动是有的,我在之前没加tslib的时候可以看到终端有鼠标移动的打印信息的。希望得到您的帮助

chinaunix网友2010-03-24 15:37:26

麻烦你问一下啊,移植完之后,你运行自己编写Qt程序会很卡吗??为什么我一直之后,触摸屏可以校准,也可以运行tslib自带的测试程序,可是,运行Qt例子时候,触摸点击鼠标可以很准确的跟着走,但是程序按键要很久才响应呢??