硬件平台:sen_A20
系统版本:Android 4.2.2
内核版本:linux3.3
固件版本:v1.2
电阻屏:17寸 EETI eGTouch (USB)
一、配置内核
(1)配置.config
1. CONFIG_INPUT_EVDEV
2. CONFIG_INPUT_UINPUT
3. CONFIG_HIDRAW ( for USB Interface )
可以使用make menuconfig ARCH=arm命令选中:
< * > Event interface
< * > User level driver suport
--HID Devices
< * > /dev/hidraw raw HID device support
(2)检查是否被选中
CONFIG_INPUT_EVDEV=y
CONFIG_INPUT_UINPUT=y
CONFIG_HIDRAW=y
二、修改驱动代码:
1、
1. /SourceCode/drivers/input/evdev.c 添加
static bool evdev_match(struct input_handler *handler, struct input_dev *dev)
{
/* Avoid EETI USB touchscreens */
#define VID_EETI 0x0EEF
if ((BUS_USB == dev->id.bustype) && (VID_EETI == dev->id.vendor))
return false;
return true;
}
static struct input_handler evdev_handler = {
.event = evdev_event,
.match = evdev_match, /* Added by EETI*/
.connect = evdev_connect,
.disconnect = evdev_disconnect,
.fops = &evdev_fops,
.minor = EVDEV_MINOR_BASE,
.name = "evdev",
.id_table = evdev_ids,
};
2. /SourceCode/drivers/input/mousedev.c
static bool mousedev_match(struct input_handler *handler, struct input_dev *dev)
{
/* Avoid EETI USB touchscreens */
#define VID_EETI 0x0EEF
if ((BUS_USB == dev->id.bustype) && (VID_EETI == dev->id.vendor))
return false;
/* Avoid EETI virtual devices */
if ((BUS_VIRTUAL == dev->id.bustype) && (VID_EETI == dev->id.vendor))
return false;
return true;
}
static struct input_handler mousedev_handler = {
.event = mousedev_event,
.match = mousedev_match, /* Added by EETI */
.connect = mousedev_connect,
.disconnect = ousedev_disconnect,
.fops = &mousedev_fops,
.minor = MOUSEDEV_MINOR_BASE,
.name = "mousedev",
.id_table = mousedev_ids,
}
3. /SourceCode/drivers/input/joydev.c
static bool joydev_match(struct input_handler *handler, struct input_dev *dev)
{
/* Avoid touchpads and touchscreens */
if (test_bit(EV_KEY, dev->evbit) && test_bit(BTN_TOUCH, dev->keybit))
return false;
/* Avoid tablets, digitisers and similar devices */
if (test_bit(EV_KEY, dev->evbit) && test_bit(BTN_DIGI, dev->keybit))
return false;
/* Avoid EETI virtual devices */
#define VID_EETI 0x0EEF
if (( BUS_VIRTUAL == dev->id.bustype) && (VID_EETI == dev->id.vendor))
return false;
return true;
}
static struct input_handler joydev_handler = {
.event = joydev_event,
.match = joydev_match,
.connect = joydev_connect,
.disconnect = joydev_disconnect,
.fops = &joydev_fops,
.minor = JOYDEV_MINOR_BASE,
.name = "joydev",
.id_table = joydev_ids,
};
三、编译内核、系统,将固件烧写到板子上(用串口工具查看)
1、在终端输入“cat /proc/bus/input/devices“
2、将厂商携带的文件放到android目录下:
厂家提供有四个文件:
a) eGTouchD: a daemon service driver for EETI touch controller.
b) eGTouchA.ini : a parameter list could be loaded by driver
c) eGalaxTouch_VirtualDevice.idc: a file necessary for Android 3.0 upwards
d) eGalaxCalibrator: a tool provides calibration and line drawing.
(1)将eGTouchD放到 system/bin目录下,并修改init.rc文件
添加: service eGTouchD /system/bin/eGTouchD
user root
group root
oneshot
(2)将 eGalaxTouch_VirtualDevice.idc放到system/usr/idc目录下
(3)将 eGTouchA.ini文件放到/data目录下:
*为了方便,我们可以将这三个文件放在device\softwinner\sugar-ref001目录下:通过配置sugar-ref001.mk将文件移动到相对于的位置。编译烧写即可
这里要详细说明下:在文件系统启动的时候eGTouchD这个文件会检测data目录下是否有这个文件,如果没有就自动创建,而系统自动创建的这个文件跟自己配的有所差异
,这是厂商的一个BUG,我们可以在文件系统加载的时候,同时也启动这个文件,不让他自动生成。
首先,在device\softwinner\sugar-ref001\sugar-ref001.mk添加:
PRODUCT_COPY_FILES += \
device/softwinner/sugar-ref001/eGTouchD:system/bin/eGTouchD\
device/softwinner/sugar-ref001/eGalaxTouch_VirtualDevice.idc:system/usr/idc/eGalaxTouch_VirtualDevice.idc\
device/softwinner/sugar-ref001/eGTouchA.ini:data/eGTouchA.ini\
这样就eGTouchA.ini就会打包在userdate.img里面。但是有时我们不想将userdate.img挂载上去,比如:我1G的内存,如果挂载上去,系统只能识别到可用只有128M,显然是不理想的。如果你生硬不挂载userdate.img上去,那么系统会自动创建eGTouchA.ini,这样会造成在触摸的过程中会出现死机的现象。那么我们可以修改:
将device/softwinner/sugar-ref001/eGTouchA.ini:data/eGTouchA.ini 修改为 /device/softwinner/sugar-ref001/eGTouchA.ini:system/eGTouchA.ini\
将他移动到system目录下,然后我们在android/out/…/suger-ref001/root目录下 的int.rc文件里添加
copy /system/eGTouchA.ini /data/eGTouchA.ini
chmod 0777 /data/eGTouchA.ini
注意要添加权限:
然后打包成固件烧写,收工。
这个触摸屏调试了总共花了将近一周的时间,一开始不知道有eGTouchA.ini这个文件有BUG,在测试的时候用adb pull出来才发现两个文件并不一样(详细配置看说明,这里不介绍),之后问了厂商才得知系统会自动创建。
记录一下,以备忘记,如果哪里有不对,请指出!谢谢