分类: 嵌入式
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-
# 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-
将qtopia-core-opensource-src-
qtopia不能直接在源码目录中直接编译,新建一个build目录
# cd build
# ../qtopia-core-opensource-src-
-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/event0及Qtopia配置:QWS_MOUSE_PROTO="Tslib:/dev/input/event0",须检查内核Device DriversàInput device supportàEvent interface及touch 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 Window和Qt两层的功能,选项-qws表示启动类似于X Window的服务。
参考资料:
[1] http://blog.csdn.net/gnuhpc/archive/2009/07/05/4322507.aspx
[2] 北京亚嵌宋老师的<<嵌入式应用开发>>教材