转:移植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
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
相关文章推荐
- 移植tslib到开发板及部分问题解决
- Linux移植随笔:终于解决Tslib的问题了
- ARM开发板6410移植opencv-2.4.7库qt 问题汇总解决
- Linux移植随笔:终于解决Tslib的问题了
- 编译移植Mplayer到mini2440开发板的过程及问题解决办法
- 仿QQ语音变声功能实现(二)---移植到android studio 并解决部分问题
- Android移植speex部分问题解决
- Linux移植随笔:终于解决Tslib的问题了
- 移植busybox1.15.0到OK2440V3开发板(3)---问题与解决
- tslib 移植问题与解决方法
- 解决Tslib移植之后自己编写的QT程序不能使用触屏的问题
- Linux移植随笔:终于解决Tslib的问题了【转】
- 移植TSLIB问题device is not a touchscreen I understand
- mtu设置--解决部分网站打不开的问题
- 关于TP5视图分离到根目录的解决方法 原有: 为了方便前端开发,我想把视图(view)部分分离出来专门给前端进行修改 过程:在进行视图设置分离的过程遇到了问题 参考了官方文档http://www
- 安卓学习笔记---解决在在Edittext输入的时候,输入框被软键盘遮挡部分内容的问题(二)
- Android 解决部分手机拍照后获取的图片被旋转的问题
- Cinnamon解决鼠标主题部分指针缺失的问题
- IE DOM实现存在的部分问题及解决方法
- 切片工具:图像缩小到某级别后,部分图像缺失问题的解决