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

标签 c linux linux-kernel operating-system kernel

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

最佳答案

您可能会浏览两个文件: 驱动程序/输入/input.c 驱动程序/输入/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的值。

关于c - Linux 内核如何知道将输入事件写入哪个文件描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54610416/

相关文章:

c - 一些字符数组不以 '\0' 结尾

c - 有些值打印了我不想要的 i (i = 0; i < 10; i++) 的额外次数。在C中使用for循环时

无法从单链表中删除元音

c - printk 格式中 %pa[p] 中 p 的含义

c++ - 是否可以获取 mmap 的 Linux 源代码和 MapViewOfFile 的 Windows 源代码?

c - Linux 模块 __must_check 注解

c - 将 strtok 存储在数组中 ~ C

linux - 安装 docker 时出错

linux - 确定在 linux 中读取文件的最佳缓冲区大小

linux - 如何应对3.2亿个272字节的UDP数据包?