Linuxで/dev/input/eventXにイベント転送を高速化するには?

Linuxで/dev/input/eventXにイベント転送を高速化するには?

私はkernel -5.10.24を使用する組み込みLinuxシステムで作業しています/dev/input/eventX
sendeventevent.cを送信)、イベント注入は実際のハードウェア注入ほど高速ではありません。これは、ユーザースペースから
カーネルまでのすべてのイベントを作成するオーバーヘッドが原因だと思います。もしそうなら、ユーザー空間でイベントをできるだけ早く送信する簡単な方法があるのだろうか。/dev/intput/eventX

ありがとう、

答え1

速度低下の原因は次のとおりです。

  1. sendevent コマンドを実行するためにプロセスをフォークします。
  2. /dev/input/eventX開いているsendevent_main()
  3. 上記のファイルにイベントデータを書き込みますsendevent_main()
  4. ファイルを閉じる - sendevent_main()

次のように変更すると、sendevent_main()より速くなりました。

  1. 開いている/dev/input/eventX
  2. イベントのリストを含むファイルを開きます。
  3. ループを作成し、次の作業を行います
    。 3.1上記のファイルからイベントを1つずつ読みます。
    3.2 `/dev/input/eventX'にイベントを1つずつ書き込みます。
  4. ファイルを閉じます。

openしたがって、上記の変更では、以前のように各イベントのオーバーヘッドなしでイベントの読み取りと書き込みがループ内で行われますclose

この変更により、イベントの転送速度がはるかに速くなりました/dev/input/eventX
しかし、別の問題が発生します。一部のイベントは期待どおりに正しく動作しません。アプリケーションが処理するにはイベントが速すぎます。

usleep(10000)送信されるイベント間に追加するなど、コードを変更し続けています。でも元のゆっくりに戻ってきました。

苦労… …

関連情報