linux调试usbtouchsrceen记录
usbtouchsrceen的板子是网上买的,商家称为免驱,后ubuntu虚拟机测试可以使用。
总的来说没有要太多修改的地方。
1、内核配置 USB Touchscreen Driver
在make menuconfig之后,通过Device Drivers——>Input device support——>Touchscreens——>USB Touchscreen Driver 然后选取需要的touchscreen类型,可以全部打开。
2、查看设备的信息
一般的系统usb接口都是有打开的,因此可以查看idVendor和idProduct(在插入usb设备时,一般会提示设备接入的位置)
我的是0x0416, 0x5020
3、源码位置
/kernel/drivers/input/touchscreen/usbtouchscreen.c
添加设备信息到id_table,并使用general driver
4、目标目录
正常情况下,会在/dev/input/下的event0,如果不是可以看看其他event
5、查看结果
cat /dev/input/event0,触摸屏则会有显示。
6、我的问题
可以看到/dev/input/event0设备出现,但是cat无数据;
通过cat /proc/interrupts,可以看见中断计数在增加;
因此在代码中的usbtouch_irq中,直接打印urb->status,不做条件判断,并打印read_data;
结果显示nonzero urb status received: -75(数据溢出),并且read_data是有数据的。
7、解决
[DEVTYPE_YHCUST_GENERAL_TOUCH] = {
.min_xc = 0x0,
.max_xc = 0x7fff,
.min_yc = 0x0,
.max_yc = 0x7fff,
.rept_size = 64,//原为7
.read_data = general_touch_read_data,
}
还有就是发现坐标0点不是0附近,将数值按16进制打印发现,高低字节反序了;