USB 감지의 흐름을 이해하는 방법?


14

커널 공간에서 사용자 공간으로의 USB 이벤트 흐름을 이해하고 싶습니다 (물론 구현 방법을 알면 호기심에서 벗어남).

더 명확하게 말하면, 시스템에 USB 드라이브를 꽂을 때 팝업이 어떻게 데스크탑에 나타나고 드라이브가 어떻게 마운트되는지 알고 싶습니다.

또한 USB에 일부 이미지가 있는지 확인하고 "yes"이면 김프 나 다른 소프트웨어에서 열어야하는지 묻는 방법을 알고 싶습니다.

나는 그것의 매우 크고 넓은 질문을 알고 있지만, 그 뒤에 전체 아이디어를 이해하는 방법에 대한 몇 가지 지침으로 나를 안내하십시오.

큰 코드 탐색을 수행하지는 않았지만 올바르게 안내받을 수 있다면 아무런 문제가 없음을 확신합니다.

답변:


16
  1. 장치가 연결되고 해당 장치의 하드웨어 버스를 관리하는 소프트웨어가 인터럽트 (또는 하드웨어 수준의 다른 알림)를 수신하고 버스 드라이버가 연결된 장치를 열거하거나 다른 버스 별 하드웨어 작업을 수행하여 장치를 식별합니다.
  2. 커널 은 하드웨어의 bus / device / etc 식별자와 함께 / sbin / modprobe 를 호출하여 새 하드웨어의 드라이버로드를 요청합니다 .
  3. 사용자 공간에서 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*.
  4. 장치 드라이버가로드되면 (또는 이미 드라이버가있는 새 장치가 초기화되면) 커널의 드라이버가로드 된 장치에 대한 알림을 udev사용자 공간에 보냅니다 .
  5. udev/lib/udev/rules.d/및 의 규칙 목록과 알림을 일치시킵니다 /etc/udev/rules.d. 여기에서 규칙에 따라 동작이 매우 전문화됩니다.
  6. USB 디스크의 경우 80-udisks.rules파일이 작업하기 가장 좋은 장소 일 수 있습니다. 이 규칙은 blkid 및 기타 도우미와 같은 것을 사용 하여 디스크의 유형과 내용을 검사하여 ENV{UDISKS_PRESENTATION_HIDE}="1"어떤 이유로 디스크를 무시하는 것과 같은 모든 구성 값 을 채 웁니다. 자세한 내용은 "man 7 udisk"를 참조하십시오.
  7. udisks - 데몬은 장치가에 표시하는 시계 의 udev 데이터베이스 및 DBUS를 통해 장치의 검색 가능한 목록으로 선물을 그들에게 그들. "udisks --enumerate"를 참조하십시오.
  8. udisk 에는 다양한 조치가 구성되며 해당 조치를 허용하는 정책은 정책 파일에서 확인할 수 있습니다 /usr/share/polkit-1/actions/org.freedesktop.udisks.policy. (누가 마운트 할 수 있는가 등)
  9. 장치에 관심이있는 서비스는 udisk에서 DBus 이벤트를 수신하고 특정 조건이 보이면 조치를 취합니다. 예를 들어, GNOME의 노틸러스 (gvfs volume-monitor를 통해)는 장치에 대한 자동 마운트를 요청합니다 ( 위에서 언급 한 정책을 확인하는 udisks 를 통해 ).
  10. 파일 시스템이 마운트되면 동일한 청취 서비스가 더 많은 조치를 취합니다. 예를 들어, 노틸러스는 파일 시스템에 공통 사진 저장 디렉토리 가 있을 때 F-Spot 을 열 것인지 묻습니다 DCIM.

1
부팅하는 동안 이것이 어떻게 다른지 알고 있습니까 (1 단계 만 다르다고 가정)? 부팅하는 동안 장치를 감지 할 수 없지만 수동 재 연결 후 올바르게로드되는 이유는 무엇입니까?
naktinis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.