การรับรู้อุปกรณ์ USB ทำงานอย่างไร


16

ฉันอยากรู้ว่าการรู้จำอุปกรณ์ USB ทำงานอย่างไรใน Windows ฉันคิดว่ามันเป็นเช่นนี้:

  • เมื่อคุณเสียบอุปกรณ์จะแจ้งให้ Windows "นี่เป็นรหัสอุปกรณ์ของฉันเพื่อบอกคุณว่าฉันเป็นใคร"
  • Windows จะตรวจสอบว่ามีการติดตั้งไดรเวอร์ใด ๆ ที่ตรงกับ ID อุปกรณ์นั้นหรือไม่ ไดรเวอร์อาจแจ้งให้ Windows ทราบว่าควรใช้อุปกรณ์ชนิดใดเช่น "BlackBerry Curve" หรือ "เครื่องพิมพ์ Canon"
  • ถ้าเป็นเช่นนั้นจะเชื่อมโยงอุปกรณ์นั้นกับไดรเวอร์นั้น
  • มิฉะนั้นจะหาไดรเวอร์ที่ตรงกันทางออนไลน์ (ถ้าคุณให้มัน)

ฉันถูกไหม? ถ้าเป็นเช่นนั้นก็ยังมีคำถามอยู่บ้าง

  • เมื่อคุณติดตั้งไดรเวอร์พวกเขาจะไปที่ไหน มันเป็นไฟล์ในโฟลเดอร์หรือไม่หรือพวกมันถูกเพิ่มเข้าไปในรีจิสตรี?
  • Windows กำลังทำอะไรเมื่อรับรู้อุปกรณ์เป็นครั้งแรกคิดและในที่สุดก็พูดว่า "อุปกรณ์ใหม่ของคุณได้รับการติดตั้งและพร้อมใช้งานแล้ว"
  • Windows มองหาไดรเวอร์ที่หายไปที่ไหน มันอยู่ในฐานข้อมูลของตัวเองเหรอ? ผู้ผลิตอุปกรณ์ส่งไดรเวอร์ไปยัง Microsoft เพื่อรวมไว้ที่นั่นหรือไม่?

ใครสามารถอธิบายได้ว่ากระบวนการนี้ใช้งานได้จริงอย่างไร นอกจากนี้ระบบปฏิบัติการอื่น ๆ จะทำสิ่งนี้แตกต่างกันหรือไม่?

คำตอบ:


24

บัส USB ได้รับการออกแบบทางกายภาพเพื่อให้สามารถทำการเสียบ (และนำออก) ได้โดยคอนโทรลเลอร์ของโฮสต์ เมื่อเกิดเหตุการณ์ "ปลั๊ก" นี้ขึ้นตัวควบคุมโฮสต์จะแจ้งไดรเวอร์อุปกรณ์ซึ่งจะสแกนบัสและขอให้แต่ละอุปกรณ์ระบุตัวตนของมัน

อุปกรณ์ USB ทั้งหมดมีการรวบรวมข้อมูลเกี่ยวกับอุปกรณ์ที่เรียกว่า descriptors ตัวอธิบายอุปกรณ์ถูกดึงจากอุปกรณ์ทั้งหมดด้วยคำสั่งเดียวกัน สิ่งนี้จะช่วยให้ไดรเวอร์อุปกรณ์สำหรับบัส USB เองถามอุปกรณ์ที่เชื่อมต่อใหม่อย่างมีประสิทธิภาพว่ามันคืออะไรและคาดว่าจะได้รับการตอบสนองที่สมเหตุสมผล

ในบรรดาคำอธิบายทั้งหมดมีเพียงไม่กี่ตัวเท่านั้นที่ใช้โดยตรงเพื่อจับคู่ไดรเวอร์กับอุปกรณ์ส่วนใหญ่ นี่เป็นเพราะ USB กำหนดคลาสของอุปกรณ์และโดยปกติแล้วไดรเวอร์ระบบสำหรับอุปกรณ์แต่ละคลาสนั้นเพียงพอที่จะจัดการกับอุปกรณ์ใด ๆ ที่อ้างว่าอยู่ในคลาสนั้น

คีย์บอร์ดทั้งหมดจะอ้างว่าอยู่ในคลาส HID (Human Interface) เช่นเม้าส์แท็บเล็ตและตัวควบคุมเกมเป็นต้น คลาส HID มีคลาสย่อยหลายคลาส (คีย์บอร์ดหนู ฯลฯ ) ดังนั้นแต่ละคลาสจะได้รับการจัดการตามที่คาดไว้

อุปกรณ์ที่มีลักษณะคล้ายดิสก์ส่วนใหญ่จะอ้างว่าอยู่ในคลาส Mass Storage และไดรเวอร์ระบบสามารถใช้งานได้กับอุปกรณ์เหล่านั้นเช่นกัน

นอกเหนือจากคลาสและคลาสย่อยแล้ว descriptors ยังมี ID ผู้จำหน่าย (VID), ID ผลิตภัณฑ์ (PID) และการแก้ไข รหัสผู้ขายได้รับมอบหมายจากคณะกรรมการมาตรฐาน (ส่วนใหญ่ตามลำดับของปัญหา แต่บาง บริษัท ได้รับคำขอพิเศษ: intel คือ 0x8086 เป็นต้น) รหัสผลิตภัณฑ์ได้รับการกำหนดโดยผู้จำหน่ายแต่ละรายและการรวมกันของ VID และ PID จะต้องไม่ซ้ำกันสำหรับแต่ละผลิตภัณฑ์ที่วางจำหน่าย

