USB cihazı tanıma nasıl çalışır?


16

USB cihaz tanımanın Windows'da nasıl çalıştığını merak ediyorum. Bunun böyle bir şey hayal ediyorum :

  • Bir cihazı taktığınızda Windows'a "işte benim ne olduğumu söyleyecek cihaz kimliğim"
  • Windows, bu aygıt kimliğiyle eşleşen herhangi bir sürücünün yüklü olup olmadığına bakar. Sürücü muhtemelen Windows'a cihazın ne denmesi gerektiğini söyler - "BlackBerry Curve" veya "Canon Yazıcı"
  • Öyleyse, bu cihazı bir şekilde o sürücüyle ilişkilendirir
  • Aksi takdirde, çevrimiçi olarak eşleşen bir sürücü arar (izin verirseniz)

Haklı mıyım? Eğer öyleyse, bu hala bazı sorular bırakıyor.

  • Sürücüleri yüklediğinizde nereye giderler? Bir klasördeki dosyalar mı yoksa kayıt defterine ekleniyorlar mı?
  • Windows cihazı ilk tanıdığında, düşündüğünde ve son olarak "yeni cihazınız kurulu ve kullanıma hazır" derken ne yapıyor?
  • Windows eksik sürücüleri nerede arar? Kendi veritabanında mı? Cihaz üreticileri buraya dahil edilmek üzere Microsoft'a sürücüler gönderiyor mu?

Herkes bu sürecin nasıl işlediğini açıklayabilir mi? Ayrıca, diğer işletim sistemleri bunu farklı yapıyor mu?

Yanıtlar:


24

USB veri yolu fiziksel olarak, fiş takma (ve çıkarma) işlemi ana makine denetleyicisi tarafından tanınabilecek şekilde tasarlanmıştır. Bu "plug" olayı gerçekleştiğinde, ana bilgisayar denetleyicisi veri yolunu tarayan ve her aygıttan kendisini tanımasını isteyen aygıt sürücüsünü bilgilendirir.

Tüm USB aygıtları, aygıtla ilgili tanımlayıcılar adı verilen bir bilgi koleksiyonu içerir. Cihaz tanımlayıcıları aynı komutla tüm cihazlardan alınır. Bu, USB veriyolunun kendisi için bir aygıt sürücüsünün yeni bağlanan bir aygıta ne olduğunu etkin bir şekilde sormasını ve makul bir yanıt almayı beklemesini sağlar.

Tüm tanımlayıcıların sadece birkaçı, sürücüleri çoğu aygıtla eşleştirmek için doğrudan kullanılır. Bunun nedeni USB'nin aygıt sınıflarını tanımlaması ve genellikle her aygıt sınıfı için sistem sürücüsünün o sınıfta olduğunu iddia eden tüm aygıtları işlemek için yeterli olmasıdır.

Tüm klavyeler, örneğin fareler, tabletler ve oyun denetleyicileri gibi HID (İnsan Arabirimi) sınıfında olduğunu iddia edecektir. HID sınıfının birkaç alt sınıfı vardır (klavyeler, fareler, vb.), Böylece her biri beklenen şekilde işlenir.

Çoğu disk benzeri aygıt Yığın Depolama sınıfında olduğunu iddia eder ve sistem sürücüsü de sadece bu aygıtlar için çalışır.

