Linux内核如何知道将输入事件写入哪个文件描述符?

5
我想了解Linux内核知道将输入写入哪个文件描述符(例如/dev/input/eventX)的机制。例如,我知道当用户单击鼠标时,会发生中断,由驱动程序处理并通过input_event(drivers/input/input.c)传播到Linux输入核心,最终会被写入到/dev/input/中的适当文件中。具体来说,我想知道需要查看哪些源文件才能了解内核如何根据输入事件提供的信息知道要写入哪个文件。我的目标是在内核将它们写入/dev/input/eventX字符文件之前确定与特定输入事件代码相对应的文件描述符。

请参见 https://elixir.bootlin.com/linux/latest/source/drivers/input/input.c#L131,那里似乎有一个与输入设备相关联的处理程序列表,并且 list_for_each_entry_rcu() 依次调用它们。 研究一下如何将 dev->h_list 添加到其中。 - jamieguinan
1个回答

1
你可能需要查看两个文件: 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动态分配一个次设备号。 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的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接