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 위 파일에서 이벤트를 하나씩 읽습니다.
    3.2 `/dev/input/eventX'에 이벤트를 하나씩 씁니다.
  4. 파일을 닫습니다.

open따라서 위의 변경에서는 이전과 같이 각 이벤트에 대한 오버 헤드 없이 이벤트 읽기 및 쓰기가 루프에서 수행됩니다 close.

이번 변경으로 이벤트 전송 속도가 훨씬 빨라졌습니다 /dev/input/eventX.
그러나 또 다른 문제가 발생합니다. 일부 이벤트는 예상대로 올바르게 작동하지 않습니다. 애플리케이션이 처리하기에는 이벤트가 너무 빨리 전송되고 있습니까?

usleep(10000)전송되는 이벤트 사이에 추가하는 등 코드를 계속 변경하고 있습니다 . 하지만 원래의 느림으로 돌아왔습니다.

고심하다……

관련 정보