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

24 篇文章 0 订阅

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值