커널 공간에서 사용자 공간으로의 USB 이벤트 흐름은 무엇입니까? USB 드라이브를 연결하면 바탕 화면에 팝업이 나타납니다. 새 USB 드라이브를 감지한 후 이를 장착하고 팝업을 표시하기까지의 일련의 이벤트는 무엇입니까?
답변1
udev
이는 최신 Linux 시스템에서 제공됩니다. 시스템과 함께 시작된 데몬 프로세스는 커널 이벤트에 대한 일치 규칙을 udev
검색 /etc/udev/rules.d
하고 실행합니다. USB 드라이브를 삽입 하면 일치하는 규칙을 검색하고 실행하는 /lib/udev/rules.d
이벤트가 트리거됩니다 .udev
규칙 자체가 시스템의 기능을 결정합니다. 최근에는 udev
DBUS를 통해 애플리케이션에 경고를 보내는 HAL과의 통신이 이루어졌습니다. 이 접근 방식은 이제 직접 또는 다음을 통해 전달 udev
하는 통합 솔루션을 선호하여 더 이상 사용되지 않습니다.udevd
dbus
dbus 보내기.
udev
활동을 통해 모니터링할 수 있습니다 udevadm monitor
.
답변2
나는 아직 이것에 대해 완전히 확신하지 못하므로 소금 한 알씩 받아들이고 더 많은 연구를 하십시오.
커널 핫플러그 하위 시스템으로 시작됩니다. 장치가 설정된 후에는 핫플러그 이벤트를 처리하도록 설정된 사용자 공간 프로그램( echo hotplug_handler > /proc/sys/kernel/hotplug
설정된 경우)을 호출하거나 kobject_uevent netlink 소켓을 통해 패킷을 보냅니다. 커널은 핫플러그 핸들러를 시작할 때 일부 환경 변수를 설정합니다. 커널이 패킷을 보낼 때 키=값 쌍이 포함됩니다. 원하는 경우 환경을 기록하고 처리기로 설정하는 스크립트를 설정할 수 있습니다(물론 프로덕션 시스템이 아닌 테스트 설정).
일반적으로 udev는 핸들러로 설정되며 이벤트를 처리하는 방법에 대한 몇 가지 규칙을 설정합니다. 거기에서 다른 프로그램을 시작하여 다른 작업(예: dbus 메시지 발행)을 수행할 수 있습니다. 이러한 udev 규칙은 특정 관심 분포에 크게 의존합니다.
그 안에 많은 정보가 들어있어요이 스레드누군가 문서를 작성하려고 합니다. 첫 번째 메시지가 정확하지 않다는 점에 유의하세요.