เมื่อติดตั้งอุปกรณ์เป็นครั้งแรกจะมีการใช้ VID, PID, revision, class และ subclass ในวิธีที่คาดเดาได้เพื่อเลือกไดรเวอร์อุปกรณ์ที่โหลด การมีชื่อเฉพาะของผู้ขายและผลิตภัณฑ์ทำให้ผู้ขายสามารถปรับแต่งอุปกรณ์ที่อาจถูกจัดการ (เกือบ) อย่างถูกต้องโดยไดรเวอร์ระบบสต็อก

ตัวอธิบายที่สำคัญอีกอย่างคือหมายเลขซีเรียลของอุปกรณ์ หากอุปกรณ์มีหมายเลขประจำเครื่องจะสามารถรับรู้และปฏิบัติเช่นเดียวกันเมื่อทำการเสียบอีกครั้งแม้ว่าจะใช้พอร์ต USB จริงอื่น นี่เป็นสิ่งสำคัญสำหรับอุปกรณ์เก็บข้อมูลเพื่อให้ได้รับอักษรระบุไดรฟ์เดียวกันและสำหรับอุปกรณ์เช่นอะแดปเตอร์พอร์ตอนุกรมและโมเด็มเพื่อให้ได้รับการกำหนดพอร์ต COM เดียวกัน

กระบวนการทั้งหมดนี้มีการบันทึกไว้ที่MSDNแต่รายละเอียดจะถูกกระจายออกไปในหลากหลายสถานที่


ขอบคุณสำหรับคำอธิบายที่เป็นระเบียบ น่าสนใจมาก!
นาธานลอง

3
เวลาที่ฉันใช้รวบรวมรายละเอียดเหล่านี้จากเอกสารประกอบและตัวอย่างเป็นงานที่ไม่คาดคิดเมื่อฉันเขียนไดรเวอร์อุปกรณ์ตัวแรกสำหรับ Windows ฉันดีใจที่ได้แบ่งปันผลของการที่ ...
RBerteig

7

คำถาม:

  • ไดเรคทอรี่: ไดรเวอร์ถูกติดตั้งใน 2 ไดเรกทอรี ส่วนที่รันอยู่จะได้รับการติดตั้งลงใน% RootDir% \ system32 ส่วนข้อมูลอุปกรณ์จะถูกติดตั้งลงใน% RootDir% \ inf ภายใต้ inf dir สำหรับไดร์เวอร์ที่ติดตั้ง / ลงทะเบียนจะมีการสร้างไฟล์ oem * .inf (* คือตัวเลข) ภายใต้ Vista ไดรเวอร์จะถูกคัดลอกไปยังไดเรกทอรี% RootDir% \ system32 \ driverstore เป็นการอ้างอิงเมื่อทำการติดตั้งอุปกรณ์ที่ยังไม่พบ
  • รีจิสทรี: ไดรเวอร์ได้รับการติดตั้งเป็นบริการโหมดเคอร์เนล สำหรับคีย์รีจิสตรีนี้ถูกสร้างขึ้นสำหรับบริการไดร์เวอร์ มีอีกสถานที่หนึ่งภายใต้ไดรเวอร์บัสซึ่งอุปกรณ์ที่เกี่ยวข้องจะได้รับคีย์อินสแตนซ์ของอุปกรณ์แต่ละตัว ในคีย์นี้อุปกรณ์มีการอ้างอิงถึงโปรแกรมควบคุมที่ใช้ในปัจจุบันสำหรับอุปกรณ์นี้
  • อุปกรณ์ 'มาถึง':เมื่อคนขับรถบัสพบอุปกรณ์ใหม่บนรถบัสมันจะสร้างรีจิสตรีคีย์ภายใต้คีย์ของตัวเองซึ่งสอดคล้องกับรหัสอินสแตนซ์ของอุปกรณ์ที่ไม่ซ้ำกันซึ่งสามารถใช้เพื่อระบุอุปกรณ์ในระบบโดยไม่ซ้ำกัน หากคีย์นี้มีอยู่แล้วไดรเวอร์บัสจะพยายามโหลดอุปกรณ์ที่อ้างอิงโดยโหนดนี้ เมื่อโหนดนี้ไม่มีอยู่หรือไดรเวอร์ไม่โหลดระบบจะพยายามค้นหาไดรเวอร์ที่เข้ากันได้สำหรับอุปกรณ์โดยการสแกนไดรเวอร์อุปกรณ์ที่ลงทะเบียนภายใต้% RootDir% \ inf ไดรเวอร์ที่ผ่านการรับรองสำหรับอุปกรณ์นี้รับการแจกแจงและเรียงลำดับ ไดรเวอร์ที่ดีที่สุดจะถูกเลือกและโหลดสำหรับอุปกรณ์
  • ค้นหาไดรเวอร์:ไดรเวอร์จะถูกค้นหาก่อนในไดเรกทอรี inf เมื่อไม่พบไดรเวอร์ windows จะถามผู้ใช้ว่าสามารถให้ไดรเวอร์หรือควรดูบนเซิร์ฟเวอร์ Microsoft ผู้ผลิตไดรเวอร์อาจส่งไดรเวอร์ของตนเพื่อรวมไว้ในเซิร์ฟเวอร์ไดรเวอร์อุปกรณ์ Microsoft

Lunatik มีส่วนแรกของคำตอบวิธีที่คนขับรถบัสเรียกว่าหาอุปกรณ์


3

ฉันอยากจะแนะนำหนังสือที่ดีเกี่ยวกับ usb:

  • USB เสร็จสมบูรณ์โดย Jan Axelson

ฉันรู้ว่าคุณไม่ได้ขอสิ่งนี้ แต่เป็นการดีที่จะรู้เพียงเล็กน้อยเกี่ยวกับอุปกรณ์ usb ที่ควรจะเชื่อมต่อ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.