Sınıf ve alt sınıfa ek olarak, tanımlayıcılar ayrıca bir satıcı kimliği (VID), ürün kimliği (PID) ve revizyon içerir. Satıcı kimlikleri standartlar komitesi tarafından atanır (çoğunlukla düzen sırasına göre, ancak bazı şirketlerin özel istekleri vardır: örneğin, intel 0x8086'dır). Ürün kimlikleri her satıcı tarafından atanır ve VID ve PID kombinasyonu, serbest bırakılan her ürün için benzersiz olmalıdır.

Bir aygıt ilk kurulduğunda, yüklenen aygıt sürücüsünü seçmek için VID, PID, revizyon, sınıf ve alt sınıf tahmin edilebilir bir şekilde kullanılır. Satıcıya ve ürüne özel adlara sahip olmak, satıcının stok sistemi sürücüsü tarafından başka türlü (neredeyse) doğru şekilde işlenebilecek bir aygıtı özelleştirmesini sağlar.

Bir diğer önemli tanımlayıcı, cihazın seri numarasıdır. Bir cihazın seri numarası varsa, farklı bir fiziksel USB bağlantı noktası kullanılsa bile tekrar takıldığında aynı şekilde tanınabilir ve tedavi edilebilir. Bu, depolama aygıtları için aynı sürücü harfini atamaları ve seri bağlantı noktası bağdaştırıcıları ve modemler gibi aygıtlar için aynı COM bağlantı noktası atamasını almaları açısından önemlidir.

Tüm bu süreç MSDN'de belgelenmiştir , ancak ayrıntılar çeşitli yerlere yayılmıştır.


Metodik açıklama için teşekkürler. Çok ilginç!
Nathan Long

3
Bu ayrıntıları belgelerden ve örneklerden ayırmak için harcadığım saatler, Windows için ilk aygıt sürücümü yazdığımda beklenmedik bir görevdi. Bunun sonuçlarını paylaşmaktan mutluluk duyuyorum ...
RBerteig

7

Sorular:

  • Dizinler: Sürücüler 2 dizine kurulur. Çalışan kısım (çoğu durumda)% RootDir% \ system32 içine kurulur, cihaz bilgisi kısmı% RootDir% \ inf içine kurulur. İnf dizini altında, kurulu / kayıtlı bir sürücü için bir oem * .inf dosyası oluşturulur. (* bir sayıdır). Vista altında sürücü henüz karşılaşılmayan aygıtları kurarken% RootDir% \ system32 \ driverstore dizinine kopyalanır.
  • Kayıt Defteri: Sürücü çekirdek modu hizmeti olarak yüklenir. Bunun için sürücü hizmeti için belirli kayıt defteri anahtarları oluşturulur. Veri yolu sürücüsünün altında, karşılık gelen cihazların ayrı bir cihaz örneği anahtarı aldığı başka bir yer vardır. Bu tuşta, aygıtın bu aygıt için geçerli olarak kullanılan sürücüye bir başvurusu vardır.
  • Aygıt 'varış': Veri yolu sürücüsü veri yolunda yeni bir aygıt bulduğunda, kendi anahtarının altında, sistemdeki bir aygıtı benzersiz bir şekilde tanımlamak için kullanılabilen benzersiz bir aygıt örneği kimliğine karşılık gelen bir anahtar kayıt defteri oluşturur. Bu anahtar zaten varsa, otobüs sürücüsü bu düğüm tarafından başvurulan aygıtı yüklemeye çalışır. Bu düğüm yoksa veya sürücü yüklenmezse, sistem% RootDir% \ inf altındaki kayıtlı aygıt sürücülerini tarayarak aygıt için uyumlu bir sürücü bulmaya çalışır. Bu aygıta hak kazanan sürücüler sıralanır ve sıralanır. Ardından en iyi sürücü seçilir ve aygıt için yüklenir.
  • Sürücü arama: Sürücüler önce inf dizininde aranır. Sürücü bulunamadığında, pencereler kullanıcıya sürücü sağlayıp sağlamadığını veya Microsoft sunucusuna bakıp bakmayacağını sorar. Sürücü Üreticileri, sürücülerini Microsoft aygıt sürücüsü sunucusuna dahil edilmek üzere gönderebilir.

Lunatik, cevabın ilk bölümünü, sözde otobüs sürücüsünün cihazı nasıl bulduğunu gösteriyor.


3

Usb hakkında iyi bir kitap tavsiye etmek istiyorum:

  • USB Komple Jan Axelson

Bunu istemediğinizi biliyorum, ancak bağlanması gereken usb cihazları hakkında biraz bilgi sahibi olmak iyi bir şey.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.