나는 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 위 파일에서 이벤트를 하나씩 읽습니다.
3.2 `/dev/input/eventX'에 이벤트를 하나씩 씁니다. - 파일을 닫습니다.
open
따라서 위의 변경에서는 이전과 같이 각 이벤트에 대한 오버 헤드 없이 이벤트 읽기 및 쓰기가 루프에서 수행됩니다 close
.
이번 변경으로 이벤트 전송 속도가 훨씬 빨라졌습니다 /dev/input/eventX
.
그러나 또 다른 문제가 발생합니다. 일부 이벤트는 예상대로 올바르게 작동하지 않습니다. 애플리케이션이 처리하기에는 이벤트가 너무 빨리 전송되고 있습니까?
usleep(10000)
전송되는 이벤트 사이에 추가하는 등 코드를 계속 변경하고 있습니다 . 하지만 원래의 느림으로 돌아왔습니다.
고심하다……