免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 832 | 回复: 0
打印 上一主题 下一主题

2440 qtopia zz [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-06 11:51 |只看该作者 |倒序浏览

在UTU-2440上移植Qtopia4与TSLIB
摘要     在扬创UTU-2440 ARM开发板上成功移植了Qtopia4.2.0,Qtopia4.3.3,以及QtopiaCore4.3.5,QtEmbedded4.4。总结移植过程及TSLIB库在嵌入式设备上的应用。  正文:  
   
      
首先必须明白,现在称的Qtopia4与Qt3的名称有一些变化,Qtopia4.x包括了原Qtopia在内的一整套程序,而Qt3.x中的qt-
embedded在Qt4.4以前叫Qtopia-core,在Qt4.4中又改回Qt-embedded这个名字。(名字真多……)
       对于一般QT4程序的嵌入式开发,只需要移植QtopiaCore就可以了。      
移植前需要配置好编译环境,本文中采用的编译环境是:
   
     
主机系统:Ubuntu 8.04.1      
主机编译器:GCC 4.2.4(Ubuntu 4.2.4-1ubuntu3)        
交叉编译器:arm-linux-gcc-3.4.1        
软件资源:qtopia-opensource-src-4.2.0.tar.gz        
             qtopia-opensource-src-4.3.3.tar.gz        
             qtopia-core-opensource-4.3.5.tar.gz        
             qt-embedded-linux-opensource-src-4.4.3.tar.gz        
      这里以qtopia-opensource-src-4.3.3.tar.gz为例,其它几种包的移植方法类似,其中qtopia-opensource-src-4.2.0的移植方法可以参考以下链接:        
[1]http://blog.chinaunix.net/u2/86537/showart_1676803.html
       移植过程:   
     
移植QTOPIA:
      
      
      设定工作目录为/home/arm         
      在工作目录下,解压qtopia-opensource-src-4.3.3.tar.gz         
      编译之前,打开qtopia-opensource-src-4.3.3/qtopiacore/qt/src/gui/embedded/qmouselinuxtp_qws.h         
加上这2行:#define QT_QWS_IPAQ         
           #define QT_QWS_IPAQ_RAW(如果采用TSLIB这步似乎可以不做,未验证)         
      还有需要注意的地方是:看一下 qmouselinuxtp_qws.cpp /dev/h3600_tsraw, 是不是你板子上的驱动文件名字,如果不是改成一样就可以了。[
2
]         
      由于qtopia不能直接在源码目录中直接编译,所以还要单独建立一个目录,这里新建一个build目录         
root@linux:/home/arm # mkdir build         
root@linux:/home/arm # cd build         
      可以配置编译时的选项,通过configure的参数选择需要编译哪些模块或功能,关于configure的参数可以通过configure --help或者在源码包根目录下的README.html中查找。         
     这里仅给出一个例子,不一定完全要按这样写,但是,-xplatform linux-arm-g++ 和 -embedded arm 一定要加上以表明是交叉编译。         
      此外 -prefix指定了编译完后image安装的位置,默认为./image,注意!编译完成后程序一定要在这个指定的位置运行,否则会出错!
        
         
           
root@linux:/home/arm/build
#  ../qtopia-opensource-4.3.3/configure -edition phone -xplatform
linux-arm-g++ -arch arm -prefix /opt/Qtopia -no-qvfb -displaysize
272x480 -no-ssl -no-bluetooth -no-dbus -no-drm -no-v4l2 -no-modem
-no-libamr -extra-qt-config "-qt-zlib -qt-gif -qt-libpng -qt-libmng
-qt-libjpeg" -extra-qtopiacore-config "-xplatform qws/linux-arm-g++
-embedded arm -qt-mouse-linuxtp -qt-mouse-tslib
-I/home/arm/tslib/include -L/home/arm/tslib/lib"
         
           
     
上面的例子中,将tslib库也编译进去作为触摸屏校准,由于我一开始用linuxtp触摸屏总是不能校准(反向),因此后来改用tslib。需要注意的
是,这里需要指定tslib的头文件的库所在位置,所以必需在这个步骤之前交叉编译好tslib并把它放到/home/arm/tslib下。
交叉编译tslib的过程如下:[
3
][
5
]            
root@linux:/home/arm # svn co svn://svn.berlios.de/tslib/trunk/tslib tslib            
如果没有安装svn,请sudo apt-get install subversion            
然后cd tslib            
#export CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc            
#echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache            
#./autogen
                  
//避免检查ac_cv_func_malloc_0_nonnull
      
#echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
      
//配置目标机、缓冲、安装路径
      
#./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=/home/arm/tslib
      
# make
      
# make install
      
      
如果出现错误,请检查m4,autoconf,automake是否已经安装。
           
tslib的配置将在本文的末尾详述。
      
接着说Qtopia4,上一步configure结束后,按照提示依次执行make,make install
      
这样在build目录下会得到image目录,里面的东西就是我们需要的了。
      
将image里面的文件通过NFS挂载或者其它方式移动到开发板的/opt/Qtopia目录下,然后编写一下shell脚本,内容如下:
      
#!/bin/sh
      
export set QTDIR=/opt/Qtopia      
export set QPEDIR=/opt/Qtopia        
export set KDEDIR=/opt/Qtopia        
export set QWS_KEYBOARD="USB:/dev/input/event1"        
export set QWS_MOUSE_PROTO="LinuxTP:/dev/h3600_tsraw"        
export set PATH=$QPEDIR/bin:$PATH        
export QWS_DISPLAY="LinuxFb:mmWidth105:mmHeight65:0"        
export QWS_SIZE=480x272        
export set LD_LIBRARY_PATH=$PATH:$QTDIR/lib:$QPEDIR/lib
      
$QTDIR/bin/qpe &
      
注意:此shell脚本中关于触摸屏的尺寸是针对三星4.3寸触摸屏。
      
执行脚本,如果显示及触摸屏反应一切正常,则基本移植成功,注意此时在/etc下必须要有校准文件pointercal
      
      如果提示时区错误,则必须在/usr/share下存在zoneinfo,也可以参照[
1
]修改文件的位置。
      
      
         
      如果提示共享库连接的错误,则可能是当时共享库与编译时所使用的库版本不同,可以参照另一篇文章《utu2440-利用busybox制作文件系统》进行更新。
         
           
TSLIB的移植与触摸屏校准                  
如果没有pointercal,则可以通过tslib进行校准,方法如下:[
3
][
4
]
         
将/home/arm/tslib中的所有文件拷到开发板的某个目录下,这里假设为/usr/share/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 1.4中的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 h3600 的注释去掉了。
         
我写了一个SHELL脚本来实现TSLIB的校准:
         
  1 #!/bin/sh           
  2 export TSLIB_ROOT=/usr/share/tslib            
  3 export TSLIB_TSDEVICE=/dev/h3600_tsraw            
  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/h3600_tsraw"            
  9 export TSLIB_CALIBFILE=/etc/pointercal            
10 export TSLIB_CONSOLEDEVICE=none            
11 $TSLIB_ROOT/bin/ts_calibrate
         
要在加载TSLIB的情况下运行Qtopia,需要将原来的SHELL脚本改为:
         
  1 #!/bin/sh           
  2 export TSLIB_ROOT=/usr/share/tslib            
  3 export TSLIB_TSDEVICE=/dev/h3600_tsraw            
  4 export TSLIB_FBDEVICE=/dev/fb0            
  5 export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf            
  6 export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts            
  7 export TSLIB_CALIBFILE=/etc/pointercal            
  8 export TSLIB_CONSOLEDEVICE=none            
  9 export HOME=/root            
10 export QTDIR=/opt/Qtopia            
11 export QPEDIR=/opt/Qtopia            
12 export KDEDIR=/opt/Qtopia            
13 export LD_LIBRARY_PATH=$PATH:$QTDIR/lib:$TSLIB_ROOT/lib:$LD_LIBRARY_PATH            
14 export QWS_KEYBOARD="USB:/dev/input/event1"            
15 export QWS_MOUSE_PROTO="Tslib:/dev/h3600_tsraw"            
16 export PATH=$QPEDIR/bin:$PATH            
17 export QWS_SIZE=480x272            
18 export QWS_DISPLAY="LinuxFb:mmWidth115:mmHeight65:0"            
19 [ -f /etc/pointercal ] || /usr/bin/calibrate            
20 $QPEDIR/bin/qpe &
         
注意第15行中的Tslib
         
第19行的意思是,当/etc/pointercal不存在时(即触摸屏还没有进行校准),启动QTLIB校准程序(假设校准程序的脚本放在/usr/bin下,脚本名称为calibrate),校准程序执行后会在/etc下生成校准文件pontercal
          附录:关于configure与交叉编译         
           
      对于一些包(库)的安装,可以通过设置configure的参数来进行交叉编译,这样就可以免去修改Makefile的麻烦,常见的方法是在 configure的后面加上参数--host=arm-linux(当然还可以是其它架构)。具体请看参考资料[
5
]。对于某一些包,如zlib,这种方法可能无效,因此建议在configure之前先用configure --help查看一下是否支持这样的参数。对于此法无效的包来说,只好先configure再改Makefile了。
                  
      我也尝试过移植QtExtended4.4,但是编译时出现Prerequisite failed的错误,暂时没找到解决方案,也没有再研究。
               参考资料        
[1]http://blog.chinaunix.net/u2/86537/showart_1676803.html         
[2]http://blog.chinaunix.net/u2/86537/showart_1666271.html         
[3]TSLIB校准过程 http://www.mangbar.com/document/8a80809d19bd3a240119ccd45b90399e         
[4]tslib-1.4 交叉编译和分析文档http://linux.chinaunix.net/bbs/archiver/tid-1042741.html         
[5]Configure 参数选项详解http://www.linuxdiyf.com/viewarticle.php?id=22076         
[6]http://blog.chinaunix.net/u2/86537/showart_1668831.html
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/39383/showart_1853496.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP