私はkernel -5.10.24を使用する組み込みLinuxシステムで作業しています/dev/input/eventX
。sendevent
event.cを送信)、イベント注入は実際のハードウェア注入ほど高速ではありません。これは、ユーザースペースから
カーネルまでのすべてのイベントを作成するオーバーヘッドが原因だと思います。もしそうなら、ユーザー空間でイベントをできるだけ早く送信する簡単な方法があるのだろうか。/dev/intput/eventX
ありがとう、
答え1
速度低下の原因は次のとおりです。
- sendevent コマンドを実行するためにプロセスをフォークします。
/dev/input/eventX
開いているsendevent_main()
- 上記のファイルにイベントデータを書き込みます
sendevent_main()
。 - ファイルを閉じる -
sendevent_main()
。
次のように変更すると、sendevent_main()
より速くなりました。
- 開いている
/dev/input/eventX
。 - イベントのリストを含むファイルを開きます。
- ループを作成し、次の作業を行います
。 3.1上記のファイルからイベントを1つずつ読みます。
3.2 `/dev/input/eventX'にイベントを1つずつ書き込みます。 - ファイルを閉じます。
open
したがって、上記の変更では、以前のように各イベントのオーバーヘッドなしでイベントの読み取りと書き込みがループ内で行われますclose
。
この変更により、イベントの転送速度がはるかに速くなりました/dev/input/eventX
。
しかし、別の問題が発生します。一部のイベントは期待どおりに正しく動作しません。アプリケーションが処理するにはイベントが速すぎます。
usleep(10000)
送信されるイベント間に追加するなど、コードを変更し続けています。でも元のゆっくりに戻ってきました。
苦労… …