含有 HID 多点触摸控制器的触摸屏、触摸板在 Android 和 Linux 内核中都是由 "hid-multitouch" 驱动进行支持的。因此如果你的系统连接触摸屏没有反应,问题基本都出于驱动未加载或者与触摸屏的 VID 与 PID 不适配。以下分情形讨论:
1、系统中已存在“hid-multitouch”驱动
若“hid-multitouch”驱动是以内核模块的方式存在于系统里面(相对静态编译进内核而言),那么可以尝试执行如下命令。在 Linux 使用“终端”在其中输入,若是 Android 需要用 ADB 方式连接然后输入。命令为:
modprobe hid-multitouch
若没有报错,则表示驱动已经加载成功了。若需要开机默认加载,将以上命令写入系统的“/etc/rc.local”文件即可。
2、系统中不存在“hid-multitouch”驱动
此时,也有两种途径编译加载该驱动,若你手上有该系统的内核源码,也即对应你的电脑或产品的源代码。那么按以下路径选中驱动,重新编译系统即可,将编译好的内核固件重新烧录即。具体的编译驱动路径为:
1. Device Drivers --->
2. HID Devices --->
3. Special HID Drivers --->
4. HID Multitouch panels
如果你没有该系统源码,也可以在可编译驱动模块的主机上编译源码文件“hid-multitouch.c”,编译成功会生成“hid-multitouch.ko”文件。然后拷贝至你的系统,命令行方式 insmod 或者 modprobe 该驱动即可。这里给出相关的源文件以及在Ubuntu、树莓派等系统上进行操作的具体步骤:
若你做了以上操作仍无法支持触摸屏,那么可能是由于你的系统内核版本较老,请检查你的内核版本是否处于 3.4 系统及以下,若是则按以下步骤继续进行。
1、在 hid-ids.h 中添加触摸屏的 vid 与 pid,在 linux 下用 lsusb 命令查看,windows 设备管理器中查看“硬件ID”
1. #define USB_VENDOR_ID_MYSCREEN 0x1A86
2. #define USB_DEVICE_ID_MYSCREEN 0xE030
2、在 hid-multitouch.c -> mt_devices[] 中加入
1. { .driver_data = MT_CLS_DEFAULT,
2. HID_USB_DEVICE(USB_VENDOR_ID_MYSCREEN,
3. USB_DEVICE_ID_MYSCREEN) }
以上步骤完成后重新编译内核即可,或者选择单独编译该驱动。记得一定要在内核中选中该驱动。