Chinaunix首页 | 论坛 | 博客
  • 博客访问: 53586
  • 博文数量: 24
  • 博客积分: 1480
  • 博客等级: 上尉
  • 技术积分: 250
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-12 16:20
文章分类

全部博文(24)

文章存档

2010年(24)

我的朋友

分类: 嵌入式

2010-07-30 15:02:14

本文介绍eGalax 触摸屏在qte上面的移植

1.TSLIB

第一步:解压tslib-1.4.tar.gz

 

        tar -zxvf tslib-1.4.tar.gz

 

第二步:进入解压过的目录

  

        cd tslib-1.4

 

第三步:执行tslib-1.4目录下的autogen.sh

 

         ./autogen.sh

              这一步需要安装一些工具:

sudo apt-get install automake

sudo apt-get install libtool

 

第四步:执行autogen.sh脚本所生成的Makefile文件

 

        请打入以下命令:

      echo "ac_cv_func_malloc_0_nonnull=yes" >$ARCH-linux.cache

      ./configure --host=arm-linux-gnu  --prefix=/home/noah/mytslib --cache-file=$ARCH-linux.cache

 

      --host是指你的交叉编译器的前最;例如:你的交叉编译器是arm-linux-gcc,--host=arm-linux.如果是arm-softfloat-linux-gnu-gcc --host=arm-softfloat-linux-gnu

 

--prefix 是你执行make install 的时候编译后生成的可执行文件和库文件以及配置文所安装的目录;

 

      configure文件下还有好多选项;你可以执行./configure -help 来进行选择其他项,不过在这里这些选项就够了。

 

第五步:执行make

 

第六步:执行make install

 

第七步:把指定安装目录下的mytslib的文件都copy到你所挂载的根文件下

 

        sudo cp -rf /home/noah/mytslib/*    /rootfs/mytslib

 

第八步:修改/rootfs/mytslib下的etc目录中ts.cong文件

 

        vi ts.conf  将第二行的#module_raw input修改成module_raw input

                              #module_raw h3600修改成module_raw h3600

修改成module_raw h3600 不是因为eGalax的数据要h3600来解析,稍后我们用自己的解析函数代替h3600里面的内容


2.eGalax提供的文档说明里面介绍了3三个eGalax的驱动:hiddev,touchscreenusb,tkusb

其中tkusb是eGalax公司提供的,而hiddev,touchscreenusb是内核自己提供的,这里,我们选用hiddev驱动,在内核中选中Device Drivers --> HID Devices --> 全部选择,其中/dev/hidraw /dev/hiddev 要在etc/udev/下的创建规则中声明 ,因为我们用的TSDEVICE环境变量是event,所以 Input device support中的event选项也要选上,这样当我们插上usb接口的时候,系统会选择hiddev作为驱动,注意内核里面就不要选touchscreenusb了,这样系统会用touchscreen作为驱动的,插usb后

cat /proc/bus/usb/devices

可以看到

T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=0eef ProdID=0001 Rev= 1.00
S:  Manufacturer=eGalax Inc.
S:  Product=USB TouchController
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid
E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=3ms


如果没有devices这个文件,这说明内核中没有选中usbfs文件系统,选中后在/etc/init.d/rcS

中muont

/bin/mount -t usbfs none /proc/bus/usb



3.qte编译的时候

./configure -release -prefix <安装目录>/qt-4.5.3 -xplatform qws/linux-arm-g++ -arch arm  -embedded arm -depths 4,8,16,32 -qt-sql-sqlite -no-mouse-linuxtp -qt-mouse-tslib -I/<安装目录>/tslib/include  -L/<安装目录>/tslib/lib

加入tslib的路径


4.设置环境变量,可以在/etc/profile中添加

export TSLIB_ROOT=/usr/local/qtts
export TSLIB_TSDEVICE=/dev/input/event0
export QWS_SIZE=1024x768
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_PLUGINDIR=/usr/local/qtts/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_CONFFILE=/usr/local/qtts/etc/ts.conf
export POINTERCAL_FILE=/tmp/pointercal
export QWS_MOUSE_PROTO=Tslib:/dev/input/event0
export TSLIB_CALIBFILE=/tmp/pointercal
export QWS_DISPLAY="LinuxFb:mmWidth140:mmHeight130:0"
export QT_QWS_FONTDIR=/usr/local/Trollteck/QtEmbedded-4.5.3-linux-arm/lib/fonts


5.这一步最关键,是因为我们用的是h3600来解析eGalax的数据,显然不对,所以要修改plug/h3600-raw.c的内容,直接把galax-raw.c里面的内容全部代替进去,也可以自己patch一下

tslib-general/attachments/20090707/f4ccffc2/attachment.ksh
注意代码里面有一个检测eGalax型号的函数,Vendor=0eef Product=0001 Version=0112,我的Version是0210
,改了之后还是能用的,不知道其他型号能不能用,然后重新make install一边
启动qt后,触摸屏使用正常

触摸屏移植参考网址

tslib-general/2009-July/000212.html
tslib-general/attachments/20090707/f4ccffc2/attachment.ksh

http://hi.baidu.com/i_love_lei_lei/blog/item/f385e83477ba4f81a71e1263.html

http://blog.sina.com.cn/s/blog_5d9051c00100drjs.html
http://hi.baidu.com/luv_resplendent/blog/item/39ad08ec9037322162d09ff9.html


阅读(2664) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-04-28 15:45:14

usbtouchscreen的好像数据定义不同,我没有成功。 我按照楼主的方法也没有成功,而且galax_raw.c中也是说用hid的方式,不知怎么会事,就是在校验的时候读回数据。请楼主指教一二,谢谢!

chinaunix网友2010-09-08 15:48:43

请问一下touchscreenusb tkusb 这二个方法你有在arm上试过吗?