Bagaimana cara kerja pengenalan perangkat USB?

16

Saya ingin tahu bagaimana pengenalan perangkat USB bekerja di Windows. Saya membayangkan sesuatu seperti ini:

  • Saat Anda menyambungkan perangkat, ia memberi tahu Windows "inilah ID perangkat saya untuk memberi tahu Anda apa saya"
  • Windows terlihat untuk melihat apakah ada driver yang diinstal yang cocok dengan ID perangkat itu. Pengemudi mungkin memberi tahu Windows perangkat apa yang harus disebut - seperti "BlackBerry Curve" atau "Canon Printer"
  • Jika demikian, itu entah bagaimana mengaitkan perangkat itu dengan driver itu
  • Kalau tidak, ia mencari driver yang cocok secara online (jika Anda membiarkannya)

Apakah saya benar? Jika demikian, itu masih menyisakan beberapa pertanyaan.

  • Saat Anda menginstal driver, kemana mereka pergi? Apakah mereka file dalam folder, atau mereka ditambahkan ke registri?
  • Apa yang dilakukan Windows ketika pertama kali mengenali perangkat, berpikir, dan akhirnya mengatakan "perangkat baru Anda sudah diinstal dan siap digunakan?"
  • Di mana Windows mencari driver yang hilang? Apakah itu di database mereka sendiri? Apakah produsen perangkat mengirimkan driver ke Microsoft untuk disertakan di sana?

Adakah yang bisa menjelaskan bagaimana proses ini benar-benar bekerja? Juga, apakah OS lain melakukan ini secara berbeda?

Nathan Long
sumber

Jawaban:

24

Bus USB dirancang secara fisik sehingga tindakan memasukkan (dan melepas) colokan dapat dikenali oleh pengontrol host. Ketika peristiwa "colokan" ini terjadi, pengontrol host menginformasikan driver perangkatnya yang memindai bus dan meminta setiap perangkat untuk mengidentifikasi dirinya.

Semua perangkat USB berisi kumpulan informasi tentang perangkat, yang disebut deskriptor. Deskriptor perangkat diambil dari semua perangkat dengan perintah yang sama. Hal ini memungkinkan driver perangkat untuk bus USB itu sendiri secara efektif menanyakan perangkat yang baru terhubung apa itu, dan berharap mendapatkan respons yang masuk akal.

Dari semua deskriptor, hanya beberapa yang secara langsung digunakan untuk mencocokkan driver ke sebagian besar perangkat. Ini karena USB mendefinisikan kelas perangkat, dan biasanya driver sistem untuk setiap kelas perangkat cukup untuk menangani perangkat apa pun yang mengklaim berada di kelas itu.

Semua keyboard akan mengklaim berada di kelas HID (Human Interface), seperti halnya mouse, tablet, dan pengontrol game, misalnya. Kelas HID memiliki beberapa subclass (keyboard, mouse, dll.), Sehingga masing-masing ditangani dengan cara yang diharapkan.

Sebagian besar perangkat seperti disk akan mengklaim berada di kelas Mass Storage, dan driver sistem hanya berfungsi untuk mereka juga.

Selain kelas dan subkelas, deskriptor juga menyertakan ID vendor (VID), ID produk (PID), dan revisi. ID vendor diberikan oleh komite standar (kebanyakan dalam urutan masalah tetapi beberapa perusahaan mendapat permintaan khusus: intel adalah 0x8086, misalnya). ID produk diberikan oleh masing-masing vendor, dan kombinasi VID dan PID harus unik untuk setiap produk yang dirilis.

Ketika perangkat pertama kali diinstal, VID, PID, revisi, kelas dan subkelas digunakan dengan cara yang dapat diprediksi untuk memilih driver perangkat yang dimuat. Memiliki vendor dan nama khusus produk memungkinkan vendor menyesuaikan perangkat yang mungkin ditangani (hampir) dengan benar oleh driver sistem persediaan.

Deskriptor penting lainnya adalah nomor seri perangkat. Jika suatu perangkat memiliki nomor seri, maka itu dapat dikenali dan diperlakukan sama ketika dicolokkan kembali bahkan jika port USB fisik yang berbeda digunakan. Ini penting untuk perangkat penyimpanan sehingga mereka mendapatkan huruf drive yang sama ditetapkan, dan untuk perangkat seperti port serial adapter dan modem sehingga mereka diberi penunjukan port COM yang sama.

Seluruh proses ini didokumentasikan di MSDN , tetapi detailnya tersebar di berbagai tempat.

RBerteig
sumber
Terima kasih atas penjelasannya yang metodis. Sangat menarik!
Nathan Long
3
Jam yang saya habiskan untuk mengumpulkan rincian ini dari dokumentasi dan sampel adalah tugas yang tidak terduga ketika saya menulis driver perangkat pertama saya untuk Windows. Saya senang membagikan hasil itu ...
RBerteig
7

Pertanyaan:

  • Direktori: Driver diinstal ke dalam 2 direktori. Bagian yang berjalan akan (dalam kebanyakan kasus) diinstal ke% RootDir% \ system32, bagian informasi perangkat diinstal ke dalam% RootDir% \ inf. Di bawah direktori inf, untuk driver yang diinstal / terdaftar file oem * .inf dibuat. (* adalah angka). Di bawah Vista driver disalin ke direktori% RootDir% \ system32 \ driverstore sebagai referensi ketika menginstal perangkat yang belum ditemui.
  • Registry: Driver diinstal sebagai layanan mode kernel. Untuk ini kunci registri tertentu dibuat untuk layanan driver. Ada tempat lain di bawah sopir bus, di mana perangkat yang sesuai mendapatkan kunci instance perangkat individu. Pada kunci ini, perangkat memiliki referensi ke driver yang saat ini digunakan untuk perangkat ini.
  • 'Kedatangan' perangkat: Ketika pengemudi bus menemukan perangkat baru di busnya, itu membuat registri kunci di bawah kunci sendiri yang sesuai dengan id contoh perangkat unik, yang dapat digunakan untuk mengidentifikasi secara unik perangkat pada sistem. Jika kunci ini sudah ada, pengemudi bus mencoba memuat perangkat yang dirujuk oleh simpul ini. Ketika node ini tidak ada, atau driver tidak memuat, sistem mencoba menemukan driver yang kompatibel untuk perangkat, dengan memindai driver perangkat yang terdaftar di bawah% RootDir% \ inf. Driver yang memenuhi syarat untuk perangkat ini, dihitung dan diurutkan. Driver terbaik kemudian dipilih dan dimuat untuk perangkat.
  • Pencarian driver : Driver dicari pertama kali di direktori inf. Ketika tidak ada driver yang ditemukan, windows bertanya kepada pengguna, apakah ia dapat menyediakan driver atau apakah harus mencari di server Microsoft. Produsen Driver dapat mengirimkan driver mereka untuk dimasukkan pada server driver perangkat Microsoft.

Lunatik memiliki bagian pertama dari jawabannya, bagaimana sopir bus yang disebut menemukan perangkat.

Christopher
sumber
3

Saya ingin merekomendasikan buku yang bagus tentang usb:

  • USB Lengkap oleh Jan Axelson

Saya tahu Anda tidak meminta ini, tetapi ada baiknya mengetahui sedikit tentang perangkat usb yang seharusnya terhubung.

Johan
sumber