Linux에서 하드웨어 핫플러그 이벤트, 자세한 내용
Linux에서 USB 장치의 연결 및 해제를 감지하는 방법에 대해 설명하며, 일반적으로는 libusb 라이브러리를 사용하지만, 특정 상황에서는 이를 사용하지 않고 직접 이벤트를 처리하는 방법을 탐구합니다.
udev와 netlink를 중심으로, 커널이 netlink 프로토콜을 통해 장치 이벤트를 udev에 전달하고, udev가 이를 처리한 후 다시 netlink 멀티캐스트 그룹을 통해 사용자 공간 프로그램에 재전송하는 구조를 상세히 분석합니다.
특히, udev 이벤트는 NETLINK_KOBJECT_UEVENT 프로토콜을 사용하며, udev가 전송하는 패킷은 고유한 **헤더 구조체(0xfeedcafe 버전)**와 함께 여러 키-값 쌍으로 이루어져 있어, 이를 직접 수신하고 해석하는 예제 코드도 함께 제공합니다.
또한, udev 이벤트 메시지는 SO_PASSCRED 옵션을 통해 송신 프로세스의 PID, UID, GID 정보를 포함하여 보안성을 확보하며, 이를 통해 메시지 위조를 방지하는 점도 강조합니다.
이 글은 리눅스 시스템에서 USB 및 기타 장치 이벤트를 저수준에서 직접 감지하고 처리하려는 개발자에게 실용적인 참고 자료가 될 것입니다.