Linux 内核如何知道将输入事件写入哪个文件描述符?
How does the Linux Kernel know which file descriptor to write input events to?
我想知道 Linux 内核知道将输入写入哪个文件描述符(例如 /dev/input/eventX)的机制。例如,我知道当用户单击鼠标时,会发生中断,由驱动程序处理并通过 input_event (drivers/input/input.c) 传播到 Linux 输入核心,最终被写入 /dev/input/ 中的适当文件。具体来说,我想知道我需要查看哪些源文件,以了解内核如何根据输入事件的相关信息知道要写入哪个文件。我的目标是看看我是否可以在内核将它们写入 /dev/input/eventX 字符文件之前确定与特定输入事件代码对应的文件描述符。
您可以浏览两个文件:
drivers/input/input.c
drivers/input/evdev.c
在evdev.c中,evdev_init()会调用input_register_handler()初始化input_handler_list.
然后在一个输入设备驱动中,初始化后input_dev,它会调用:
input_register_device(input_dev)
-> 获取设备 kobj 路径,如 /devices/soc/78ba000.i2c/i2c-6/6-0038/input/input2
-> input_attach_handler()
-> handler->connect(handler, dev, id);
-> evdev_connect()
在evdev_connect()中,它将执行以下操作:
1. 为新的 evdev 动态分配一个 minor。
2. dev_set_name(&evdev->dev, "event%d", dev_no);
3.调用input_register_handle()连接input_dev和evdev->handle。
4. 创建cdev,调用device_add().
之后,你会发现输入节点/dev/input/eventX,X是dev_no的值。
我想知道 Linux 内核知道将输入写入哪个文件描述符(例如 /dev/input/eventX)的机制。例如,我知道当用户单击鼠标时,会发生中断,由驱动程序处理并通过 input_event (drivers/input/input.c) 传播到 Linux 输入核心,最终被写入 /dev/input/ 中的适当文件。具体来说,我想知道我需要查看哪些源文件,以了解内核如何根据输入事件的相关信息知道要写入哪个文件。我的目标是看看我是否可以在内核将它们写入 /dev/input/eventX 字符文件之前确定与特定输入事件代码对应的文件描述符。
您可以浏览两个文件: drivers/input/input.c drivers/input/evdev.c 在evdev.c中,evdev_init()会调用input_register_handler()初始化input_handler_list.
然后在一个输入设备驱动中,初始化后input_dev,它会调用: input_register_device(input_dev) -> 获取设备 kobj 路径,如 /devices/soc/78ba000.i2c/i2c-6/6-0038/input/input2 -> input_attach_handler() -> handler->connect(handler, dev, id); -> evdev_connect()
在evdev_connect()中,它将执行以下操作: 1. 为新的 evdev 动态分配一个 minor。 2. dev_set_name(&evdev->dev, "event%d", dev_no); 3.调用input_register_handle()连接input_dev和evdev->handle。 4. 创建cdev,调用device_add().
之后,你会发现输入节点/dev/input/eventX,X是dev_no的值。