您的位置:首页 > 其它

转:移植tslib到开发板及部分问题解决

2011-06-06 09:06 381 查看
1.1. 移植QT到开发板
1.1.1. tslib移植
tar xvzf
kergoth-tslib-1.0-89-g412d99d.tar.gz

cd
kergoth-tslib-412d99d
./autogen.sh
./configure --prefix=/usr/local/tslib
--host=arm-linux
ac_cv_func_malloc_0_nonnull=yes CC=arm-none-linux-gnueabi-gcc
make
./configure
--host=arm-linux --disable-hp3600 --disable-arctic2 --disable-mk712
--disable-collie --disable-corgi --disable-ucb1x00 --disable-linear-hYYY0
--with-gnu-ld --prefix=/usr/local/tslib
ac_cv_func_malloc_0_nonnull=yes CC=arm-none-linux-gnueabi-gcc
生成瘦身应用程序和库
make
install
注意,--host说明交叉编译的目标结构,--prefix指定make
install后库文件以及应用程序的存放位置。这个最好制定,不然就全被放到默认的地方,貌似是/usr....

虚拟机下运行
/home/ck/work/filesys/rootfs/usr
mkdir
/home/ck/work/filesys/rootfs/usr/local/qt4.7.1
cp -Rfv /usr/local/qt4.7.1
/home/ck/work/filesys/rootfs/usr/local/
cp -Rfv /usr/local/tslib
/home/ck/work/filesys/rootfs/usr/local/
vi
/home/ck/work/filesys/rootfs/etc/profile
加入如下内容
export
QTDIR=/usr/local/qt4.7.1/lib
export
TSLIB_ROOT=/usr/local/tslib
#指定触摸屏设备节点为event0.在进入文件系统后可以在/dev下查到有input文件夹,里面有event0这个文件。
export
TSLIB_TSDEVICE=/dev/event1
export
TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
#指定配置文件为ts.conf
export
TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
#控制台设为none
export
TSLIB_CXXXOLEDEVICE=none
#指定帧缓存设备节点为fb0
export
TSLIB_FBDEVICE=/dev/fb0
export
POINTERCAL_FILE=/etc/pointercal
#指定触摸屏校准文件pointercal的存放位置
export
TSLIB_CALIBFILE=/etc/pointercal
export
QWS_MOUSE_PROTO=Tslib:/dev/event1
export PATH=$TSLIB_ROOT/bin:$PATH
export
LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$QTDIR/lib:$LD_LIBRARY_PATH
注意:TSLIB_TSDEVICE根据不同板子这里设置可能会有差异,具体在开发板进入文件系统后查询dev下的文件,通常在input下会有触摸屏的驱动程序文件。我这里是event0,因此对应设备节点填/dev/input/event0.

开发板下运行
source
/etc/profile
可以查看环境变量:
echo
$LD_LIBRARY_PATH
编辑tslib/etc/ts.conf文件,编译内容如下:
vi
etc/ts.conf
module_raw input
module pthres pmin=1
module variance
delta=30
module dejitter delta=10000
module
linear
注意,确保module_raw前面没有空格,否则会弹出Segmentation
fault的错误。
1.1.2. 问题及解决办法
注意:问题的源头可能是版本,需要保持编译器和文件系统中的库文件的一致性,最好文件系统自己编译移植。
1)
出现error while loading shared libraries: libts-1.0.so.0: cannot open shared
object file: No such file or
directory问题。
解决办法:此问题为tslib库的路径不对,搜索不到库文件libts-1.0.so.0,此时检查环境变量LD_LIBRARY_PATH;

2)
运行Qt可执行程序需要加上 –qws命令(创建framebuffer共享运行),运行时出现错误relocation error:
/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtGui.so.4: symbol powf,
version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time
reference,此时是由于缺少与安装qte版本对应编译器的lib库的问题。
解决办法:是进入主机/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/lib目录下找到libstdc++.so.6链接的文件libstdc++.so.6.0.8(通过右键属性——〉基本,可以看到链接的文件),复制并重命名为libstdc++.so.6到/opt/pro_5.0_L137/filesys
/lib文件夹下,之前别忘了将该文件夹下的libstdc++.so.6移到其它地方或重命名,如libstdc++.so.6.old。同时也可以不使用覆盖的方法,通过连接的方法实现。

