Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33010
  • 博文数量: 12
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-22 20:05
文章分类
文章存档

2010年(4)

2009年(8)

我的朋友

分类: 嵌入式

2009-12-22 20:33:59

主机系统:fedora8 + vmware 
交叉编译器:
arm-linux-gcc-3.4.1
软件资源:qtopia-opensource-src-4.3.3.tar.gz        

           tslib-07072006.tar.bz2

 

移植过程:

 

1.          交叉编译tslib

# mkdir /opt/tslib

# cd /home/work_dir

设置交叉编译器路径为/opt/arm-linux-gcc-3.4.1/bin

# tar jxf tslib-07072006.tar.bz2

# cd tslib

# echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache

# ./autogen

#./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=/opt/tslib

# make

# make install

 

2. TSLIB的移植与触摸屏校准

如果没有pointercal,则可以通过tslib进行校准,方法如下:

将主机/opt/tslib中的所有文件拷到rootfs下的/opt/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  //设备名

Default: /dev/fb0

 

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

 

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

 

下面是tslib-07072006中的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

这里我把# module_raw input的注释去掉了。

 

通过rootfs/usr/bin/calibrate这个SHELL脚本来实现TSLIB的校准:

  1 #!/bin/sh

  2 export TSLIB_ROOT=/opt/tslib

  3 export TSLIB_TSDEVICE=/dev/input/event0

  4 export TSLIB_FBDEVICE=/dev/fb0

  5 export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf

  6 export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATH

  7 export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts

  8 export QWS_MOUSE_PROTO="TPanel:/dev/input/event0"

  9 export TSLIB_CALIBFILE=/etc/pointercal

10 export TSLIB_CONSOLEDEVICE=none

11 $TSLIB_ROOT/bin/ts_calibrate

 

3. 移植QTOPIA

# cd /home/work_dir

# tar jxf qtopia-opensource-src-4.3.3.tar.gz

qtopia-core-opensource-src-4.3.3/src/gui/embedded/qmouselinuxtp_qws.cpp中的/dev/ts修改为板子上touch srceen驱动中的/dev/input/event0

qtopia不能直接在源码目录中直接编译,新建一个build目录

# cd build

# ../qtopia-core-opensource-src-4.3.3/configure  -prefix /opt/Qtopia  -qt-mouse-tslib -I/opt/tslib/include -L/opt/tslib/lib -qt-mouse-linuxtp  -xplatform qws/linux-arm-g++ -embedded arm -qconfig qpe -depths 4,8,16,32  -little-endian -no-qvfb -no-freetype -no-stl -no-qt3support -no-qdbus -no-cups -no-nis -no-iconv -no-rpath

-prefix指定了make install的安装目录

# gmake

# gmake install

 

rootfs中建立/opt/Qtopia目录,

# mkdir –p rootfs/opt/Qtopia/lib/fonts

# cp –dp /opt/Qtopia/lib/* rootfs/opt/Qtopia/lib

# cp /opt/Qtopia/lib/fonts/wenquanyi_120_50.qpf rootfs/opt/Qtopia/lib/fonts

# cp –a /opt/Qtopia/plugins rootfs/opt/Qtopiad

 

rootfs/etc/profile中添加内容如下:

#

# add for qtopia and touchscreen

#

 

export LD_LIBRARY_PATH=$PATH:/lib:/usr/lib:/opt/Qtopia/lib

export QWS_DISPLAY=LinuxFb:/dev/fb0

export QWS_SIZE=240x320

export QWS_MOUSE_PROTO=LinuxTP:/dev/input/event0

export TSLIB_ROOT=/opt/tslib

export TSLIB_TSDEVICE=/dev/input/event0

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf

export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts

export TSLIB_CALIBFILE=/etc/pointercal

export TSLIB_CONSOLEDEVICE=none

export QTDIR=/opt/Qtopia

export QPEDIR=/opt/Qtopia

export KDEDIR=/opt/Qtopia

export LD_LIBRARY_PATH=$PATH:$QTDIR/lib:$TSLIB_ROOT/lib:$LD_LIBRARY_PATH

export QWS_KEYBOARD="USB:/dev/input/event1"

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

export PATH=$QPEDIR/bin:$PATH

注:QWS_SIZE=240x320是针对NEC3.5寸触摸屏.

 

新建脚本rootfs/etc/init.d/ts.sh,内容如下:

#!/bin/sh

 

mkdir /dev/input

mknod /dev/input/event0 c 13 64

[ -f /etc/pointercal ] || /usr/bin/calibrate

 

rootfs/etc/init.d/rcS中添加一行:/etc/init.d/ts.sh

 

/etc/pointercal不存在时(即触摸屏还没有进行校准时),启动QTLIB校准程序(校准程序的脚本放在/usr/bin下,脚本名称为calibrate),校准程序执行后会在/etc下生成校准文件piontercal如果显示及触摸屏反应一切正常,则基本移植成功。

如果提示错误,要检查根文件系统共享库版本及交叉编译器版本,还有内核关于touch srceen驱动的编译选项,按本文tslib配置:TSLIB_TSDEVICE=/dev/input/event0Qtopia配置:QWS_MOUSE_PROTO="Tslib:/dev/input/event0",须检查内核Device DriversàInput device supportàEvent interfacetouch srceen相关选项是否打开。

 

4. 测试Qt4应用程序

把一个Qt 工程目录拷到build目录中(已做过交叉编译),比如:

# cp –a hello build

# cd build/hello

# qmake-qt4 –project

# qmake-qt4

# make

这样生成的就是ARM的可执行文件,将生成的程序拷到rootfs中,用nfs方式启动开发板,便于调试

# ./hello –qws

Qtopia Core库相当于桌面系统的X WindowQt两层的功能,选项-qws表示启动类似于X Window的服务。

 

参考资料:

[1] http://blog.csdn.net/gnuhpc/archive/2009/07/05/4322507.aspx

[2] 北京亚嵌宋老师的<<嵌入式应用开发>>教材

 

阅读(1001) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:linux-2.6.29.1在utu2440上的移植--touch srceen驱动

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