问题的提出:
Linux设备上电的时候,如果触摸屏和鼠标均为插入状态,鼠标为event2,触摸屏为event3.如果只有触摸屏,没有鼠标,则触摸屏为event2。
但TSLIB的环境变量只能使用指定的event才能正常运行。因此需要Linux启动的时候自动判断触摸屏并为其指定event编号。
实现方法:
1,Linux需要支持mdev
2,查看/etc/mdev.conf
#cat /etc/mdev.conf
sd[a-z][0-9] 0:0 666 @/etc/mdev/mount.sh
sd[a-z] 0:0 666 $/etc/mdev/mount.sh
mmcblk0p[0-9] 0:0 666 @/etc/mdev/mount.sh
mmcblk1p[0-9] 0:0 666 @/etc/mdev/mount.sh
mmcblk0 0:0 666 $/etc/mdev/mount.sh
mmcblk1 0:0 666 $/etc/mdev/mount.sh
input.* 0:0 666 @/etc/mdev/keyboard.sh
3,可以看见mdev已经有一个键盘处理的input子系统脚本keyboard.sh,修改keyboard.sh为如下内容
#cat /etc/mdev/keyboard.sh
#!/bin/sh
if [ "$ACTION" == "add" ];then
#判断触摸屏的key和name,匹配到了则ln -s 为event21
devtype=${MDEV:6:5}
if [ "$devtype" == "event" ];then
if [ -e /sys/class/$MDEV/device/name ];then
if [ -e /sys/class/$MDEV/device/capabilities/key ];then
name=$(cat /sys/class/$MDEV/device/name | awk '{print}')
key=$(cat /sys/class/$MDEV/device/capabilities/key | awk '{print $1}')
if [ "$key" == "400" -a "$name" == "ILITEK Multi-Touch-V3000" ]; then
echo "Find XXXXX TouchPanel:" $devtype $name $key > /dev/console
if [ -L /dev/input/event21 ];then
rm /dev/input/event21
fi
ln -s /dev/$MDEV /dev/input/event21
fi
fi
fi
fi
#触摸屏处理完毕
##if [ "$ACTION" == "add" ];then
if [ -e /sys/class/$MDEV/device/capabilities/key ];then
key=$(cat /sys/class/$MDEV/device/capabilities/key | awk '{print $(NF)}')
key="0x""$key"
echo $((num=$key)) > /dev/null
if [ $(($num & 0x00ff0000)) == $((0x00ff0000)) ];then
echo "found keyboard" > /dev/console
if [ -L /dev/input/keyboard ];then
rm /dev/input/keyboard
fi
ln -s /dev/$MDEV /dev/input/keyboard
fi
fi
fi
4,至此,则可以将TSLIB的环境变量设置为固定的event21了