./helloword:
/lib/libc.so.6: version `GLIBC_2.9' not found (required by
/usr/local/qt4.7.1/lib/libQtGui.so.4)
可能是
可以输入
cd /usr/lib
strings
libc.so.6 | grep
GLIBC
查看GLIBCXX_XXX是否在其中,如果不在,说明是库的版本与编译器版本不一致,需要把编译器的库文件拷贝到板子上
虚拟机:
root@ck-virtual-machine:/home/ck/work/filesys/rootfs/usr/lib#
cp /usr/local/arm-2010q1/arm-none-linux-gnueabi/libc/lib/libc-2.11.1.so
./
板子:
cd /lib
ln -s /usr/lib/libc-2.11.1.so libc.so.6

cd
/usr/lib
/usr/lib # ln -s libc-2.11.1.so libc.so.6

问题3:
Could
not read calibration: /etc/pointercal
这个是因为触摸屏没有校准,
校准之后会生成一个/etc/pointercal文件

Cannot open /dev/h3600_ts (No such file or
directory
这个是因为你的触摸屏对应的设备文件名不是 h3600_ts , 有可能是h3600_tsraw 或者 ts什么的, 你到
/dev/目录下看看

问题
No raw modules loaded.
Ts_config: No such file or
directory

解决办法:
修 改$TSLIB_ROOT/etc/ts.conf, 至少放开一个module_raw,
并去掉前面空格

问题:
运行QT程序:
Segmentation
fault

解决办法:
运行时添加参数
./helloword -qws -fn
SIMHEI

问题:
tslib: Selected device is not a touchscreen (must
support ABS and KEY event
types)
解决办法:
内核和文件系统编译时加入触摸屏支持:
一、内核配置支持触摸屏
<*> Erasoc Touch
Screen driver support based on SPI Controller

<*>
Touchscreen
interface
(640)
Horizontal screen
resolution

(480) Vertical screen resolution

<*> Event interface

[*]
Touchscreens ---> 里面什么都不用选

问题:
ts_open: No such file or
directory
解决办法:
用env命令看一下,当前系统是否有你设置的tslib环境变量

export
LD_LIBRARY_PATH=/usr/local/lib:$QTDIR/lib:$LD_LIBRARY_PATH export
TSLIB_ROOT=/usr/local/lib
export
TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_FBDEVICE=/dev/fb0
export
TSLIB_PLUGINDIR=/usr/local/lib/ts
export TSLIB_CXXXOLEDEVICE=none
export
TSLIB_CONFFILE=/usr/local/etc/ts.conf
export
POINTERCAL_FILE=/etc/pointercal
export
TSLIB_CALIBFILE=/etc/pointercal
export
QWS_MOUSE_PROTO=Tslib:/dev/input/event0

. 移植tslib,将ubuntu中的/opt/tslib
拷贝到根文件系统中的/opt/下面
root@ck-virtual-machine:/home/ck/work# cp -av
/usr/local/tslib
filesys/rootfs/opt/
移植qte4.7.0将/usr/local/Trolltech/QtEmbedded-4.7.0-arm下面的lib文件夹拷贝到根文件中的相同目录下(必需得先创建相应的目录)
root@ck-virtual-machine:/home/ck/work#
cp -av /usr/local/qt4.7.1/lib/* filesys/rootfs/lib/
增加新的显示中文的字体wenquanyi
放到上面的/lib/fonts目录下。删除其他不需要的字体(未做)
拷贝/usr/local/Trolltech/QtEmbedded-4.7.0-arm/plugins目录到根文件系统中的/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/目录下
root@ck-virtual-machine:/home/ck/work#
cp -av /usr/local/qt4.7.1/plugins/*
filesys/rootfs/lib/

测试example下面的程序,重新配置makefile即可出现
make
confclean
编译选项去掉:
-nomake examples -nomake demos -nomake docs -nomake
tools

1. 复制tslib库以及ts目录,
cp /usr/local/tslib/lib/libts*
/usr/local/qte4.6.3-arm/lib/
cp -rf /usr/local/tslib/lib/ts
/usr/local/qte4.6.3-arm/lib/
进入目录:
cd
/usr/local/gcc-3.4.6-glibc-2.3.6/arm-linux/arm-linux/lib
继续拷贝库:
cp
libgcc_s.so.1 /usr/local/qte4.6.3-arm/lib/
cp librt.so.1
/usr/local/qte4.6.3-arm/lib/
cp libstdc++.so.6
/usr/local/qte4.6.3-arm/lib/
cp libz.so.1
/usr/local/qte4.6.3-arm/lib/
拷贝库完成,对于有些库文件,可以裁剪一下,命令如下:
arm-linux-strip
libstdc++.so.6
最后将/usr/local/qte4.6.3-arm/lib/中的所有文件打包,命令如下:
tar czvf
lib-new.tar.bz2 *
然后再将tslib校准程序移植,cd /usr/local/tslib/lib,拷贝需要的库文件,cp
/usr/local/qte4.6.3-arm/lib/librt.so.1 .,cp
/usr/local/qte4.6.3-arm/lib/libz.so.1 .,最后将整个tslib目录打包,命令如下:tar czvf
touch.tar.bz2
*,最后将我们所有打包的文件以及前面交叉编译的MPlayer全部放到一个目录下,这里我建立了一个embed目录,将所有包放进去,解压整理,最终生
成一个应用程序包,其中包括MPlayer,触摸屏校准程序,usb设备挂载,以及qte4.6.3,包的名字为:embed.tar.bz2。至此我们
的移植以接近尾声,下面我们把编译好的应用程序包下载到star2410上,步骤如下:先在Linux下面使用minicom连接上板子,设置板子的IP
使和主机在同一网段,命令如下:ifconfig eth0 192.168.88.189 broadcast 192.168.88.254
,然后再执行inetd,是更改生效。然后在windows下使用FlashFXP软件匿名连接板子的IP,连接上后,将embed.tar.bz2传送
到板子,很快就可以传完,然后在板子上,进入root目录,执行命令:mv /root/system/var/ftp/pub/embed.tar.bz2
.,然后解压程序包:tar xzvf
embed.tar.bz2,这样root目录下就出现了我们的程序目录,首先我们进入touch目录进行触摸屏校准,我们先写touch.sh一个脚本
方便程序执行,脚本内容如下:#bin/sh
export QTDIR=$PWD
export
LD_LIBRARY_PATH=$PWD/lib:/lib
export TSLIB_TSDEVICE=/dev/input/event0
export
TSLIB_PLUGINDIR=$PWD/lib/ts
export TSLIB_CXXXOLEDEVICE=none
export
QT_TSLIBDIR=$PWD/lib
export TSLIB_CONFFILE=$PWD/etc/ts.conf
export
POINTERCAL_FILE=$PWD/etc/ts-calib.conf
export
QWS_MOUSE_PROTO=tslib:/dev/input/event0
export
TSLIB_CALIBFILE=$PWD/etc/ts-calib.conf
/root/touch/bin/ts_calibrate
/root/touch/bin/ts_test

转自:http://www.mcuzone.com/bbs/simple/?t9208.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: