Bagaimana cara memahami aliran deteksi USB?

14

Saya ingin memahami aliran peristiwa USB dari ruang Kernel ke ruang pengguna (hanya karena keingintahuan saya, dalam mengetahui bagaimana hal-hal diterapkan).

Agar lebih jelas, saya ingin tahu bagaimana pop-up itu muncul di desktop saya ketika saya mencolokkan drive USB ke sistem saya dan bagaimana drive dipasang.

Saya juga ingin tahu bagaimana mengetahui jika ada beberapa gambar di USB saya dan jika "ya", bagaimana ia bertanya apakah saya perlu membukanya di GIMP atau perangkat lunak lain?

Saya tahu ini pertanyaan yang sangat besar dan luas, tapi tolong bantu saya dengan beberapa petunjuk tentang bagaimana memahami seluruh ide di baliknya.

Saya belum melakukan penjelajahan kode besar, tetapi saya meyakinkan Anda bahwa saya tidak memiliki masalah dalam melakukannya jika saya dapat dipandu dengan benar.

Sen
sumber

Jawaban:

16
  1. Perangkat dicolokkan, dan perangkat lunak yang mengelola bus perangkat keras untuk perangkat tersebut menerima interupsi (atau pemberitahuan lainnya di tingkat perangkat keras), dan pengemudi bus menyebutkan perangkat yang terpasang, atau melakukan tindakan perangkat keras khusus bus lainnya untuk mengidentifikasi perangkat.
  2. Kernel meminta untuk memuat driver untuk perangkat keras baru dengan memanggil / sbin / modprobe dengan bus / perangkat / pengidentifikasi perangkat keras dll.
  3. Di ruang pengguna, modprobe mencoba menemukan alias yang ditentukan oleh driver yang cocok. (Lihat /lib/modules/$(uname -r)/modules.aliasdaftar lengkapnya.) Ini akan terlihat berbeda berdasarkan antarmuka perangkat keras. Misalnya, pci:v0000102Bd00002527sv*sd*bc*sc*i*untuk perangkat PCI penjual 102B, perangkat 2527, dan apa pun untuk subvendor, dll, atau USB: usb:v2040p4982d*dc*dsc*dp*ic*isc*ip*.
  4. setelah driver perangkat dimuat (atau perangkat baru yang sudah memiliki driver diinisialisasi), driver di kernel mengirimkan pemberitahuan perangkat dimuat ke udevdalam userspace.
  5. udevmencocokkan pemberitahuan dengan daftar aturan di /lib/udev/rules.d/dan /etc/udev/rules.d. Dari sini, perilakunya sangat terspesialisasi, berdasarkan aturan.
  6. Dalam hal disk USB, 80-udisks.rulesfile tersebut kemungkinan merupakan tempat terbaik untuk bekerja. Aturan-aturan ini akan menggunakan hal-hal seperti blkid dan bantuan lain untuk menyelidiki jenis dan isi disk, mengisi semua jenis nilai konfigurasi termasuk hal-hal seperti ENV{UDISKS_PRESENTATION_HIDE}="1"mengabaikan disk karena suatu alasan. Lihat "man 7 udisks" untuk detailnya.
  7. The udisks-daemon mengawasi perangkat muncul di database udev , dan menyajikannya sebagai daftar perangkat yang dapat ditemukan di DBus. (Lihat "udisks - enumerate".)
  8. Berbagai tindakan dikonfigurasikan dalam udisks , dan kebijakan untuk mengizinkan tindakan tersebut dapat dilihat di file kebijakan /usr/share/polkit-1/actions/org.freedesktop.udisks.policy. (Siapa yang bisa me-mount, umount, dll.)
  9. Layanan yang tertarik pada perangkat akan mendengarkan acara DBus dari udisks , dan mengambil tindakan ketika mereka melihat kondisi tertentu. Sebagai contoh, Nautilus GNOME (via gvfs volume-monitor) akan meminta penghitungan otomatis untuk perangkat (melalui udisk , yang akan memeriksa kebijakannya, yang disebutkan di atas).
  10. Setelah sistem file di-mount, layanan mendengarkan yang sama akan mengambil lebih banyak tindakan. Sebagai contoh, Nautilus akan bertanya apakah Anda ingin membuka F-Spot ketika direktori penyimpanan foto umum DCIMditemukan pada sistem file.
Kees Cook
sumber
1
Mungkin Anda tahu bagaimana ini berbeda selama boot (saya berasumsi hanya langkah 1 berbeda)? Mengapa perangkat tidak terdeteksi saat boot, tetapi memuat dengan benar setelah pemasangan ulang manual?
naktinis