本文共 3074 字,大约阅读时间需要 10 分钟。
/dev/input//sys/class/input//proc/bus/input/
到底有几个input 设备, 有几个 eventX 总共就有几个 input 设备一个 input 设备可能在 /dev/input/ 下面生成1或多个节点监听设备上报的事件可以监听什么接口 /dev/input/eventX 设备的 sys device 在哪里 /sys/class/input/event5/device/device设备的 sys driver 在哪里 /sys/class/input/event5/device/device/driver利用 /proc/bus/input/handlers 查看 注册的 input handlers利用 /proc/bus/input/devices 查看 注册的 input devices
static const struct file_operations evdev_fops = { .owner = THIS_MODULE, .read = evdev_read, .write = evdev_write, .poll = evdev_poll, .open = evdev_open, .release = evdev_release, .unlocked_ioctl = evdev_ioctl, #ifdef CONFIG_COMPAT .compat_ioctl = evdev_ioctl_compat, #endif .fasync = evdev_fasync, .flush = evdev_flush, .llseek = no_llseek, };一般监听事件,流程为 open poll read ,很少用到其他write 用来模拟 内核 上报事件 一般上报事件是从内核上报的 可以利用write从用户空间上报事件给内核,然后内核再上报给用户空间ioctrl 进行一些iotrl 操作 获取 input 版本号 ...
//todo
// 注册的handlers列表//input_handlers_seq_show# cat /proc/bus/input/handlersN: Number=0 Name=kbdN: Number=1 Name=sysrq (filter)N: Number=2 Name=mousedev Minor=32N: Number=3 Name=evdev Minor=64
// 注册的device 列表// input_devices_seq_showcat /proc/bus/input/devicesI: Bus=0011 Vendor=1111 Product=2222 Version=5555N: Name="I am simplest input subsystem"P: Phys=S: Sysfs=/devices/virtual/input/input56U: Uniq=H: Handlers=kbd event2 B: PROP=0B: EV=3B: KEY=100000 0 0 0
button_dev->id.bustype=BUS_I8042; button_dev->id.vendor=0x1111; button_dev->id.product=0x2222; button_dev->id.version=0x5555;
button_dev->name="I am simplest input subsystem";
set_bit(EV_KEY, button_dev->evbit); event2 肯定是必须有的
set_bit(INPUT_PROP_DIRECT,button_dev->propbit); // 表明设备的坐标直接和屏幕坐标向对应
button_dev->evbit[0] = BIT_MASK(EV_KEY); // 0x01EV_SYNC // 0x002^1 + 2^0 = 3
因为 在 这个调用的基础上 button_dev->evbit[0] = BIT_MASK(EV_KEY);做了下面的动作button_dev->keybit[BIT_WORD(KEY_UP)] = BIT_MASK(KEY_UP);// //该句是 device 匹配了 kbd handlerB: KEY=1 1000 0 0 40-31 号的 KEY_XXX 位与 为 432-63 号的 KEY_XXX 位与 为 0128- 号的 KEY_XXX 位与 为 0
转载地址:http://hxigi.baihongyu.com/