커널 공간에서 사용자 공간으로의 USB 이벤트 흐름을 이해하고 싶습니다 (물론 구현 방법을 알면 호기심에서 벗어남).
더 명확하게 말하면, 시스템에 USB 드라이브를 꽂을 때 팝업이 어떻게 데스크탑에 나타나고 드라이브가 어떻게 마운트되는지 알고 싶습니다.
또한 USB에 일부 이미지가 있는지 확인하고 “yes”이면 김프 나 다른 소프트웨어에서 열어야하는지 묻는 방법을 알고 싶습니다.
나는 그것의 매우 크고 넓은 질문을 알고 있지만, 그 뒤에 전체 아이디어를 이해하는 방법에 대한 몇 가지 지침으로 나를 안내하십시오.
큰 코드 탐색을 수행하지는 않았지만 올바르게 안내받을 수 있다면 아무런 문제가 없음을 확신합니다.
답변
- 장치가 연결되고 해당 장치의 하드웨어 버스를 관리하는 소프트웨어가 인터럽트 (또는 하드웨어 수준의 다른 알림)를 수신하고 버스 드라이버가 연결된 장치를 열거하거나 다른 버스 별 하드웨어 작업을 수행하여 장치를 식별합니다.
- 커널 은 하드웨어의 bus / device / etc 식별자와 함께 / sbin / modprobe 를 호출하여 새 하드웨어의 드라이버로드를 요청합니다 .
- 사용자 공간에서 modprobe 는 일치하는 드라이버 지정 별명을 찾으려고합니다. (
/lib/modules/$(uname -r)/modules.alias
전체 목록 은 참조하십시오 .) 하드웨어 인터페이스에 따라 다릅니다. 예를 들어,pci:v0000102Bd00002527sv*sd*bc*sc*i*
PCI 장치 공급 업체 102B, 장치 2527 및 하위 공급 업체 등의 USB 또는 USB의 경우 :usb:v2040p4982d*dc*dsc*dp*ic*isc*ip*
. - 장치 드라이버가로드되면 (또는 이미 드라이버가있는 새 장치가 초기화되면) 커널의 드라이버가로드 된 장치에 대한 알림을
udev
사용자 공간에 보냅니다 . udev
/lib/udev/rules.d/
및 의 규칙 목록과 알림을 일치시킵니다/etc/udev/rules.d
. 여기에서 규칙에 따라 동작이 매우 전문화됩니다.- USB 디스크의 경우
80-udisks.rules
파일이 작업하기 가장 좋은 장소 일 수 있습니다. 이 규칙은 blkid 및 기타 도우미와 같은 것을 사용 하여 디스크의 유형과 내용을 검사하여ENV{UDISKS_PRESENTATION_HIDE}="1"
어떤 이유로 디스크를 무시하는 것과 같은 모든 구성 값 을 채 웁니다. 자세한 내용은 “man 7 udisk”를 참조하십시오. - udisks – 데몬은 장치가에 표시하는 시계 의 udev 데이터베이스 및 DBUS를 통해 장치의 검색 가능한 목록으로 선물을 그들에게 그들. “udisks –enumerate”를 참조하십시오.
- udisk 에는 다양한 조치가 구성되며 해당 조치를 허용하는 정책은 정책 파일에서 확인할 수 있습니다
/usr/share/polkit-1/actions/org.freedesktop.udisks.policy
. (누가 마운트 할 수 있는가 등) - 장치에 관심이있는 서비스는 udisk에서 DBus 이벤트를 수신하고 특정 조건이 보이면 조치를 취합니다. 예를 들어, GNOME의 노틸러스 (gvfs volume-monitor를 통해)는 장치에 대한 자동 마운트를 요청합니다 ( 위에서 언급 한 정책을 확인하는 udisks 를 통해 ).
- 파일 시스템이 마운트되면 동일한 청취 서비스가 더 많은 조치를 취합니다. 예를 들어, 노틸러스는 파일 시스템에 공통 사진 저장 디렉토리 가 있을 때 F-Spot 을 열 것인지 묻습니다
DCIM
.