主题 : 移植触模屏驱动到2.6.30.4碰到问题(已解决) 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 8874
精华: 0
发帖: 12
金钱: 105 两
威望: 48 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2009-09-09
最后登录: 2011-08-04
楼主  发表于: 2009-12-07 17:12

 移植触模屏驱动到2.6.30.4碰到问题(已解决)

移植过程:
1.系统配置文件为内核自带的s3c2410_defconfig稍微修改而得来.
2.将友善光盘自带的2.6.29内核中的s3c2410_ts.c, mini2440_adc.c, s3c24xx-adc.h这三个文件编译到2.6.30.4内核的对应位置.
3.在内核配置中,将这两个模块选上. 另对比了一下友善2.6.29配置文件的input device部分,没有发现异常.
4.文件系统为光盘内编译好的QT镜像.

现象:
(1).加载ROOT完成后,画面停在QT的那个绿色欢迎图片那里,"Tap anywhere on the screen to continue."

(2).点触摸幕没反应.

(3).内核启动打印信息显示,ADC和TS两个模块都成功加载.
adc    initialized

s3c2410 TouchScreen successfully loaded
input: s3c2410 TouchScreen as /class/input/input0


(4).我在s3c2410_ts.c的static void touch_timer_fire(unsigned long data)函数中的,
input_report_abs(dev, ABS_X, xp);
input_report_abs(dev, ABS_Y, yp);
input_report_key(dev, BTN_TOUCH, 1);
input_report_abs(dev, ABS_PRESSURE, 1);
input_sync(dev);
这几行代码处,加入printk打印信息.
tmp =xp;
xp=yp;
yp=tmp;
xp>>=2;
xp>>=2;
printk(KERN_ERR "x=%d,y=%d\n",xp,yp);
input_report_abs(dev, ABS_X, xp);
input_report_abs(dev, ABS_Y, yp);
input_report_key(dev, BTN_TOUCH, 1);
input_report_abs(dev, ABS_PRESSURE, 1);
input_sync(dev);
发现在点触模时,串口会有坐标信息打印出来:
x=475,y=453
x=476,y=451
x=487,y=453
......................

(5).在终端输入命令: cat /proc/bus/input/devices 显示结果如下:
I: Bus=0013 Vendor=dead Product=beef Version=0101
N: Name="s3c2410 TouchScreen"
P: Phys=
S: Sysfs=/class/input/input0
U: Uniq=
H: Handlers=event0 evbug
B: EV=b
B: KEY=0
B: ABS=1000003


刚接触linux,对驱动的结构不熟悉,请各位路过的朋友指明一下思路,可能是哪部分出问题了呢?
[ 此帖被illidan在2009-12-09 09:54重新编辑 ]
级别: 新手上路
UID: 8874
精华: 0
发帖: 12
金钱: 105 两
威望: 48 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2009-09-09
最后登录: 2011-08-04
1楼  发表于: 2009-12-09 09:51
具本原因已弄清,现在结贴.
原因如下:
在板子根文件系统,/bin目录下有一个QT初始化的脚本qtopia,在终端下输入命令:
#cat /bin/qtopia

#!/bin/sh

export TSLIB_TSDEVICE=/dev/input/event0

export TSLIB_CONFFILE=/usr/local/etc/ts.conf

export TSLIB_PLUGINDIR=/usr/local/lib/ts

export TSLIB_CALIBFILE=/etc/pointercal

export QTDIR=/opt/qtopia

export QPEDIR=/opt/qtopia

export PATH=$QTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH

export QWS_DISPLAY="linuxFB:mmWidth35:mmHeight45:0"

TS_INFO_FILE=/sys/devices/virtual/input/input0/uevent
                
if [ -e $TS_INFO_FILE -a "/bin/grep -q TouchScreen < $TS_INFO_FILE" ]; then
        export QWS_MOUSE_PROTO="TPanel:/dev/input/event0 USB:/dev/input/mice"
        if [ -e /etc/pointercal -a ! -s /etc/pointercal ] ; then
                rm /etc/pointercal
        fi
else
        export QWS_MOUSE_PROTO="USB:/dev/input/mice"
        >/etc/pointercal
fi
unset TS_INFO_FILE
                                                                              
export QWS_KEYBOARD=TTY:/dev/tty1
export KDEDIR=/opt/kde
                                                                              
export HOME=/root
                                                                              
exec $QPEDIR/bin/qpe 1>/dev/null 2>/dev/null

----------------------------------------------------------------------------------
TS_INFO_FILE=/sys/devices/virtual/input/input0/uevent

uevent,即user space event,就是内核向用户空间发出的一个事件通知,使
得应用程序能有机会对该event作出反应.

到文件系统里来找一找这个东东吧...
# cd /sys

# find -name uevent

未能找到/sys/devices/virtual/input/input0/uevent

但找到了/sys/class/input/input0/uevent  

-----------------------------------------------------------
我不知道/sys/class/input/input0/uevent 这个路径是在哪定义的,所以我只有把根文件系统中的
qtopia脚本改一下了.修改脚本中的 TS_INFO_FILE=/sys/class/input/input0/uevent

改好,用新的文件系统就OK了....
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
2楼  发表于: 2009-12-09 11:16
分析的很好!谢谢分享。
TS_INFO_FILE是友善之臂定义的用来判断是否需要加入USB鼠标支持的宏。可以参考我以前的帖子 http://www.aiothome.net/read.php?tid-1702.html
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 8874
精华: 0
发帖: 12
金钱: 105 两
威望: 48 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2009-09-09
最后登录: 2011-08-04
3楼  发表于: 2009-12-09 13:32
谢谢..跟着总版主大人,好好学习....慢慢消化你写的那些贴子....
级别: 新手上路
UID: 64748
精华: 0
发帖: 27
金钱: 135 两
威望: 27 点
贡献值: 0 点
综合积分: 54 分
注册时间: 2012-03-09
最后登录: 2012-10-09
4楼  发表于: 2012-06-02 20:48
NB,果然解决了、
级别: 新手上路
UID: 76716
精华: 0
发帖: 47
金钱: 235 两
威望: 47 点
贡献值: 0 点
综合积分: 94 分
注册时间: 2012-08-28
最后登录: 2013-01-11
5楼  发表于: 2012-09-26 14:40

 回 1楼(illidan) 的帖子

我不知道/sys/class/input/input0/uevent 这个路径是在哪定义的,所以我只有把根文件系统中的
qtopia脚本改一下了.修改脚本中的 TS_INFO_FILE=/sys/class/input/input0/uevent

改好,用新的文件系统就OK了....

改完脚本之后,需要用busybox重新生成文件系统吗?