我正在使用 kernel-5.10.24 的嵌入式 Linux 系统上工作,我想通过写入/dev/input/eventX
.
通过我的测试sendevent
(发送事件.c),事件注入不如真实硬件注入那么快。我认为这可能是因为将每个事件从用户空间
写入内核的开销。 所以我想知道是否有一种快速的方法让用户空间尽快发送事件?/dev/intput/eventX
谢谢,
答案1
缓慢来自于以下因素。
- fork 进程来运行 sendevent 命令;
- 打开
/dev/input/eventX
sendevent_main()
- 将事件数据写入上述文件中
sendevent_main()
; - 关闭文件 - in
sendevent_main()
.
我通过更改sendevent_main()
如下更快地得到了它。
- 打开
/dev/input/eventX
; - 打开包含事件列表的文件;
- 创建一个循环并执行以下操作
3.1 从上面的文件中一一读取事件
3.2 将事件一一写入到 `/dev/input/eventX' - 关闭文件。
因此,在上述更改中,事件读取和写入是在循环中完成的,而open
无需close
像以前那样对每个事件进行开销。
通过此更改,将事件发送到 的速度要快得多/dev/input/eventX
。
但它带来了另一个问题,某些事件的行为并不像预期的那样正确。发送事件的速度是否太快以至于应用程序无法处理?
我仍在检查和更改代码,例如usleep(10000)
在事件发送之间添加。但又回到了原来的缓慢。
挣扎……